1、3.实验结果 刚开始运行时,单片机没有读取任何数据,此时数码管显示数字为0;当“读卡”按钮按下时,此时发光二极管亮,数码管显示预先存入24C04芯片的数值;当“清除”按钮按下时,此时此时发光二极管灭,数码管数值清零。图4图5图6五、实验总结通过本次实验我了解了存储器卡存、取数据的过程,同时了解串行总线的工作原理。实验在程序编写过程中遇到了问题,还是参考过老师以及网上的程序得到同学的帮助,才大体上完成。每次实验都有新的收获,以后我会更加努力学习的。六、实验代码#include #include#define uint unsigned int#define uchar unsigned char
2、#define NOP4() _nop_();_nop_(); /延时4ussbit SCL = P10; /SCL引脚sbit SDA = P11; /SDA引脚sbit BUTTON = P15; /定义读卡按键sbit LED = P16;/定义模拟上电卡座sbit BUTTONQ = P17;/定义模拟取卡按键uint shu; /定义写入变量/数码管显示数组uchar code DUAN_XUAN= 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;/延迟函数void Delay(uint x) uchar i; while(x-)
3、for(i=0;i0;t-);/*IIC启动*/void Start() SDA=1;SCL=1;NOP4();SDA=0;SCL=0;/*IIC停止*/void Stop() SDA=0;SDA=1;/*读取应答*/void RACK() SDA=1;/*发送非应答信号*/void NO_ACK()/*向24c04中写一字节*/void Write_A_Byte(uchar b) for(i=0;8;i+)/循环移入8位 b=1;SDA=CY; RACK(); /读取应答/*向24c04中读一字节*/uchar Receive_A_Byte() uchar i,d;i+) SCL=1;dd|
4、=SDA; return d;/*任意地址写数据*/void Write_Random_Address_Byte(uchar add,uchar dat) Start(); Write_A_Byte(0xa0); Write_A_Byte(add); Write_A_Byte(dat); Stop(); DelayMS(10);/*当前地址读数据*/uchar Read_Current_Address_Data() uchar d; Start(); Write_A_Byte(0xa1); d=Receive_A_Byte(); NO_ACK();/*任意地址读数据*/uchar Random
5、_Read(uchar addr) Write_A_Byte(addr); return Read_Current_Address_Data();/显示函数void display(uint x) uchar bai,shi,ge; bai=x/100; /取百位 shi=x%100/10; /取十位 ge=x%10; /取个位 P0=0xff; /消影 Delay(1); P2=0x01; P0=DUAN_XUANge; /显示个位 Delay(10); P2=0x02; P0=DUAN_XUANshi; /显示十位 P2=0x04; P0=DUAN_XUANbai; /显示百位/主函数 v
6、oid main() uint x; x=0; shu=129; /把要写的值赋给变量 BUTTON=1; LED=0; Write_Random_Address_Byte(0x00,shu); /往00地址写入一个值 shu = Random_Read(0x00) ; / 读00地址的值 while(1) if(BUTTON=0) /判断读卡按键 Delay(40); if(BUTTON=0) /消抖 LED=1; /灯亮 x=shu; /把读出的数赋给显示变量 if(BUTTONQ=0) /判断清除按键 if(BUTTONQ=0) LED=0; /灯灭 x=0;/对显示变量的值清零 display(x); /显示
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1