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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 6611|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

基于單片機(jī)設(shè)計(jì)的簡(jiǎn)易計(jì)算器 能實(shí)現(xiàn)基本的加減乘除和清零

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
這是用STC59C52單片機(jī)做的計(jì)算器,使用數(shù)碼管顯示,能實(shí)現(xiàn)基本的加減乘除和清零



源程序:
  1. /*****利用單片機(jī)設(shè)計(jì)的簡(jiǎn)易計(jì)算器********/
  2. /*****   單片機(jī)型號(hào):STC59C52  ********/
  3. /*
  4. *采用4*4鍵盤,4行線,4列線
  5. *鍵盤行線列線接P1 IO口
  6. *數(shù)碼管接P0口
  7. */
  8. #include <reg52.h>
  9. #define uchar unsigned char
  10. #define uint unsigned int
  11. sbit dula=P2^6;//573段選使能
  12. sbit wela=P2^7;//573位選使能

  13. sbit beep=P3^2;//蜂鳴器


  14. uchar temp,key;//按鍵變量
  15. uchar fun;//加,減,乘,除,標(biāo)志位
  16. long int num1,num2,res;//num1與num2是2個(gè)要運(yùn)算的變量,res是結(jié)果
  17. uchar aa,dis;//aa 2個(gè)運(yùn)算數(shù)標(biāo)志位 dis 2個(gè)運(yùn)算數(shù)與結(jié)果標(biāo)志
  18. uchar code table[]={       
  19.         0x00,0x3f,0x06,0x5b,
  20.         0x4f,0x66,0x6d,0x7d,
  21.         0x07,0x7f,0x6f,0x77,
  22.         0x7c,0x39,0x5e,0x79,0x71};//數(shù)碼管段碼
  23. uchar code weixuan[]={
  24.         0xdf,0xef,0xf7,
  25.         0xfb,0xfd,0xfe};//數(shù)碼管位碼

  26. void delay(unsigned char i)//延時(shí)
  27. {
  28. uchar j,k;
  29.   for(j=i;j>0;j--)
  30.     for(k=125;k>0;k--);
  31. }

  32. void bee()//蜂鳴器
  33. {
  34.         beep=0;        
  35.         delay(255);
  36.         delay(255);
  37.         beep=1;        
  38. }

  39. //按鍵檢測(cè)
  40. //如果沒有按鍵按下,則key取Init()函數(shù)中所賦值為16
  41. void key_scan()
  42. {
  43.         P1=0xfe;//先置第一行線為低,其余為高       
  44.            //高四位為列線,低四位為行線
  45.         temp=P1;
  46.            temp=temp&0xf0;
  47.         //進(jìn)行與運(yùn)算,把結(jié)果賦給temp
  48.         //此時(shí)temp = 0xf0
  49.         if(temp!=0xf0)                /*判斷temp的高四位是否有0,如果有零的話,則此時(shí)temp != 0*/
  50.            {
  51.                 delay(10);
  52.                 temp = P1;
  53.                 temp=temp&0xf0;
  54.              if(temp!=0xf0)
  55.              {
  56.                        temp=P1;
  57.                        switch(temp)
  58.                        {
  59.                          case 0xee:     //此時(shí)按鍵坐標(biāo)為1行1列
  60.                               key=1;
  61.                               break;
  62.                          case 0xde:
  63.                               key=2;
  64.                               break;
  65.                          case 0xbe:
  66.                               key=3;
  67.                               break;
  68.                          case 0x7e:
  69.                               key=12;
  70.                               break;
  71.                 }
  72.                 while(temp!=0xf0)        //等待按鍵釋放
  73.                 {
  74.                           temp=P1;
  75.                           temp=temp&0xf0;
  76.                 }
  77.              }
  78.    }
  79.            P1=0xfd;
  80.            temp=P1;
  81.            temp=temp&0xf0;
  82.            if(temp!=0xf0)
  83.            {
  84.              delay(10);
  85.                 temp = P1;
  86.                 temp=temp&0xf0;
  87.              if(temp!=0xf0)
  88.              {
  89.                temp=P1;
  90.                switch(temp)
  91.                {
  92.                  case 0xed:
  93.                       key=4;
  94.                       break;
  95.                  case 0xdd:
  96.                       key=5;
  97.                       break;
  98.                  case 0xbd:
  99.                       key=6;
  100.                       break;
  101.                  case 0x7d:
  102.                       key=13;
  103.                       break;
  104.                 }
  105.                 while(temp!=0xf0)
  106.                 {
  107.                   temp=P1;
  108.                   temp=temp&0xf0;
  109.                 }
  110.              }
  111.     }
  112.    P1=0xfb;
  113.    temp=P1;
  114.    temp=temp&0xf0;
  115.    if(temp!=0xf0)
  116.    {
  117.              delay(10);
  118.                 temp = P1;
  119.                 temp=temp&0xf0;
  120.              if(temp!=0xf0)
  121.              {
  122.                        temp=P1;
  123.                        switch(temp)
  124.                        {
  125.                          case 0xeb:
  126.                               key=7;
  127.                               break;
  128.                          case 0xdb:
  129.                               key=8;
  130.                               break;
  131.                          case 0xbb:
  132.                               key=9;
  133.                               break;
  134.                          case 0x7b:
  135.                               key=14;
  136.                               break;
  137.                 }
  138.                 while(temp!=0xf0)
  139.                 {
  140.                           temp=P1;
  141.                           temp=temp&0xf0;
  142.                 }
  143.              }
  144.     }
  145.            P1=0xf7;
  146.            temp=P1;
  147.            temp=temp&0xf0;
  148.            if(temp!=0xf0)
  149.            {
  150.              delay(10);
  151.                 temp = P1;
  152.                 temp=temp&0xf0;
  153.              if(temp!=0xf0)
  154.              {
  155.                        temp=P1;
  156.                        switch(temp)
  157.                        {
  158.                                     case 0xe7:
  159.                                            key=10;
  160.                                      break;
  161.                                 case 0xd7:
  162.                                      key=0;
  163.                                      break;
  164.                                 case 0xb7:
  165.                                      key=11;
  166.                                      break;
  167.                                 case 0x77:
  168.                                      key=15;
  169.                                      break;
  170.                         }
  171.                 while(temp!=0xf0)
  172.                 {
  173.                           temp=P1;
  174.                           temp=temp&0xf0;
  175.                 }
  176.              }
  177.           }
  178. }
  179. /*uchar temp,key;//按鍵變量
  180. uchar fun;//加,減,乘,除,標(biāo)志位
  181. long int num1,num2,res; //num1與num2是2個(gè)要運(yùn)算的變量,res是結(jié)果
  182. uchar aa,dis;//aa 2個(gè)運(yùn)算數(shù)標(biāo)志位 dis 2個(gè)運(yùn)算數(shù)與結(jié)果標(biāo)志
  183. */
  184. void Init()//初始化
  185. {
  186.         num1=0;
  187.         num2=0;
  188.    
  189.     //P0 = 0; //關(guān)閉所有段選
  190.     wela=1;
  191.         P0=0xdf;//11011111
  192.         wela=0;
  193.        
  194.     dula=1;
  195.         P0=table[1];//顯示0
  196.         dula=0;
  197.        
  198.         key=16;
  199.         aa=0;
  200.         dis=0;
  201.         res=0;
  202. }

  203. void dis_play(long int nm)//顯示函數(shù)
  204. {
  205.         uchar a1,a6;//a1位段選變量,a6為位選變量
  206.         long int shu;
  207.         shu=nm;
  208.         if(shu==0)
  209.         {
  210.                 wela=1;
  211.                 P0=0xdf;
  212.                 wela=0;
  213.         dula=1;
  214.                 P0=table[1];
  215.                 dula=0;
  216.         }
  217.         else
  218.         {
  219.                 for(a6=0; a6<6; a6++)
  220.                 {
  221.                         a1=shu%10;//shu%10 shu比10小 a1=shu本身
  222.                         if(shu!=0)
  223.                         {
  224.                                 a1=a1+1;
  225.                         }
  226.                         shu=shu/10;//shu/10 shu比10小 shu為0
  227.                         P0=table[a1];
  228.             dula=1;
  229.                         dula=0;
  230.                         P0=weixuan[a6];
  231.                         wela=1;
  232.                         wela=0;
  233.                         delay(5);
  234.                 }        
  235.         }
  236. }
  237. void display()//顯示選擇函數(shù),dis 0或1顯示運(yùn)算數(shù),dis為2顯示結(jié)果
  238. {
  239.         switch (dis)
  240.            {
  241.      case 0:
  242.                  {
  243.                         dis_play(num1);
  244.                 }        
  245.                 break;
  246.      case 1:
  247.                  {
  248.                         dis_play(num2);
  249.                 }        
  250.                 break;
  251.      case 2:
  252.                 {
  253.                         dis_play(res);
  254.                 }        
  255.                 break;
  256.    }        
  257. }

  258. void shanshuo()//數(shù)碼管閃爍
  259. {
  260.         wela=1;
  261.         P0=0xff;
  262.         wela=0;
  263.         delay(255);
  264. }

  265. /*uchar temp,key;//按鍵變量
  266. uchar fun;//加,減,乘,除,標(biāo)志位
  267. long int num1,num2,res; //num1與num2是2個(gè)要運(yùn)算的變量,res是結(jié)果
  268. uchar aa,dis;//aa 2個(gè)運(yùn)算數(shù)標(biāo)志位 dis 2個(gè)運(yùn)算數(shù)與結(jié)果標(biāo)志
  269. */
  270. void check()//運(yùn)算函數(shù)
  271. {
  272.         if(key!=16)
  273.         {
  274.                 bee();
  275.                 if(key>=10)
  276.                 {
  277.                         switch (key)
  278.                            {
  279.                      // CE   
  280.                                      case 10:
  281.                                          Init();
  282.                                          break;  
  283.                                      // =
  284.                                      case 11:
  285.                                          {
  286.                                                    switch (fun)//加,減,乘,除選擇標(biāo)志位
  287.                                                    {
  288.                                                      case 0:
  289.                                                          res=num1+num2,dis=2;
  290.                                                          break;//加法
  291.                                                      case 1:
  292.                                                          res=num1-num2,dis=2;
  293.                                                          break;//減法
  294.                                                      case 2:res=num1*num2,dis=2;
  295.                                  break;//乘法
  296.                                                      case 3:res=num1/num2,dis=2;
  297.                                  break;//除法
  298.                                                    }
  299.                                         };
  300.                                         break;
  301.                                         // +
  302.                                     case 12:
  303.                                                 fun=0,aa=1,shanshuo();
  304.                                         break;
  305.                                         // -   
  306.                                     case 13:
  307.                                                 fun=1,aa=1,shanshuo();
  308.                                         break;
  309.                                         // *   
  310.                                         case 14:
  311.                                                 fun=2,aa=1,shanshuo();
  312.                                         break;
  313.                                         // /   
  314.                                     case 15:
  315.                                                 fun=3,aa=1,shanshuo();
  316.                                         break;   
  317.                            }
  318.                 }
  319.                 else
  320.                 {
  321.                         switch (aa)//運(yùn)算變量賦值標(biāo)志位
  322.                            {
  323.                      case 0:
  324.                                  {
  325.                                         num1=num1*10+key;//把按鍵檢測(cè)到的值賦給num1運(yùn)算變量1        
  326.                                 };
  327.                                 break;
  328.                      case 1:
  329.                                  {
  330.                                         dis=1;
  331.                                         num2=num2*10+key;//把按鍵檢測(cè)到的值賦給num2運(yùn)算變量2
  332.                                 };


  333. …………余下代碼請(qǐng)下載附件…………
復(fù)制代碼


下載:
v1.rar (32.22 KB, 下載次數(shù): 51)

評(píng)分

參與人數(shù) 1黑幣 +100 收起 理由
admin + 100 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:1 發(fā)表于 2017-3-25 22:05 | 只看該作者
好資料,51黑有你更精彩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产美女久久 | 欧美一区二区三区在线视频 | 91精品国产一区二区三区蜜臀 | 亚洲成人自拍 | 成人在线电影在线观看 | 女生羞羞网站 | 久久99这里只有精品 | 午夜激情网 | 欧美www在线 | 国产黄色在线 | 欧美三级免费观看 | 日日综合| 九九热九九| 亚洲国产精品一区二区三区 | 中文字幕免费视频 | 国产精品久久久久无码av | 一区二区日本 | 精品国产欧美一区二区 | 日韩精品视频一区二区三区 | 亚洲一二三区精品 | ririsao久久精品一区 | 国产成人精品一区二区三 | 日日天天 | 一本大道久久a久久精二百 国产成人免费在线 | 黄网站在线播放 | 一区二区高清在线观看 | 精品欧美一区二区中文字幕视频 | 操久久久| 夜夜夜久久久 | 黄色毛片视频 | 亚洲精品福利在线 | 久久久亚洲 | 日韩在线视频一区二区三区 | 国产黄色大片网站 | www.亚洲区 | 特级生活片 | 999久久久久久久 | 久久中文字幕一区 | 久久天天综合 | 欧美二区乱c黑人 | 久久免费高清 |