微机接口大作业

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
PCF8583_respons();
add = add+0x01;
PCF8583_start();
PCF8583_wr_byte(add);//按地址读多个字节
PCF8583_respons();
while(n_byte)//读n个地址
{
*temp = PCF8583_rd_byte();
if(n_byte != 1)
{
unsigned char i;
sbLOAD = 0;
for(i=0;i<8;i++)//先送出8位地址
{
sbCLK = 0; //时钟拉低
Addr <<= 1; //移位送出地址
sbDIN= CY;//送出数据
sbCLK = 1; //时钟上升沿
_nop_();
_nop_();
sbCLK = 0;
{
unsigned char *temp;
temp = tim_rd_buffer;
add = add<<1;
add = 0xa0+add+0x00;
PCF8583_start();
PCF8583_wr_byte(add);//按地址写多个字节
PCF8583_respons();
PCF8583_wr_byte(com);//首字节是待写入首地址
PCF8583_respons();
if(!tim_ack)
{
tim_err = 1;
PCF8583_stop();
return;
}
temp++;
n_byte--;
}
PCF8583_stop();
}
void PCF8583_read_n_byte(unsigned char add,unsigned char com,unsigned char n_byte)
void PCF8583_wr_byte(unsigned char dat)
{
unsigned char i , temp;
temp = dat;
for(i=0;i<8;i++)
{
tim_scl = 0;
delay11us(1);
if(temp&0x80)
tim_sda = 1;
else
tim_sda = 0;
{
tim_wr_buffer[1] = tim_rd_buffer[1];//second
tim_wr_buffer[2] = tim_rd_buffer[2]-0x01;//minute
tim_wr_buffer[3] = tim_rd_buffer[3];//hour
tim_wr_buffer[4] = tim_rd_buffer[4];//day
tim_ack = 1;
else
tim_ack = 0;
tim_scl = 0;
delay11us(1);
}
// i2c主器件应答
void PCF8583_master_respons(bit master_ack)
{
tim_scl = 0;
delay11us(1);
tim_sda = ~master_ack;
{
PCF8583_master_respons(1);//如果不是最后一个字节的数据则发送一个相应位
}
temp++;
n_byte--;
}
PCF8583_stop();
}
void PCF8583_jia_time()//加1分钟
{
tim_wr_buffer[1] = tim_rd_buffer[1];//second
sbit sbCLK = P3^7; //MAX7219的时钟引脚
sbit OE = P2^3; //OE引脚
sbit EOC = P2^2; //EOC引脚定义
sbit ST = P2^1; //启动引脚定义START
sbit CLK = P2^0; //时钟引脚定义CLK
sbit ADDRA = P2^5;
unsigned char tim_wr_buffer[16];
/*****************11us延时函数*************************/
void delay11us(unsigned char t)
{
for (;t>0;t--);
}
void delay(unsigned int x)
{
unsigned int a,b;
for(a=x;a>5;a--);
for(b=10;b>0;b--);
}
//写MAX7219函数,Addr为MAX7219的内部寄存器地址,Dat为待写入的数据
void Write7219(unsigned char Addr,unsigned char Dat)
tim_scl = 0;
delay11us(1);
tim_sda = 1;
delay11us(1);
for(i=0;i<8;i++)
{
tim_scl = 1;
delay11us(1);
k = (k<<1)|tim_sda;
tim_scl = 0;
delay11us(1);
}
return k;
}
void PCF8583_write_n_byte(unsigned char add,unsigned char com,unsigned char *dat,unsigned char n_byte) //
{
unsigned char i = 0;
unsigned char temp;
temp = *dat;//发送地址给'temp'.
add = add<<1;
add = 0xa0+add+0x00;
PCF8583_start();
PCF8583_wr_byte(add);
PCF8583_respons();
}
void PCF8583_rd_time()
{
unsigned chartemp;wk.baidu.com
PCF8583_read_n_byte(0,2,9);
time.second = ((tim_rd_buffer[1]&0x70)>>4)*10 + (tim_rd_buffer[1]&0x0f);//second
time.minute = ((tim_rd_buffer[2]&0x70)>>4)*10 + (tim_rd_buffer[2]&0x0f);//minute
delay11us(1);
tim_scl = 1;
delay11us(1);
tim_scl = 0;
delay11us(1);
}
//i2c初始化.
void PCF8583_init()
{
tim_sda = 1;
delay11us(1);
tim_scl = 1;
delay11us(1);
}
// i2c写n个字节
temp = temp<<1;
delay11us(1);
tim_scl = 1;
delay11us(1);
}
tim_scl = 0;
delay11us(1);
tim_sda = 1;
delay11us(1);
}
unsigned char PCF8583_rd_byte()
{
unsigned char i,k;
南京航空航天大学
研究生实验报告
姓名
学号
学 院
专业
课程名称微机接口技术
指导教师张乐年
二〇一六年八月
原理图
元器件列表
序号
原件名称
原件作用
1
AT89C51
4K字节FLASH存储器
2
TSEG-MPX8-CC-BLUE
8位7段码数码管,显示蓝色
3
MAX7219
共阴极显示驱动器,用来驱动8为7段数码显管
4
PCF8583
{
tim_sda = 1;
delay11us(1);
tim_scl = 1;
delay11us(1);
tim_sda = 0;
delay11us(1);
}
// i2c停止.
void PCF8583_stop()//一个从低到高的跳变作为i2c停止标志.
{
tim_sda = 0;
delay11us(1);
tim_scl = 1;
delay11us(1);
tim_sda = 0;
}
//i2c从器件应答
void PCF8583_respons()
{
unsigned char i;
tim_scl = 1;
delay11us(1);
while((tim_sda)&&(i<250)) i++;
if(!tim_sda)
}
for(i=0;i<8;i++)//再送出8位数据
{
sbCLK = 0;
Dat <<= 1; //移位送出数据
sbDIN= CY;
sbCLK = 1;
_nop_();
_nop_();
sbCLK = 0;
}
sbLOAD = 1;
}
//MAX7129的初始化函数
void Initialise7219()
模拟电脑显示数据
C语言程序:
#include <reg51.h>
#include <intrins.h>
#include <I2Clib.c>
#include <stdio.h>
struct time
{
unsigned charsecond;
unsigned charminute;
unsigned charhour;
unsigned charday;
unsigned charweekday;
unsigned charmonth;
unsigned intyear;
} time;
sbit tim_sda=P1^0;
sbit tim_scl=P1^1;
sbit sbDIN= P3^5; //MAX7219的数据引脚
sbit sbLOAD = P3^6; //MAX7219的控制引脚
if(!tim_ack)
{
tim_err = 1;
return;
}
PCF8583_wr_byte(com);//发送EEPROM起始地址
PCF8583_respons();
if(!tim_ack)
tim_err = 1;
return;
}
while(n_byte)//写入n个字节.
{
PCF8583_wr_byte(temp);
sbit ADDRB = P2^6;
sbit ADDRC = P2^7;
sbit button1=P1^2;
sbit button2=P1^3;
sbit button3=P1^4;
sbit button4=P1^5;
sbit jian0=P0^0;
sbit jian1=P0^1;
sbit jian2=P0^2;
tim_wr_buffer[2] = tim_rd_buffer[2]+0x01;//minute
tim_wr_buffer[3] = tim_rd_buffer[3];//hour
tim_wr_buffer[4] = tim_rd_buffer[4];//day
tim_wr_buffer[5] = tim_rd_buffer[5];//weekday
tim_wr_buffer[5] = tim_rd_buffer[5];//weekday
tim_wr_buffer[6] = tim_rd_buffer[6];//month
tim_wr_buffer[7] = tim_rd_buffer[7];//year
PCF8583_write_n_byte(1,2,tim_wr_buffer,8);
tim_wr_buffer[6] = tim_rd_buffer[6];//month
tim_wr_buffer[7] = tim_rd_buffer[7];//year
PCF8583_write_n_byte(1,2,tim_wr_buffer,8);
}
void PCF8583_jian_time()//减1分钟
带256字节RAM的实时时钟芯片,用于显示时间
5
ADC0809
8通道A/D转换芯片,用于采集外部模拟电压信号,并向单片机输出数字信号
6
POT-HG
电位器模拟外部模拟信号
7
FM24C256
用于保存最近20个外部故障数据包(包含故障点和故障时间)
8
MAX232
将系统与上位机想连接,传输数据
9
VIRTUAL TERMINAL
sbit jian3=P0^3;
sbit jian4=P0^4;
sbit jian5=P0^5;
sbit jian6=P0^6;
sbit jian7=P0^7;
unsigned charDisp_Buffer[8];
bittim_ack;// i2c slave ack.
bittim_err;
unsigned char tim_rd_buffer[16];
{
Write7219(0x09,0xff);//编码模式寄存器
Write7219(0x0a,0x07);//显示亮度控制
Write7219(0x0b,0x07);//扫描控制
Write7219(0x0c,0x01);//关闭模式控制寄存器设置
}
// i2c启动
void PCF8583_start()//一个从高到底的跳变作为i2c启动标志.
相关文档
最新文档