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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

Proteus仿真單片機開發板計算器(矩陣鍵盤)試驗

[復制鏈接]
跳轉到指定樓層
樓主
ID:223055 發表于 2017-8-2 02:33 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
自己做的一個仿真的單片機開發板,有完整的試驗步驟和仿真工程文件提供
板子上帶擴展ROM空間(i^2c 24c02)、adc(數字電壓表)、dac(信號發生器)、矩陣按鍵(計算器),四個任務通過獨立按鍵進行切換

下面是計算器(矩陣鍵盤)部分的的單片機源程序
完整代碼和仿真工程文件請下載http://www.zg4o1577.cn/bbs/dpj-91558-1.html

  1. #include <reg52.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. sbit leden=P2^7;
  5. sbit rs=P2^6;
  6. sbit wr=P2^5;
  7. sbit key=P3^2;
  8. //sbit busy=P0^7;
  9. uchar i,j,num,num_1,temp;
  10. long a1,b, c;
  11. float a_c,b_c;
  12. uchar flag,fuhao;
  13. uchar code table[]={7,8,9,0,
  14.                     4,5,6,0,
  15.                                         1,2,3,0};
  16. uchar code table1[]={7,8,9,0x2f-0x30,
  17.                      4,5,6,0x2a-0x30,
  18.                                          1,2,3,0x2d-0x30,
  19.                      0x01-0x30,0,0x3d-0x30,0x2b-0x30};
  20. void delay(uchar n)
  21. {
  22.     uchar i,j;
  23.     for(i=n;i>0;i--)
  24.         for(j=200;j>0;j--) ;
  25. }

  26. void write(uint w)
  27. {
  28.    rs=0;
  29.    wr=0;
  30.    leden=0;
  31.    P0=w;
  32.    leden=1;
  33.    delay(10);//check();
  34.    leden=0;
  35.    
  36. }
  37. void write_data(uint q)
  38. {
  39.    rs=1;
  40.    wr=0;
  41.    leden=0;
  42.    P0=q;
  43.    leden=1;
  44.    delay(10);
  45.    leden=0;
  46.    
  47. }
  48. void init()
  49. {
  50.    num=1;
  51.    leden=1;
  52.    write(0x38);
  53.    write(0x08);
  54.    write(0x01);
  55.    write(0x06);
  56.    write(0x0f);
  57.    num_1=0;
  58.    i=0;j=0;a1=0;b=0;c=0;flag=0;fuhao=0;

  59. }

  60. void keyscan()
  61. {
  62.    P1=0Xfe;
  63.    if(P1!=0xfe)
  64.    {
  65.     delay(10);
  66.         if(P1!=0xfe)
  67.         {
  68.           temp=P1&0xf0;
  69.           switch(temp)
  70.             {
  71.                 case 0xe0:num=0;break;
  72.                 case 0xd0:num=1;break;
  73.                 case 0xb0:num=2;break;
  74.                 case 0x70:num=3;break;
  75.                 }
  76.          }
  77.         while(P1!=0xfe);
  78.         if(num==0||num==2||num==1)         
  79.         {
  80.             if(j!=0)
  81.             {
  82.                 write(0x01);
  83.                 j=0;
  84.             }
  85.             if(flag==0)
  86.             {
  87.                 a1=a1*10+table[num];
  88.             }
  89.             else
  90.             {
  91.                 b=b*10+table[num];
  92.             }
  93.         }
  94.         else
  95.         {
  96.            flag=1;
  97.            fuhao=4;//除號以按;
  98.         }
  99.         i=table1[num];
  100.         write_data(0x30+i);
  101.         }
  102.         P1=0xfd;
  103.         if(P1!=0xfd)
  104.         {
  105.             delay(10);
  106.             if(P1!=0xfd)
  107.             {
  108.                 temp=P1&0xf0;
  109.                 switch(temp)
  110.                 {
  111.                     case 0xe0:num=4;break;
  112.                     case 0xd0:num=5;break;
  113.                     case 0xb0:num=6;break;
  114.                     case 0x70:num=7;break;
  115.                 }
  116.             }
  117.             while(P1!=0xfd);
  118.             if(num==4||num==5||num==6)
  119.             {
  120.             if(j!=0)
  121.             {
  122.                 write(0x01);
  123.                 j=0;
  124.             }
  125.             if(flag==0)
  126.             {
  127.                 a1=a1*10+table[num];
  128.             }
  129.             else
  130.             {
  131.                 b=b*10+table[num];
  132.             }
  133.         }
  134.         else
  135.         {
  136.            flag=1;
  137.            fuhao=3;//乘號以按;
  138.         }
  139.         i=table1[num];
  140.         write_data(0x30+i);
  141.    }

  142.    P1=0xfb;
  143.    if(P1!=0xfb)
  144.    {
  145.     delay(10);
  146.         if(P1!=0xfb)
  147.         {
  148.           temp=P1&0xf0;
  149.           switch(temp)
  150.             {
  151.                 case 0xe0:num=8;break;
  152.                 case 0xd0:num=9;break;
  153.                 case 0xb0:num=10;break;
  154.                 case 0x70:num=11;break;
  155.                 }
  156.          }
  157.         while(P1!=0xfb);
  158.         if(num==8||num==9||num==10)
  159.         {
  160.          if(j!=0)
  161.           {
  162.             write(0x01);
  163.                 j=0;
  164.           }
  165.           if(flag==0)
  166.           {
  167.             a1=a1*10+table[num];
  168.           }
  169.           else
  170.            {
  171.              b=b*10+table[num];
  172.            }
  173.          }
  174.          else if(num==11)
  175.           {
  176.            flag=1;
  177.            fuhao=2;//jian號以按;
  178.            }
  179.          i=table1[num];
  180.          write_data(0x30+i);
  181.    }

  182.         P1=0xf7;
  183.     if(P1!=0xf7)
  184.    {
  185.     delay(10);
  186.         if(P1!=0xf7)
  187.         {
  188.           temp=P1&0xf0;
  189.           switch(temp)
  190.             {
  191.                 case 0xe0:num=12;break;
  192.                 case 0xd0:num=13;break;
  193.                 case 0xb0:num=14;break;
  194.                 case 0x70:num=15;break;
  195.                 }
  196.          }
  197.         while(P1!=0xf7);
  198.         
  199.    switch(num)
  200.    {
  201.      case 12:{write(0x01);a1=0;b=0;flag=0;fuhao=0;}break;
  202.      case 13:{
  203.                  if(flag==0)
  204.                  {
  205.                                      a1=a1*10;
  206.                                          write_data(0x30);
  207.                                  }
  208.                  else if(flag==1)
  209.                  {
  210.                                      b=b*10;
  211.                                          write_data(0x30);
  212.                                  }
  213.              } break;
  214.      case 14:{
  215.                      j=1;
  216.                  if(fuhao==1)
  217.                  {
  218.                                      write(0x80+0x4f);
  219.                                          write(0x04);
  220.                                          c=a1+b;
  221.                      while(c!=0)
  222.                      {
  223.                          write_data(0x30+c%10);
  224.                          c=c/10;
  225.                      }
  226.                      write_data(0x3d);
  227.                                          a1=0;b=0;
  228.                                          flag=0;
  229.                                          fuhao=0;
  230.                                   }
  231.                   else if(fuhao==2)
  232.                   {
  233.                                       write(0x80+0x4f);
  234.                                           write(0x04);
  235.                       if(a1-b>0)
  236.                       {
  237.                                               c=a1-b;
  238.                                           }
  239.                       else
  240.                                           {
  241.                                               c=b-a1;
  242.                                   }
  243.                       while(c!=0)
  244.                       {
  245.                           write_data(0x30+c%10);
  246.                           c=c/10;
  247.                       }
  248.                       if(a1-b<0)
  249.                       write_data(0x2d);
  250.                                           write_data(0x3d);
  251.                                           a1=0;b=0;flag=0;
  252.                                           fuhao=0;
  253.                                           }
  254.                       else if(fuhao==3)
  255.                       {
  256.                                               write(0x80+0x4f);
  257.                                                   write(0x04);
  258.                                                   c=a1*b;
  259.                           while(c!=0)
  260.                           {
  261.                                write_data(0x30+c%10);
  262.                                c=c/10;
  263.                           }
  264.                           write_data(0x3d);
  265.                                                   a1=0;
  266.                                                   b=0;
  267.                                                   flag=0;
  268.                                                   fuhao=0;
  269.                                           }
  270.                       else if(fuhao==4)
  271.                       {
  272.                           write(0x80+0x4f);
  273.                                                   write(0x04);
  274.                                           i=0;
  275.                           c=a1/b;        
  276.                           while(c!=0)
  277.                           {
  278.                               write_data(0x30+c%10);
  279.                               c=c/10;
  280.                               i++;
  281.                               if(i==3)
  282.                               write(0x2e);
  283.                           }
  284.                           if(a1/b<=0)
  285.                           write_data(0x30);
  286.                                                   write_data(0x3d);
  287.                                                   a1=0;
  288.                                                   b=0;
  289.                                                   flag=0;
  290.                                                   fuhao=0;
  291.                       }                  
  292.                 } break;
  293.         case 15:
  294.                 {
  295.                     write_data(0x30+table1[num]);
  296.                         flag=1;
  297.                         fuhao=1;
  298.                 }    break;
  299.    }
  300.    }
  301.    P1=0xf0;
  302. }

  303. void jisuanqi()
  304. {
  305.    init();
  306.    while(key)
  307.    {
  308.        keyscan();
  309.    }
  310. }
復制代碼



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

使用道具 舉報

沙發
ID:222834 發表于 2017-8-2 09:31 | 只看該作者
已下載
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕在线中文 | 久草中文在线观看 | 国产精品av久久久久久久久久 | 国产一级在线观看 | 色狠狠一区 | 欧洲成人| 欧美一区二区三区久久精品视 | 亚洲一区久久 | 久久涩涩 | 成人影院免费视频 | 国产综合视频 | 中文字幕视频在线 | 日本一区二区三区在线观看 | 在线看av的网址 | 久久精品亚洲精品国产欧美kt∨ | 爱爱免费视频 | 婷婷精品 | 中文字幕第一页在线 | 欧美日韩不卡合集视频 | 在线观看第一页 | 国产91色在线 | 亚洲 | 欧美一区二区三区四区五区无卡码 | 日韩国产高清在线观看 | 亚洲欧美日韩精品久久亚洲区 | 日韩毛片免费看 | av网站免费在线观看 | 伊人狠狠| 91精品国产综合久久久久久漫画 | 欧美日韩激情 | jlzzxxxx18hd护士| 羞羞视频一区二区 | 国产精品福利久久久 | 天天爽网站 | 91 在线 | 成人教育av| 五月天激情电影 | 国产精品一区视频 | 欧洲亚洲视频 | 久草福利 | 国产不卡一| 视频1区2区|