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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 13253|回復: 22
收起左側

51單片機計算器程序+仿真文件+電路圖下載 采用1602液晶顯示

  [復制鏈接]
ID:70650 發表于 2014-12-18 00:33 | 顯示全部樓層 |閱讀模式
感謝51hei論壇提供這么好的交流平臺,這是一個用51單片機做的計算機程序 帶仿真文件,大家可以下載本帖的附件。
181042qpvm5zmf3xd5pxx0.jpg.thumb.jpg

181043eypnnufbkue7kic3.jpg.thumb.jpg


181044jg6w6lnnkkvhye8y.jpg.thumb.jpg






初級計算器仿真文件.rar

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

初級計算器程序.zip

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

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

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

評分

參與人數 2黑幣 +9 收起 理由
小甜甜-L + 4 很給力!
jhhw + 5

查看全部評分

回復

使用道具 舉報

ID:70650 發表于 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. }






















復制代碼



回復

使用道具 舉報

ID:70650 發表于 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. }
復制代碼
回復

使用道具 舉報

ID:70614 發表于 2014-12-19 10:10 | 顯示全部樓層
我也要制作一個
回復

使用道具 舉報

ID:71725 發表于 2015-1-6 16:25 | 顯示全部樓層
多謝啦
回復

使用道具 舉報

ID:83915 發表于 2015-6-27 14:18 | 顯示全部樓層
為什么我下載到 單片機上 結果后面會顯示一個奇怪的符號
回復

使用道具 舉報

ID:150573 發表于 2016-12-6 21:03 | 顯示全部樓層
我想學習學習
回復

使用道具 舉報

ID:152867 發表于 2016-12-7 12:43 | 顯示全部樓層
感謝分享啊
回復

使用道具 舉報

ID:158779 發表于 2016-12-30 15:36 | 顯示全部樓層
hao aaaaaaaaaaaaaaaaaaaaaaaaaa
回復

使用道具 舉報

ID:161466 發表于 2017-1-12 14:39 | 顯示全部樓層
哎喲,感覺不錯,學習學習,
回復

使用道具 舉報

ID:162997 發表于 2017-1-27 03:05 | 顯示全部樓層
這個可以實現小數嗎?
回復

使用道具 舉報

ID:122366 發表于 2017-3-31 21:01 | 顯示全部樓層

感謝分享
回復

使用道具 舉報

ID:118238 發表于 2017-6-27 13:24 | 顯示全部樓層
謝謝樓主的分享
回復

使用道具 舉報

ID:118238 發表于 2017-6-27 13:37 | 顯示全部樓層
謝謝分享
回復

使用道具 舉報

ID:263260 發表于 2017-12-18 18:11 | 顯示全部樓層
。。。。。大佬們  厲害了
回復

使用道具 舉報

ID:316073 發表于 2018-6-28 19:01 | 顯示全部樓層
謝謝你,正準備做這個
回復

使用道具 舉報

ID:414974 發表于 2018-10-24 23:12 | 顯示全部樓層
大佬,好像要剩下的代碼
回復

使用道具 舉報

ID:440997 發表于 2018-12-7 15:20 | 顯示全部樓層
可以實現連續運算嘛
回復

使用道具 舉報

ID:428761 發表于 2018-12-7 18:00 | 顯示全部樓層
大佬們,為什么我改了串口還是沒用呀。。。
回復

使用道具 舉報

ID:471463 發表于 2019-2-20 22:23 | 顯示全部樓層
為什么我按符號鍵沒有反應,哭遼
回復

使用道具 舉報

ID:492496 發表于 2019-3-24 17:58 | 顯示全部樓層
樓主,你這個D0到D7怎么仿真時出現了問題啊,你做的時候仿真成功了嗎?
回復

使用道具 舉報

ID:503014 發表于 2019-4-2 10:17 | 顯示全部樓層
對我有用謝謝啦
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 草b视频 | 青青草久久 | 午夜欧美a级理论片915影院 | 福利片在线 | 特黄级国产片 | 黄在线免费观看 | 秋霞av国产精品一区 | 亚洲视频在线播放 | 日韩毛片免费视频 | 成人国产免费观看 | 国产成人在线视频免费观看 | 97av| 国产乱人伦精品一区二区 | 精品亚洲一区二区三区四区五区高 | 欧美激情一区二区三区 | 中文字幕精品一区二区三区精品 | 91一区二区在线观看 | 免费国产一区 | 精品一区二区在线看 | 日韩午夜在线观看 | 午夜精品久久久久久久99黑人 | 国产精品99久久久久久www | 亚洲精品久久久久久久久久吃药 | 久久国品片 | 日日操日日舔 | 日本不卡免费新一二三区 | 日批免费看 | 日本一区二区三区免费观看 | 日日拍夜夜| 亚洲视频在线观看 | 色视频免费 | 欧美成人精品一区二区三区 | 国产999精品久久久影片官网 | 天天干成人网 | 国产精品久久久久久久久久免费看 | 天堂av影院 | 国产网站在线免费观看 | 亚洲视频精品 | 亚洲欧洲日韩精品 中文字幕 | 亚洲一区二区三区桃乃木香奈 | 国产成人免费在线观看 |