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

標題: 51單片機計算器程序+仿真文件+電路圖下載 采用1602液晶顯示 [打印本頁]

作者: jiujiu    時間: 2014-12-18 00:33
標題: 51單片機計算器程序+仿真文件+電路圖下載 采用1602液晶顯示
感謝51hei論壇提供這么好的交流平臺,這是一個用51單片機做的計算機程序 帶仿真文件,大家可以下載本帖的附件。












初級計算器仿真文件.rar

19.49 KB, 下載次數: 233, 下載積分: 黑幣 -5

初級計算器程序.zip

48.46 KB, 下載次數: 321, 下載積分: 黑幣 -5

Last Loaded 初級計算器 電路圖.rar

19.5 KB, 下載次數: 169, 下載積分: 黑幣 -5


作者: jiujiu    時間: 2014-12-18 00:34
本帖最后由 jiujiu 于 2014-12-18 00:35 編輯

main.c文件:
  1. #include "keyscan.h"
  2. #include "LCD1602.h"
  3. #include<stdio.h>

  4. uchar dis_table0[16]="                ";  //第一行        a+b=
  5. uchar dis_table1[16]="                ";  //第二行         c
  6. uchar temp[8]="        ";//數據b輸入存儲
  7. uchar code Hello_0[]="   Yin Shilong  ";
  8. uchar code Hello_1[]="   2012-12-31   ";
  9. int a,b,c;//EG:a+b=c
  10. uchar num;   //按鍵值
  11. uchar dis,dis_temp;   //顯示索引
  12. uchar sign;  //符號記錄
  13. uchar first;
  14. uchar qing;

  15. int Dis_ab(int a,int b,uchar sign)
  16. {
  17.      int c;
  18.      if(sign=='+') c=a+b;
  19.      if(sign=='-') c=a-b;
  20.      if(sign=='x') c=a*b;
  21.      if(sign=='/') c=a/b;
  22.      return c;
  23. }

  24. void main()
  25. {
  26.         LCD_init();
  27.         showstring(0,0,Hello_0);
  28.         showstring(0,1,Hello_1);
  29.         delayms(500);
  30.           while(1)
  31.           {
  32.                     num=KeyPro();//鍵盤掃描
  33.           if(num!=0xff) //按鍵按下
  34.               {          
  35.                
  36.               if(('+'==num) || ('-'==num) || ('x'==num)|| ('/'==num) || ('='==num))//輸入數字最大值8,輸入符號表示輸入結束
  37.                       {    //符號鍵
  38.                    if(first==0)
  39.                    {  if((num=='+')||(num=='-')||(num=='x')||(num=='/')) first=1;//第一個數輸入結束
  40.                       if(num=='+')
  41.                        {   sign='+';  //記錄
  42.                            dis_table0[dis]='+'; //先顯示出來
  43.                            sscanf(dis_table0,"%d[^+]",&a); //把第一個數取出賦值給a,詳情參考本函數用法
  44.                         
  45.                        }
  46.                        if(num=='-')
  47.                        {   sign='-';
  48.                            dis_table0[dis]='-'; //顯示
  49.                            sscanf(dis_table0,"%d[^-]",&a);
  50.                        }
  51.                        if(num=='x')
  52.                        {   sign='x';
  53.                            dis_table0[dis]='x'; //顯示
  54.                            sscanf(dis_table0,"%d[^x]",&a);
  55.                        }
  56.                        if(num=='/')
  57.                        {   sign='/';
  58.                            dis_table0[dis]='/'; //顯示
  59.                            sscanf(dis_table0,"%d[^/]",&a);
  60.                        }
  61.                        dis++;dis%=16;
  62.          
  63.                    }

  64.                    if(first==1)
  65.                    {
  66.                         if(num=='=')
  67.                         {
  68.                             dis_table0[dis]='='; //顯示
  69.                             dis++;dis%=16;
  70.                             sscanf(temp,"%d",&b); //取b
  71.                             c=Dis_ab(a,b,sign);
  72.                             sprintf(dis_table1,"%d",c);
  73.                         }
  74.                    }
  75.                   
  76.                       }
  77.                       else
  78.                       {    //數字鍵
  79.                       
  80.                   if(num==10)   //清除鍵
  81.                   {
  82.                       first=0;sign=0; //清標志
  83.                       dis=0;dis_temp=0;
  84.                       a=b=c=0;
  85.                       for(qing=0;qing<16;qing++)
  86.                       {
  87.                          dis_table0[qing]=' ';    //清顯示
  88.                          dis_table1[qing]=' ';
  89.                       }
  90.                   
  91.                   }
  92.                   else
  93.                   {
  94.                        dis_table0[dis]=num+'0';  //供顯示用
  95.                        dis++;dis%=16;         
  96.                        if(first==1)
  97.                        {
  98.                            temp[dis_temp]=num+'0';  //存下b的值
  99.                            dis_temp++;dis_temp%=8;
  100.                        }
  101.                   }


  102.                                              
  103.                       }
  104.               
  105.                 
  106.               
  107.           }

  108.           showstring(0,0,dis_table0);
  109.           showstring(0,1,dis_table1);


  110.           }


  111. }






















復制代碼




作者: jiujiu    時間: 2014-12-18 00:36
keyscan.c文件:
  1.    /*-----------------------------------------------
  2.   名稱:矩陣鍵盤
  3.   編寫:殷士龍
  4.   日期:2012.12.31
  5. ------------------------------------------------*/
  6. //#include <reg52.h> //包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義
  7. #include "keyscan.h"
  8. #include "LCD1602.h"

  9. //#define KeyPort P1

  10. /*------------------------------------------------
  11. 按鍵掃描函數,返回掃描鍵值
  12. ------------------------------------------------*/
  13. unsigned char KeyScan(void)  //鍵盤掃描函數,使用行列反轉掃描法
  14. {
  15. unsigned char cord_h,cord_l;//行列值中間變量
  16. KeyPort=0x0f;            //行線輸出全為1
  17. cord_h=KeyPort&0x0f;     //讀入行線值
  18. if(cord_h!=0x0f)    //先檢測有無按鍵按下
  19. {
  20.    delayms(10);        //去抖
  21.    if((KeyPort&0x0f)!=0x0f)
  22.    {
  23.     cord_h=KeyPort&0x0f;  //讀入行線值
  24.     KeyPort=cord_h|0xf0;  //輸出當前列線值
  25.     cord_l=KeyPort&0xf0;  //讀入列線值

  26.     while((KeyPort&0xf0)!=0xf0);//等待松開并輸出

  27.     return(cord_h+cord_l);//鍵盤最后組合碼值
  28.    }
  29.   }
  30.   return(0xff);     //返回該值
  31. }
  32. /*------------------------------------------------
  33.           按鍵值處理函數,返回掃鍵值
  34.            可以根據需要改變返回值

  35.                           | 7 | 8 | 9 | / |  
  36.                           | 4 | 5 | 6 | X |  
  37.                           | 1 | 2 | 3 | - |  
  38.                           | C | 0 | = | + |
  39. ------------------------------------------------*/
  40. unsigned char KeyPro(void)
  41. {
  42. switch(KeyScan())
  43. {
  44.   case 0xee:return 7  ;break;//0 按下相應的鍵顯示相對應的碼值
  45.   case 0xde:return 8  ;break;//1
  46.   case 0xbe:return 9  ;break;//2
  47.   case 0x7e:return '/';break;//3

  48.   case 0xed:return 4  ;break;//4
  49.   case 0xdd:return 5  ;break;//5
  50.   case 0xbd:return 6  ;break;//6
  51.   case 0x7d:return 'x';break;//7

  52.   case 0xeb:return 1  ;break;//8
  53.   case 0xdb:return 2  ;break;//9
  54.   case 0xbb:return 3  ;break;//a
  55.   case 0x7b:return '-';break;//b

  56.   case 0xe7:return 10 ;break;//c         清除鍵
  57.   case 0xd7:return 0  ;break;//d
  58.   case 0xb7:return '=';break;//e
  59.   case 0x77:return '+';break;//f
  60.   default:return 0xff;break;
  61. }
  62. }
復制代碼

作者: 星星一眨眼    時間: 2014-12-19 10:10
我也要制作一個
作者: lomo    時間: 2015-1-6 16:25
多謝啦
作者: 綠茶比較好喝    時間: 2015-6-27 14:18
為什么我下載到 單片機上 結果后面會顯示一個奇怪的符號
作者: minilong95    時間: 2016-12-6 21:03
我想學習學習
作者: 冷瞬秋楓    時間: 2016-12-7 12:43
感謝分享啊
作者: tony3508741    時間: 2016-12-30 15:36
hao aaaaaaaaaaaaaaaaaaaaaaaaaa
作者: q908731886    時間: 2017-1-12 14:39
哎喲,感覺不錯,學習學習,
作者: liu791055589    時間: 2017-1-27 03:05
這個可以實現小數嗎?
作者: 淺暗    時間: 2017-3-31 21:01

感謝分享
作者: 寂寞小奧特曼    時間: 2017-6-27 13:24
謝謝樓主的分享
作者: 寂寞小奧特曼    時間: 2017-6-27 13:37
謝謝分享
作者: gst    時間: 2017-12-18 18:11
。。。。。大佬們  厲害了
作者: 13067071271    時間: 2018-6-28 19:01
謝謝你,正準備做這個
作者: 臺風天然粉    時間: 2018-10-24 23:12
大佬,好像要剩下的代碼
作者: 12163/    時間: 2018-12-7 15:20
可以實現連續運算嘛

作者: sdsadssefd    時間: 2018-12-7 18:00
大佬們,為什么我改了串口還是沒用呀。。。
作者: obtain婉    時間: 2019-2-20 22:23
為什么我按符號鍵沒有反應,哭遼
作者: 煤山老歪脖子樹    時間: 2019-3-24 17:58
樓主,你這個D0到D7怎么仿真時出現了問題啊,你做的時候仿真成功了嗎?

作者: hhhho    時間: 2019-4-2 10:17
對我有用謝謝啦




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 毛片视频免费观看 | 国产精品1区2区 | 国产一区二区三区四区五区加勒比 | 一区二区三区视频 | 99日韩| 日韩欧美国产一区二区三区 | 中文字幕一区二区三区四区 | 国产精品99久久久久久久久久久久 | 中文字幕免费 | 国产精品久久久久久久久免费桃花 | 国产一区二区三区视频 | 亚洲视频精品 | 国产精品99久久久久久大便 | 久久成人久久 | 欧美一区二区免费电影 | 国精产品一品二品国精在线观看 | www.色综合 | 亚洲成人国产综合 | 国产成人精品午夜视频免费 | 国产一区二 | 日本在线视 | 亚洲欧美国产毛片在线 | 丁香综合 | 欧美精品一区二区三区在线播放 | 羞羞视频免费在线观看 | 精精国产xxxx视频在线播放 | 91超碰在线观看 | 欧美xxxx色视频在线观看免费 | 久久国产精品一区二区三区 | 色精品| 亚洲在线一区 | 91精品国产乱码久久久 | 久久久久久高潮国产精品视 | 国产中文字幕在线观看 | 日韩精品一区二区三区中文在线 | 国产精品一区二区电影 | 精品伦精品一区二区三区视频 | 奇米在线 | 色婷婷av久久久久久久 | 国产精品国产a级 | 91精品久久久久久久久久入口 |