久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: 基于AT89C51單片機的一位計算器仿真設計 [打印本頁]

作者: 貓膩Doi    時間: 2017-12-30 19:57
標題: 基于AT89C51單片機的一位計算器仿真設計
單片機一位計算器仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下:
  1. #include <reg51.h>
  2. sbit LCD_RS = P2^0;
  3. sbit LCD_EN = P2^1;
  4. unsigned char KeyValue = 255;
  5. unsigned char DisCache[6]={0};
  6. unsigned char StartFlag = 0;
  7. void DelayTime10us(unsigned int DelayValue)
  8. {
  9. unsigned int a = 0,b = 0;
  10. for(a =0 ;a < DelayValue; a++)
  11.      for(b =0 ;b < 18; b++);
  12. }
  13. void DelayTime10ms(unsigned int DelayValue)
  14. {
  15. unsigned int a = 0,b = 0;
  16. for(a =0 ;a < DelayValue; a++)
  17.      for(b =0 ;b < 1828; b++);
  18. }
  19. void SendDataToLCD(unsigned char LCDData)
  20. {
  21.     LCD_RS = 1;
  22.     P0 = LCDData;
  23.     LCD_EN = 1;
  24.     DelayTime10us(10);  
  25.     LCD_EN = 0;
  26.     DelayTime10us(10);
  27. }
  28. void SendPositionToLCD(unsigned char LCDPosition)
  29. {
  30.     LCD_RS = 0;
  31.     P0 = LCDPosition;
  32.     LCD_EN = 1;
  33.     DelayTime10us(10);  
  34.     LCD_EN = 0;
  35.     DelayTime10us(10);
  36. }
  37. void DisStr(unsigned char *point)
  38. {
  39.         char i = 0;
  40.         for(;;)
  41.         {
  42.                 SendDataToLCD( *point);
  43.                 point++;
  44.                 if(*point =='\0')
  45.                 break;
  46.         }
  47. }
  48. void DisStr1()
  49. {
  50.   char i = 0;
  51.         for(i=0;i<6;i++)
  52.         {
  53.                 SendDataToLCD(DisCache[i]);
  54.         }
  55. }
  56. void KeyScan()
  57. {
  58.         int  KeyTemp  = 0;
  59.         P3 = 0xfe;
  60.         KeyTemp = P3&0xf0;
  61.         if(KeyTemp!=0xf0)
  62.                 {
  63.                         DelayTime10ms(1);
  64.                         P3 = 0xf0;
  65.       KeyTemp = P3&0xf0;
  66.       if(KeyTemp!=0xf0)
  67.                                 {
  68.                                         switch(KeyTemp)
  69.                                         {
  70.                                                 case 0xe0:KeyValue =7;break;
  71.                                                 case 0xd0:KeyValue =8;break;
  72.                                                 case 0xb0:KeyValue =9;break;
  73.                                                 case 0x70:KeyValue =10;break;
  74.                                         }
  75.                                 }
  76.                 }
  77. P3 = 0xfd;
  78. KeyTemp = P3&0xf0;
  79. if(KeyTemp!=0xf0)
  80.         {
  81.                 DelayTime10ms(1);
  82.                 P3 = 0xf0;
  83.     KeyTemp = P3&0xf0;
  84.     if(KeyTemp!=0xf0)
  85.                 {
  86.                                 switch(KeyTemp)
  87.                                 {
  88.                                         case 0xe0:KeyValue =4;break;
  89.                                         case 0xd0:KeyValue =5;break;
  90.                                         case 0xb0:KeyValue =6;break;
  91.                                         case 0x70:KeyValue =11;break;
  92.                                 }
  93.      }
  94.         }
  95. P3 = 0xfb;
  96. KeyTemp = P3&0xf0;
  97. if(KeyTemp!=0xf0)
  98.         {
  99.                 DelayTime10ms(1);
  100.                 P3 = 0xf0;
  101.     KeyTemp = P3&0xf0;
  102.     if(KeyTemp!=0xf0)
  103.                 {
  104.                         switch(KeyTemp)
  105.                         {
  106.                                 case 0xe0:KeyValue =1;break;
  107.                                 case 0xd0:KeyValue =2;break;
  108.                                 case 0xb0:KeyValue =3;break;
  109.                                 case 0x70:KeyValue =12;break;
  110.                         }
  111.     }
  112.         }
  113. P3 = 0xf7;
  114. KeyTemp = P3&0xf0;
  115. if(KeyTemp!=0xf0)
  116.         {
  117. DelayTime10ms(1);
  118. P3 = 0xf0;
  119.      KeyTemp = P3&0xf0;
  120.      if(KeyTemp!=0xf0)
  121.                         {
  122.                                         switch(KeyTemp)
  123.                                  {
  124.                                                 case 0xe0:KeyValue =15;break;
  125.                                                 case 0xd0:KeyValue =0;break;
  126.                                                 case 0xb0:KeyValue =14;break;
  127.                                                 case 0x70:KeyValue =13;break;
  128.                                         }
  129.                         }
  130.         }       
  131. }
  132. void main()
  133. {
  134.     // 01 06 0c 38
  135.     SendPositionToLCD(0x01);
  136.     SendPositionToLCD(0x06);
  137.     SendPositionToLCD(0x0c);
  138.     SendPositionToLCD(0x38);
  139.                 SendPositionToLCD(0x80);
  140.     DisStr("calculator!");
  141.     for(;;)
  142.                 {
  143.                         KeyScan();
  144.                         SendPositionToLCD(0xc0);
  145.                 //DisStr(DisCache);
  146.                         DisStr1();
  147. if((KeyValue>=0)&&(KeyValue<=9)&&(StartFlag==0))
  148.         {
  149.                 DisCache[0]=KeyValue+48;
  150.                 StartFlag=1;
  151.         }       
  152. if(KeyValue==15)
  153.         {
  154.                 StartFlag = 0;
  155.                 DisCache[0]=48;
  156.                 DisCache[1]=0;
  157.                 DisCache[2]=0;
  158.                 DisCache[3]=0;
  159.                 DisCache[4]=0;
  160.                 DisCache[5]=0;
  161.                 DisCache[6]=0;
  162.         }
  163. if((KeyValue>=10)&&(KeyValue<=13)&&(StartFlag==1))
  164.         {
  165.                 StartFlag=2;
  166.                 switch(KeyValue)
  167.                 {
  168.                 case 10:DisCache[1]= 47;break;
  169.                 case 11:DisCache[1]= 42;break;
  170.                 case 12:DisCache[1]= 45;break;
  171.                 case 13:DisCache[1]= 43;break;
  172.                 }
  173.         }
  174. if((KeyValue>=0)&&(KeyValue<=9)&&(StartFlag==2))
  175.         {
  176. ……………………

  177. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
計算機2017-12-4.zip (147.09 KB, 下載次數: 123)



作者: tt609852916    時間: 2018-6-12 16:35
沒有黑幣
作者: lexy    時間: 2018-6-18 18:55
學習一下
作者: 553687    時間: 2020-3-2 16:38
怎么是80C51,標題上是AT89C51
作者: 笑舞醉夢間    時間: 2020-3-2 18:59
能問下樓主,能通過這個做出簡易計算器么!
作者: solitude110    時間: 2020-3-2 19:42
學習一下看看怎么樣




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 日本一区二区三区四区 | 天堂中文在线播放 | 欧美日韩在线视频观看 | av日韩高清 | 欧美日韩不卡 | 91影院在线观看 | 久久高清免费视频 | 亚洲网一区 | 国产美女自拍视频 | 成人在线视频免费看 | 午夜免费网站 | 一区二区三区四区视频 | 在线观看av免费 | 性xxxxx| 国产91一区二区三区 | 亚洲视频在线看 | h视频在线免费观看 | 交专区videossex农村 | 久草青青草| 婷婷激情在线 | 精品乱码一区二区三四区视频 | 在线观看视频一区 | 免费麻豆视频 | 免费污视频 | 一区二区三区视频在线免费观看 | 美女一区二区在线观看 | 久久久av中文字幕 | 国产乱精品一区二区三区 | 精品在线一区二区三区 | 欧美激情久久久 | 亚洲精品在线视频 | 国产精品成人一区 | 午夜精品一区二区三区在线视频 | 男女深夜网站 | 国产精品日韩一区二区 | 国产精品1区 | 国产一区二区精品自拍 | 精品欧美一区二区三区免费观看 | 成人精品免费视频 | 亚洲一区二区在线 | 精品在线一区 |