欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2250|回復(fù): 6
收起左側(cè)

按鍵按下一次1602顯示字符內(nèi)容,斷電后送電顯示器1602繼續(xù)顯示停電前的字符內(nèi)容

[復(fù)制鏈接]
ID:488631 發(fā)表于 2019-12-19 19:48 | 顯示全部樓層 |閱讀模式
按對(duì)應(yīng)按鈕時(shí)1602顯示對(duì)應(yīng)字符內(nèi)容,斷電在送電又恢復(fù)初始狀態(tài),不能實(shí)現(xiàn)利用24c02讀寫(xiě)達(dá)到斷電保護(hù)的目的。請(qǐng)各位大佬指點(diǎn)一下小弟錯(cuò)在何處。

單片機(jī)源程序如下:
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint  unsigned int
  5. uchar code table[]="I LOVE DIANZI";
  6. uchar code table1[]="   ABCD     ";
  7. uchar num,sec;
  8. sbit key1 = P3^0;
  9. sbit key2 = P3^1;
  10. sbit key3 = P3^2;
  11. sbit key4 = P3^3;
  12. /* sbit key5 = P3^4;
  13. sbit key6 = P3^5;
  14. sbit key7 = P3^6;
  15. sbit key8 = P3^7;*/
  16. sbit sda = P2^0;
  17. sbit scl = P2^1;
  18. bit write = 0;
  19. bit k1 = 0;
  20. bit k2 = 0;
  21. sbit lcdrs = P2^6;
  22. sbit lcdwr = P2^5;
  23. sbit lcden = P2^7;
  24. void delay1s(uint z)
  25. {
  26.   uint x,y;
  27.   for(x=z;x>0;x--)
  28.    for(y=110;y>0;y--);
  29. }
  30. void delay()
  31. {;;}
  32. void at_start()
  33. {
  34. sda = 1;
  35. delay();
  36. scl = 1;
  37. delay();
  38. sda = 0;
  39. delay();
  40. }
  41. void at_stop()
  42. {
  43. sda = 0;
  44. delay();
  45. scl = 1;
  46. delay();
  47. sda = 1;
  48. delay();
  49. }
  50. void at_respons()
  51. {
  52. uchar i;
  53. scl = 1;
  54. delay();
  55. while((sda==1)&&(i<255))i++;
  56. scl = 0;
  57. delay();
  58. }
  59. void at_init()
  60. {
  61. sda = 1;
  62. delay();
  63. scl = 1;
  64. delay();
  65. }
  66. void at_write_byte(uchar date)
  67. {
  68. uchar i,temp;
  69. temp =date;
  70. for(i=0;i<8;i++)
  71. {
  72.   temp=temp<<1;
  73.   scl = 1;
  74.   delay();
  75.   sda = CY;
  76.   delay();
  77.   scl = 1;
  78.   delay();
  79. }
  80. scl = 0;
  81. delay();
  82. sda = 1;
  83. delay();
  84. }
  85. uchar at_read_byte()
  86. {
  87. uchar i,k;
  88. scl = 0;
  89. delay();
  90. sda = 1;
  91. delay();
  92. for(i=0;i<8;i++)
  93. {
  94.   scl = 1;
  95.   delay();
  96.   k = (k<<1)|sda;
  97.   scl = 0;
  98.   delay();
  99.   }
  100.   return k;
  101. }
  102. void at_write_add(uchar address,uchar date)
  103. {
  104. at_start();
  105. at_write_byte(0xa0);
  106. at_respons();
  107. at_write_byte(address);
  108. at_respons();
  109. at_write_byte(date);
  110. at_respons();
  111. at_stop();
  112. }
  113. uchar at_read_add(uchar address)
  114. {
  115. uchar date;
  116. at_start();
  117. at_write_byte(0xa0);
  118. at_respons();
  119. at_write_byte(address);
  120. at_respons();
  121. at_start();
  122. at_write_byte(0xa1);
  123. at_respons();
  124. date=at_read_byte();
  125. at_stop();
  126. return date;
  127. }  
  128. bit lcd_busy()
  129. {
  130.   bit result;
  131.   lcdrs = 0;
  132.   lcdwr = 1;
  133.   lcden = 1;
  134.   delay();
  135.   delay();
  136.   delay();
  137.   result=(bit)(P0&0x80);
  138.   lcden = 0;
  139.   return(result);
  140.   }
  141. void lcd_send_com(uchar com)
  142. {
  143.   while(lcd_busy());
  144.   lcdrs = 0;
  145.   lcdwr = 0;
  146.   P0 = com;
  147.   delay1s(5);
  148.   lcden = 1;
  149.   delay1s(5);
  150.   lcden = 0;
  151.   }
  152. void lcd_send_data(uchar date)
  153. {
  154.   while(lcd_busy());
  155.   lcdrs = 1;
  156.   lcdwr = 0;
  157.   P0 = date;
  158.   delay1s(5);
  159.   lcden=1;
  160.   delay1s(5);
  161.   lcden=0;

  162.   }
  163. void lcd_init()
  164. {
  165. lcden = 0;
  166. lcdrs = 0;
  167. lcdwr = 0;
  168. lcd_send_com(0x38);
  169. lcd_send_com(0x0c);
  170. lcd_send_com(0x06);
  171. lcd_send_com(0x01);
  172. }
  173. uchar keyscan()
  174. {
  175.    
  176.   if(key1==0)
  177.   {
  178.    delay1s(5);
  179.    if(key1==0)
  180.    {
  181.    k1 = 1;
  182.    lcd_send_com(0x80);
  183.     for(num = 0;num<13;num++)
  184.      {
  185.       lcd_send_data(table[num]);
  186.      delay1s(5);
  187.   }   
  188. }  
  189. while(!key1);

  190.    
  191.   }

  192.    else if(key2==0)
  193.     {
  194.      delay1s(5);
  195.      if(key2==0)
  196.     {
  197.     k1 = 2;
  198.      lcd_send_com(0x80);
  199.        for(num = 0;num<13;num++)
  200.        {
  201.           lcd_send_data(table[num]);
  202.         delay1s(5);
  203.      }   
  204.   }
  205. while(!key2);
  206. }
  207.     return k1;
  208. }
  209. void displaychar()
  210. { uchar p1;

  211. p1=at_read_add(8);
  212. delay1s(20);
  213. if(p1==1)
  214. {
  215.   lcd_send_com(0x80);
  216.     for(num = 0;num<13;num++)
  217.      {
  218.       lcd_send_data(table[num]);
  219.      delay1s(5);
  220.   }
  221. }
  222. else if(p1==2)
  223. {
  224.   lcd_send_com(0x80);
  225.     for(num = 0;num<13;num++)
  226.      {
  227.       lcd_send_data(table1[num]);
  228.      delay1s(5);
  229.   }
  230. }

  231. }
  232. void main()
  233. {
  234.    at_init();
  235.    lcd_init();
  236.    displaychar();

  237. while(1)
  238. {
  239. keyscan();
  240.     at_write_add(8,k2);

  241. }
  242. }
復(fù)制代碼


回復(fù)

使用道具 舉報(bào)

ID:584814 發(fā)表于 2019-12-20 08:24 | 顯示全部樓層
全程無(wú)備注看得太眼花,提供點(diǎn)思路:
沒(méi)存進(jìn)的可能,沒(méi)讀出的可能,被初始化的可能。
回復(fù)

使用道具 舉報(bào)

ID:661787 發(fā)表于 2019-12-21 10:03 | 顯示全部樓層
建議寫(xiě)程序時(shí)給程序添加解釋說(shuō)明
回復(fù)

使用道具 舉報(bào)

ID:664105 發(fā)表于 2019-12-21 14:54 | 顯示全部樓層
有條理的寫(xiě)程序,每一段要明白自己要干什么
回復(fù)

使用道具 舉報(bào)

ID:488631 發(fā)表于 2019-12-25 14:48 | 顯示全部樓層
好的,謝謝各位大佬指教,我從新添加注釋又發(fā)了,謝謝!
回復(fù)

使用道具 舉報(bào)

ID:437615 發(fā)表于 2019-12-25 17:09 | 顯示全部樓層
你的板子有沒(méi)有問(wèn)題,有沒(méi)有延時(shí)斷電功能
回復(fù)

使用道具 舉報(bào)

ID:475247 發(fā)表于 2019-12-25 20:54 | 顯示全部樓層
思路是這樣的,你按鍵按下后讓24c02記下按鍵值,開(kāi)機(jī)后用24c02讀出的值來(lái)執(zhí)行顯示任務(wù),這樣能起到開(kāi)機(jī)恢復(fù)斷電前畫(huà)面。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表