找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2768|回复: 0
打印 上一主题 下一主题
收起左侧

E2PROM 24c02测试程序源代码

[复制链接]
跳转到指定楼层
楼主
ID:85764 发表于 2015-7-15 23:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

数码管显示部分的原理图:http://www.51hei.com/f/51hei-5.pdf

源代码如下:

  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. bit write=0;
  5. sbit sda=P2^0;
  6. sbit scl=P2^1;
  7. sbit  wela=P2^7;
  8. sbit  dula=P2^6;
  9. uchar sec,tcnt;
  10. uchar smg_change[6]={10,10,10,10,10,10};
  11. unsigned char code duanma[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
  12. unsigned char code weima[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
  13. void delay()
  14. {;;}
  15. void delay1ms(uchar t)
  16. {
  17. uchar i,j;
  18. for(i=t;i>0;i--)
  19.    for(j=110;j>0;j--);
  20. }
  21. void init()
  22. {
  23. sda=1;
  24. delay();
  25. scl=1;
  26. delay();
  27. }
  28. void start()
  29. {
  30. sda=1;
  31. delay();
  32. scl=1;
  33. delay();
  34. sda=0;
  35. delay();
  36. scl=0;
  37. }
  38. void stop()
  39. {
  40. sda=0;
  41. delay();
  42. scl=1;
  43. delay();
  44. sda=1;
  45. delay();
  46. scl=0;
  47. }
  48. void respons()
  49. {
  50. uchar i;
  51. sda=1;
  52. scl=1;
  53. delay();
  54. while((sda==1)&&(i<250))
  55. i++;
  56. scl=0;
  57. delay();
  58. }
  59. void no_ack()
  60. {
  61. sda=1;
  62. scl=1;
  63. scl=0;
  64. }
  65. void write_byte(uchar date)
  66. {
  67. uchar i;
  68. for(i=0;i<8;i++)
  69. {
  70.   date=date<<1;
  71.   scl=0;
  72.   delay();
  73.   sda=CY;
  74.   delay();
  75.   scl=1;
  76.   delay();
  77. }
  78.      scl=0;
  79. }
  80. uchar read_byte()
  81. {
  82. uchar i,k;
  83.   for(i=0;i<8;i++)
  84.   {
  85.    k<<=1;
  86.    scl=1;
  87.    delay();
  88.    sda=1;
  89.    if(sda)
  90.    k|=0x01;
  91.    scl=0;
  92.    delay();
  93.   }
  94.   return k;
  95. }
  96. void write_add(uchar address,uchar date)
  97. {
  98.   start();
  99.   write_byte(0xa0);
  100.   respons();
  101.   write_byte(address);
  102.   respons();
  103.   write_byte(date);
  104.   respons();
  105.   stop();
  106. }
  107. uchar read_add(uchar address)
  108. {   
  109.   uchar date;
  110.   start();
  111.   write_byte(0xa0);
  112.   respons();
  113.   write_byte(address);
  114.   respons();
  115.   start();
  116.   write_byte(0xa1);
  117.   respons();
  118.   date=read_byte();
  119.   no_ack();
  120.   stop();
  121.   return date;
  122. }
  123. void display(uchar bai,uchar shi)
  124. {
  125. dula=0;
  126. P0=duanma[bai];
  127. dula=1;
  128. dula=0;
  129. wela=0;
  130. P0=weima[0];
  131. wela=1;
  132. wela=0;
  133. delay1ms(5);
  134. dula=0;
  135. P0=duanma[shi];
  136. dula=1;
  137. dula=0;
  138. wela=0;
  139. P0=weima[1];
  140. wela=1;
  141. wela=0;
  142. delay1ms(5);

  143. }
  144. void init_time()
  145. {
  146. TMOD=0x01;
  147. TH0=(65536-50000)/256;
  148. TL0=(65536-50000)%256;
  149. ET0=1;
  150. TR0=1;
  151. EA=1;
  152. }
  153. void main()
  154. {
  155. init();
  156. init_time();
  157. sec=read_add(0);
  158. if(sec>60)
  159. sec=sec-250;
  160. while(1)
  161. {
  162.         display(sec/10,sec%10);
  163. ET0=0;
  164. write_add(0,sec);
  165. ET0=1;
  166. }
  167. }
  168. void timer0() interrupt 1
  169. {
  170. TH0=(65536-50000)/256;
  171. TL0=(65536-50000)%256;
  172. tcnt++;
  173. if(tcnt==20)
  174. {
  175.   tcnt=0;
  176.   sec++;
  177.   write=1;
  178.   if(sec==60)
  179.   sec=0;
  180. }
  181. }
复制代码



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表