EEPROM_IIC
来源:互联网 发布:小孩刘心悠原帖知乎 编辑:程序博客网 时间:2024/06/03 17:54
# include<reg52.h># define uchar unsigned char# define uint unsigned int sbit sda=P2^0;sbit scl=P2^1;sbit lsa=P2^2;sbit lsb=P2^3;sbit lsc=P2^4;uint code smgduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0到Fuint disp[3];void delay(uchar t);void delay_1(uchar x);void at24c02_start();void at24c02_stop();void at24c02_ack();void at24c02_init();void at24c02_write_onebyte(uchar byte);uchar at24c02_read_onebyte();void byte_write(uchar slave_add, uchar byte_add, uchar write_add);uchar random_read(uchar slave_add, uchar byte_add);void datepros(uchar w);void display();uchar k,n;int main(){ at24c02_init(); while(1) { random_read(0xa0,0); k++; if(k==50) //延时一段时间 { k=0; n++; } if(n==250) { n=0; } datepros(n); //数字处理 display(); //数码管显示 byte_write(0xa0,0,n);//字节写函数 delay(1); }}/*************************************************************** 1、 IIC延时函数***************************************************************/void delay(uchar t){ uchar x,y; for(x=t;x>0;x--) { for(y=10;y>0;y--) {} }}/*************************************************************** 数码管延时函数***************************************************************/void delay_1(uchar x){ uchar m,n; for(n=x;n>0;n--) { for(m=120;m>0;m--) {} }}/*************************************************************** 2、 起始函数***************************************************************/void at24c02_start(){ scl=1; delay(1); sda=1; delay(1); sda=0; //SDA下降沿 delay(1); }/*************************************************************** 3、停止函数***************************************************************/void at24c02_stop(){ scl=1; delay(1); sda=0; delay(1); sda=1;//SDA上升沿 delay(1); }/*************************************************************** 4、应答函数***************************************************************/void at24c02_ack(){ uchar i; scl=1; delay(1); while((sda==1)&&(i<250))//判断是否响应 { i++; } scl=0; delay(1);}/*************************************************************** 5、初始化函数***************************************************************/void at24c02_init(){ sda=1; scl=1;}/*************************************************************** 6、向at24c02里写入一个字节的函数***************************************************************/void at24c02_write_onebyte(uchar byte){ uchar i,temp; temp=byte; scl=0; delay(1); for(i=0;i<8;i++) //一位一位的写入字节 { temp=temp<<1; //左移 sda=CY; //最高位移动到CY里面 再赋值给sda delay(1); scl=1; //scl变化时 sda才允许变化 delay(1); scl=0; delay(1); } sda=1; //释放sda delay(1);}/*************************************************************** 7、从at24c02读取一个字节的函数***************************************************************/uchar at24c02_read_onebyte(){ uchar i,dat=0; scl=0; delay(1); sda=1; delay(1); for(i=0;i<8;i++) { scl=1; delay(1); dat<<=1; dat|=sda; delay(1); scl=0; delay(1); } return dat;}/*************************************************************** 8、定义一个字节写函数***************************************************************/void byte_write(uchar slave_add, uchar byte_add, uchar write_add){ at24c02_start(); at24c02_write_onebyte(slave_add); at24c02_ack(); at24c02_write_onebyte(byte_add); at24c02_ack(); at24c02_write_onebyte(write_add); at24c02_stop();}/*************************************************************** 9、选择地址函数***************************************************************/uchar random_read(uchar slave_add, uchar byte_add){ uchar num; at24c02_start(); at24c02_write_onebyte(slave_add); at24c02_ack(); at24c02_write_onebyte(byte_add); at24c02_ack(); at24c02_start(); at24c02_write_onebyte(slave_add+0x01); at24c02_ack(); num = at24c02_read_onebyte(); return num; at24c02_stop();}/*************************************************************** 10、处理函数 分离出百 十 个 位***************************************************************/void datepros(uchar w){ uchar baiwei,shiwei,gewei; baiwei=w/100; shiwei=w%100/10; gewei=w%10; disp[0]=smgduan[baiwei]; disp[1]=smgduan[shiwei]; disp[2]=smgduan[gewei];}/*************************************************************** 11、显示函数***************************************************************/void display(){ uchar i; for(i=0;i<3;i++) { switch(i) { case(0):lsa=0;lsb=0;lsc=0;break; case(1):lsa=1;lsb=0;lsc=0;break; case(2):lsa=0;lsb=1;lsc=0;break; } P0=disp[i]; delay_1(10); P0=0x00;//消隐 }}
阅读全文
0 0
- EEPROM_IIC
- 蓝桥杯--基础训练--时间转换,字符串对比、矩阵乘法-J(Java)
- 17江苏省物理及创新实验作品大赛回顾
- 【Scikit-Learn 中文文档】使用 scikit-learn 介绍机器学习 | ApacheCN
- java的关键字和保留字
- Foul Play UVA
- EEPROM_IIC
- mysql数据库的使用及查询语句
- 自话遗传算法(带实例)
- BZOJ1503: [NOI2004]郁闷的出纳员(洛谷P1486)
- 在Visual Sutdio 2017中使用boost库
- 【学习C++】C++项目的头文件和实现文件分别写什么
- nyoj 99 单词拼接(欧拉图)
- Recycler点击事件_接口回调
- python3学习-logging模块