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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6320|回復: 5
打印 上一主題 下一主題
收起左側

基于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)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:350401 發表于 2018-6-12 16:35 | 只看該作者
沒有黑幣
回復

使用道具 舉報

板凳
ID:353807 發表于 2018-6-18 18:55 | 只看該作者
學習一下
回復

使用道具 舉報

地板
ID:701236 發表于 2020-3-2 16:38 | 只看該作者
怎么是80C51,標題上是AT89C51
回復

使用道具 舉報

5#
ID:701325 發表于 2020-3-2 18:59 來自手機 | 只看該作者
能問下樓主,能通過這個做出簡易計算器么!
回復

使用道具 舉報

6#
ID:701341 發表于 2020-3-2 19:42 | 只看該作者
學習一下看看怎么樣
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日本一区二区三区精品视频 | 在线看成人av | 欧美日韩亚洲国产 | 五月婷婷丁香婷婷 | 亚洲成人精品久久久 | 国产精品久久久久久久久久久久久 | 久久久久久久久淑女av国产精品 | 国产精品久久久久久久久久三级 | 亚洲国产精品久久久 | 99热在这里只有精品 | 综合视频在线 | 午夜欧美一区二区三区在线播放 | 欧美在线观看一区 | 国产精品一卡二卡三卡 | 日韩在线免费看 | 91视频大全 | 国产黄色小视频在线观看 | 羞羞视频在线观看网站 | 欧美性影院 | 成人美女免费网站视频 | 国产香蕉视频 | 欧美日韩国产高清 | 国产精品日韩一区二区 | 成人小视频在线免费观看 | 日本不卡免费新一二三区 | 91高清视频在线观看 | 日韩一二三区 | 精品欧美一区二区精品久久久 | 一区二区三区四区av | 特一级毛片 | 日韩亚洲一区二区 | 精品视频在线一区 | 伊人爽 | 免费播放一级片 | 午夜精品久久久 | 男人天堂99 | 久久精品国产免费看久久精品 | 欧美精品一区二区在线观看 | 羞羞的视频在线 | av在线免费观看网址 | 国产精品一区二区在线 |