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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

發個單片機+LGM12641BS1R仿真計算器程序

[復制鏈接]
跳轉到指定樓層
樓主
好長時間沒有來了,發個仿真計算器。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下:
  1. #include "math.h"    //c51庫函數
  2. #include "lcd.h"
  3. #include "zifu.h"     //字符串
  4. #include "jianpan.h"

  5. void xianshixy_chuli(uchar i)//顯示處理
  6. {
  7.    switch(i)
  8.         {
  9.           case 0:
  10.           case 1:
  11.           case 2:
  12.           case 3:
  13.           case 4:
  14.           case 5:
  15.           case 6:
  16.           case 7:
  17.           case 8:
  18.           case 9:  
  19.           case 10:
  20.           case 11:
  21.           case 12:
  22.           case 13:
  23.           case 14:
  24.           case 15:y=i;x=0;break;//第1行        一行128列/8=8個8*16的字符

  25.           case 16:
  26.           case 17:
  27.           case 18:
  28.           case 19:
  29.           case 20:
  30.           case 21:
  31.           case 22:
  32.           case 23:
  33.       case 24:
  34.           case 25:
  35.           case 26:
  36.           case 27:
  37.           case 28:
  38.           case 29:
  39.           case 30:
  40.       case 31:y=i-16;x=2;break;//第2行

  41.           case 32:
  42.           case 33:
  43.           case 34:
  44.           case 35:
  45.           case 36:
  46.           case 37:
  47.           case 38:
  48.           case 39:
  49.       case 40:
  50.           case 41:
  51.           case 42:
  52.           case 43:
  53.           case 44:
  54.           case 45:
  55.           case 46:  
  56.           case 47: y=i-32;x=4;break;//第3行
  57.           
  58.           case 48:
  59.           case 49:
  60.           case 50:
  61.           case 51:
  62.           case 52:
  63.           case 53:
  64.           case 54:
  65.           case 55:
  66.           case 56:
  67.           case 57:
  68.           case 58:
  69.           case 59:
  70.           case 60:
  71.           case 61:
  72.           case 62:
  73.           case 63:y=i-48;x=6;break;//第4行
  74.       default:  break;
  75.         }
  76.         xianshi_i++;//一屏最多顯示64個8*16的字符
  77. }

  78. void key_chuli()//鍵盤處理
  79. { static uchar   key_i=0;
  80.   static uchar   xdata key_buf[64];
  81.   static float   data_buf[10];
  82.   
  83.   static uchar  fuhao_i=0,dian_i=0;

  84.   uchar i;
  85.   ulong k;
  86.   long         int32_k;
  87.   float  dian_k;
  88.   
  89.   if(key!=0xff)
  90.   {
  91.           if(key!=15)//////*************
  92.     {
  93.               key_buf[key_i]=key;
  94.                   key_i++;
  95.         }
  96.     xianshixy_chuli(xianshi_i);
  97.     switch(key)
  98.         {
  99.           case 0: LCD_bmp(x,y*8,2,8,dian);dian_bzw=1;break;//小數點//行 列 高度  寬度 :高是8的倍數
  100.           case 1:
  101.           case 2:   
  102.           case 3:
  103.           case 4:
  104.           case 5:
  105.           case 6:
  106.           case 7:
  107.           case 8:
  108.           case 9: LCD_bmp(x,y*8,2,8,data_tab[key]);      //顯示鍵盤數字
  109.                             
  110.                           if(dian_bzw==0) data_buf[fuhao_i]=data_buf[fuhao_i]*10+key; //整數
  111.                               
  112.                           else                                                                                                                 //小數
  113.                           {
  114.                                    dian_i++;
  115.                                    dian_k=key;
  116.                                   
  117.                                    for(i=0;i<dian_i;i++)dian_k=dian_k/10;
  118.                                      
  119.                                    data_buf[fuhao_i]=data_buf[fuhao_i]+dian_k;
  120.               }
  121.                             break;

  122.           case 10:LCD_bmp(x,y*8,2,8,jia);                                        //+
  123.                   ys_fuhao=key;
  124.                             fuhao_i++;  // 當按下運算符時為下個被加數組做準備        data_buf[0]+data_buf[i];
  125.                           dian_bzw=0;
  126.                           dian_i=0;
  127.                   break;
  128.           case 11:LCD_bmp(x,y*8,2,8,jian);                                        //-
  129.                             ys_fuhao=key;
  130.                             fuhao_i++;
  131.                           dian_bzw=0;
  132.                           dian_i=0;
  133.                   break;
  134.           case 12:LCD_bmp(x,y*8,2,8,cheng);                                        //*
  135.                             ys_fuhao=key;
  136.                             fuhao_i++;
  137.                           dian_bzw=0;
  138.                           dian_i=0;
  139.                   break;
  140.           case 13:LCD_bmp(x,y*8,2,8,chu);                                        // /
  141.                             ys_fuhao=key;
  142.                             fuhao_i++;
  143.                           dian_bzw=0;
  144.                           dian_i=0;
  145.                   break;
  146.           case 14:dian_bzw=0;
  147.                             dian_i=0;
  148.                             LCD_bmp(x,y*8,2,8,denghao);                                //=
  149.                         
  150.                                  
  151.                                 if(ys_fuhao==11)data_buf[0]=data_buf[0]-data_buf[1]; //兩數相 減
  152.                                   
  153.                                 if(ys_fuhao==10)data_buf[0]=data_buf[0]+data_buf[1]; //兩數相 加
  154.                        
  155.                             if(ys_fuhao==12)data_buf[0]=data_buf[0]*data_buf[1];   //兩數相 乘
  156.                                
  157.                                 if(ys_fuhao==13)data_buf[0]=data_buf[0]/data_buf[1];  //兩數相 除
  158.                        
  159.                           int32_k=(long)data_buf[0];
  160.                           for(i=1;i<11;i++)
  161.                           {
  162.                                   int32_k=int32_k/10;
  163.                                 if(int32_k==0) break;       
  164.                           }

  165.                           if(data_buf[0]<0)
  166.                       {  
  167.                             xianshixy_chuli(xianshi_i);
  168.                             LED_xie_char2(x,y,jian);           //結果是負數
  169.                                 //k=~data_buf[0]+1;
  170.                                 k=(ulong)fabs(data_buf[0]);   //調用庫函數fabs
  171.                             }
  172.                           else
  173.                             k=(ulong)data_buf[0];
  174.                           switch(i)
  175.                           { double   double_k;
  176.                             uchar         j;
  177.                             case 10: i=k/1000000000;
  178.                                                  k=k%1000000000;
  179.                                                  xianshixy_chuli(xianshi_i);
  180.                                                  LED_xie_char2(x,y,data_tab[i]);
  181.                             case 9:  i=k/100000000;
  182.                                                  k=k%100000000;
  183.                                                  xianshixy_chuli(xianshi_i);
  184.                                                  LED_xie_char2(x,y,data_tab[i]);
  185.                             case 8:  i=k/10000000;
  186.                                                  k=k%10000000;
  187.                                                  xianshixy_chuli(xianshi_i);
  188.                                                  LED_xie_char2(x,y,data_tab[i]);
  189.                             case 7:  i=k/1000000;
  190.                                                  k=k%1000000;
  191.                                                  xianshixy_chuli(xianshi_i);
  192.                                                  LED_xie_char2(x,y,data_tab[i]);
  193.                             case 6:  i=k/100000;
  194.                                                  k=k%100000;
  195.                                                  xianshixy_chuli(xianshi_i);
  196.                                                  LED_xie_char2(x,y,data_tab[i]);
  197.                             case 5:  i=k/10000;
  198.                                                  k=k%10000;
  199.                                                  xianshixy_chuli(xianshi_i);
  200.                                                  LED_xie_char2(x,y,data_tab[i]);
  201.                             case 4:  i=k/1000;
  202.                                                  k=k%1000;
  203. ……………………

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


所有資料51hei提供下載:
仿真計算器.rar (74.41 KB, 下載次數: 59)

評分

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

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产成人精品一区二三区在线观看 | 成人在线观看免费 | 日日草夜夜草 | 91精品久久久久久久久久 | 操亚洲| 中文字幕一区二区三区在线乱码 | 围产精品久久久久久久 | 97色综合| 亚洲另类视频 | 亚洲欧美一区二区在线观看 | 久久激情五月丁香伊人 | 精品欧美一区二区久久久伦 | 日韩福利在线 | 欧美一级在线观看 | 日韩国产欧美一区 | 日韩精品四区 | 亚洲一区二区在线 | 在线色网址 | 黑人巨大精品欧美一区二区免费 | 国产精品久久久久久久久久 | 成人亚洲视频 | 中文字幕的av | 一区中文字幕 | 在线日韩在线 | www.黄色网 | 精品真实国产乱文在线 | 日韩在线不卡 | 欧美成人免费在线 | 欧美成人a| 成人av电影在线 | 日韩精品四区 | 欧美精品影院 | 亚洲国产精品一区 | 日韩免费av网站 | 99国产精品视频免费观看一公开 | 性欧美hd | 在线精品国产 | 欧美一区二区三区在线观看 | 亚洲精品免费在线观看 | 97成人免费 | 91超碰在线观看 |