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

QQ登錄

只需一步,快速開始

搜索
查看: 13331|回復(fù): 11
收起左側(cè)

關(guān)于用矩陣鍵盤和數(shù)碼管寫個(gè)計(jì)算器問題

  [復(fù)制鏈接]
ID:37783 發(fā)表于 2012-4-4 15:22 | 顯示全部樓層 |閱讀模式
   我想用開發(fā)板做一個(gè)計(jì)算器,但是沒有思路,其實(shí)只要思路就好了,不過要是有程序我也不會(huì)拒絕的圖片點(diǎn)擊可在新窗口打開查看。

如果能把簡單的計(jì)算器和復(fù)雜計(jì)算器都講了就更好了,如果有帶注釋的源程序的話那就太感謝了。。!圖片點(diǎn)擊可在新窗口打開查看

謝謝各位大大了~~


回復(fù)

使用道具 舉報(bào)

ID:27916 發(fā)表于 2012-4-4 17:38 | 顯示全部樓層
想法挺好的
回復(fù)

使用道具 舉報(bào)

ID:1 發(fā)表于 2014-11-20 13:45 | 顯示全部樓層
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long

uchar code table8[]={0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89};      //最左邊顯示0-9
uchar code table7[]={0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99};   //左邊倒數(shù)第二
uchar code table6[]={0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9};   //左邊倒數(shù)第二
uchar code table5[]={0xb0,0xb1,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,0xb8,0xb9};
uchar code table4[]={0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9};
uchar code table3[]={0xd0,0xd1,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9};   //左邊倒數(shù)第二
uchar code table2[]={0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9};
uchar code table1[]={0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9};

ulong dat;       //數(shù)據(jù)
ulong datA;      //過度數(shù)據(jù)
uchar addflag;   //加法標(biāo)志位
uchar subflag;   //減法標(biāo)志位
uchar mulflag;   //乘法標(biāo)志位
uchar divflag;   //除法標(biāo)志位
uchar overflow;  //溢出標(biāo)志位
uchar clrflag;   //數(shù)據(jù)處理標(biāo)志位
uchar illegal;   //除法的非法標(biāo)志位

uchar keynum;    //按鍵鍵值
uchar keycode;   //按鍵IO口狀態(tài)值   

uchar scanok;    //IO口掃描結(jié)束
uchar checkok;   //鍵值獲取結(jié)束

void delay_ms(uint z)                      //1ms的延時(shí)函數(shù)   
{
uchar x,y;
for(x=z;x>0;x--)
  for(y=110;y>0;y--);
}

void  scankeyboard()                  //scankeyboard()函數(shù)(用于掃描鍵值)
{                                     //反轉(zhuǎn)法測(cè)鍵值。。。
    uchar a,b;
P2=0x0f;                     
keycode=P2;
if(keycode!=0x0f)
{
  delay_ms(10);                 //按鍵閉合消抖。。
  a=keycode;
  P2=0xf0;
  b=P2;
  keycode=a|b;
  while(P2!=0xf0);
  delay_ms(10);//按鍵釋放消抖。。
     P1=keycode;
  scanok=1;//鍵值測(cè)完后。。scanok置1。。。
}

}

void checkkeycode(void)      
{
    if(scanok)                                //如果鍵值測(cè)完后,則執(zhí)行以下。。。
{
     scanok=0;                             //scanok清零。。為下次使用準(zhǔn)備
  switch(keycode)                       //用開關(guān)語句查找鍵值對(duì)應(yīng)的邏輯功能...
  {
   case 0xee: keynum=0  ;break;  //數(shù)字鍵
   case 0xed: keynum=1  ;break;
   case 0xdd: keynum=2  ;break;
   case 0xbd: keynum=3  ;break;
   case 0xeb: keynum=4  ;break;
   case 0xdb: keynum=5  ;break;
   case 0xbb: keynum=6  ;break;
   case 0xe7: keynum=7  ;break;
   case 0xd7: keynum=8  ;break;
   case 0xb7: keynum=9  ;break;
   case 0x77: keynum=10 ;break;   // +
   case 0x7b: keynum=11 ;break;   // -
   case 0x7d: keynum=12 ;break;   // *
   case 0x7e: keynum=13 ;break;   // /
   case 0xbe: keynum=14 ;break;   // =
   case 0xde: keynum=15 ;break;   //清零
  }
  checkok=1;                         //查完后,checkok置1.
}
}

void datpros(void)                     //數(shù)據(jù)處理函數(shù)。。
{
   if(keynum==15)                      //如果是15  則認(rèn)為是清零的  進(jìn)行清零
   {
     dat=0;
   }
   else                                //否則則認(rèn)為是數(shù)字鍵 進(jìn)行顯示 存貯 并運(yùn)算
   {
  if(clrflag)                    //清除標(biāo)志為1,則執(zhí)行以下。
  {        
   dat=0;
   clrflag=0;                 //為下次使用準(zhǔn)備。
  }
  dat=dat*10+(ulong)keynum;     //將每次按的數(shù)字合成一個(gè)整體。。比如按下"1","2","3"后就會(huì)把它合成"123"
  if(dat>1000000000) overflow=1; //如果輸入值大于65535(所用的為int型數(shù)據(jù),最大為65535)的話則溢出標(biāo)志置1,可供顯示程序查詢并顯示"EEEEEEE"
  if(divflag&&!dat) illegal=1;   //如果做除法時(shí)除了零,則非法標(biāo)志置1,供顯示程序查詢
   }
}

void add(void)
{
   addflag++;                          //加法標(biāo)志置1。。。
   subflag=mulflag=divflag=0;          //將其它運(yùn)算標(biāo)志清零。。(一次只能作一種運(yùn)算)
   clrflag=1;                          //清零標(biāo)標(biāo)置1,(當(dāng)按下加號(hào)后,再按第二個(gè)加數(shù)時(shí),這時(shí)應(yīng)該顯示第二加數(shù)。。所以要清掉第一個(gè)加數(shù)。)
   if(addflag>1)                       //此處用于邊加。。
   {                                   //當(dāng)連續(xù)加的時(shí)候。。加號(hào)應(yīng)有等于的功能。。
       dat=dat+datA;                   //算出和
    datA=dat;                       //和保存,用于下一次連加。。
   }                                   //說明:比如進(jìn)行"1+2+3"時(shí),當(dāng)按第二個(gè)加時(shí),應(yīng)該要顯示1+2的和。。
   else datA=dat;                      //如果不是連加,將輸入的第一個(gè)加數(shù)暫存。。(因?yàn)轱@示程序只顯示dat變量的值。)

}

void sub(void)
{
   subflag++;
   addflag=mulflag=divflag=0;
   clrflag=1;
   if(subflag>1)                //連減。。
   {
       dat=datA-dat;
    datA=dat;
   }
   else datA=dat;
}

void mul(void)
{
   mulflag++;
   addflag=subflag=divflag=0;
   clrflag=1;
   if(mulflag>1)                //連乘
   {
  dat=datA*dat;
  datA=dat;
   }
   else datA=dat;

}

void div(void)
{
   divflag++;
   addflag=subflag=mulflag=0;
   clrflag=1;
   if(divflag>1)
   {
     dat=datA/dat;
  datA=dat;
   }
   else datA=dat;
}

void equ(void)
{

   if(addflag)                           //如果些時(shí)做加法運(yùn)算。。
   {
   dat=dat+datA;                     //計(jì)算各存入dat(顯示程序會(huì)將dat顯示的。。)
   }
   if(subflag)
   {
   dat=datA-dat;
   }
   if(mulflag)
   {
      dat=datA*dat;
   }
   if(divflag)
   {
      dat=datA/dat;
   }
   addflag=subflag=mulflag=divflag=0;    //運(yùn)算一次完成后將所有運(yùn)標(biāo)志清零。為下次運(yùn)算作準(zhǔn)備。。
}

void display(void)
{
uchar ge=0,shi=0,bai=0,qian=0,wan=0,shiwan=0,baiwan=0,qianwan=0;

if(!overflow&&!illegal)
{
  ge=dat;                        //將數(shù)據(jù)分開然后分別顯示
  shi=dat0/10;
  bai=dat00/100;
  qian=dat000/1000;
  wan=dat0000/10000;
  shiwan=dat00000/100000;
  baiwan=dat000000/1000000;
  qianwan=dat0000000/10000000;
     
  
  P0=table1[ge];                   //個(gè)位顯示
  delay_ms(2);
  
  P0=table2[shi];                //十位顯示
  delay_ms(2);
  
  P0=table3[bai];                //百位顯示
  delay_ms(2);
  
  P0=table4[qian];                //千位位顯示
  delay_ms(2);   
  
  P0=table5[wan];                //wan位顯示
  delay_ms(2);
  
  P0=table6[shiwan];               //個(gè)位顯示
  delay_ms(2);

  P0=table7[baiwan];               //個(gè)位顯示
  delay_ms(2);

  P0=table8[qianwan];              //個(gè)位顯示
  delay_ms(2);

  P0=0xff;
}
else
{
  P0=table1[0];
}
}

void calculate_handle(void)//計(jì)算大函數(shù)。。
{
if(checkok)//如果檢測(cè)鍵值完萬。。則執(zhí)行以下。。
{
  checkok=0;//檢測(cè)完標(biāo)志清零..
  switch (keynum)//如果是+,-,*,/,=則進(jìn)入相應(yīng)的函數(shù)。。
  {
   case 10 : add(); break;    //如果是按了"+",則進(jìn)入加法函數(shù)。
   case 11 : sub(); break;    //如果是按了"-",則進(jìn)入加法函數(shù)。
   case 12 : mul(); break;    //如果是按了"*",則進(jìn)入加法函數(shù)。
   case 13 : div(); break;    //如果是按了"/",則進(jìn)入加法函數(shù)。
   case 14 : equ(); break;    //如果是按了"=",則進(jìn)入加法函數(shù)。
   default : datpros();       //如果不是,計(jì)算符(即為數(shù)字),則進(jìn)入數(shù)據(jù)處理函數(shù)。
  }
}
}

void main(void)
{
P0=0xff;
while(1)
{
  scankeyboard();   
  checkkeycode();
  calculate_handle();
  display();
   
}
}
回復(fù)

使用道具 舉報(bào)

ID:67796 發(fā)表于 2014-11-23 17:59 | 顯示全部樓層
admin 發(fā)表于 2014-11-20 13:45
#include
#define uchar unsigned char
#define uint unsigned int

改了下您的代碼,table[1~8]有些占空間了。
scankeyboard()函數(shù)寫得很好,比光盤中“矩陣鍵盤_c_按鍵顯示1-16平方”精簡得多。

不知胡老師這有否Reverse Polish notation寫的計(jì)算器(使用PS2鍵盤接口,液晶顯示)。

RPN寫的計(jì)算器可計(jì)算復(fù)雜的函式,等整個(gè)式子寫完再給結(jié)果。
用一般思路實(shí)現(xiàn)的話,需預(yù)置較大的棧,用一般單片機(jī)且不借助外部存儲(chǔ)的話好像有些困難。


  1. #include <reg51.h>
  2. #include"intrins.h"
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. #define ulong unsigned long

  6. uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  7.                 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//共陰顯示字庫

  8. ulong dat;       //數(shù)據(jù)
  9. ulong datA;      //過度數(shù)據(jù)
  10. uchar addflag;   //加法標(biāo)志位
  11. uchar subflag;   //減法標(biāo)志位
  12. uchar mulflag;   //乘法標(biāo)志位
  13. uchar divflag;   //除法標(biāo)志位
  14. uchar overflow;  //溢出標(biāo)志位
  15. uchar clrflag;   //數(shù)據(jù)處理標(biāo)志位
  16. uchar illegal;   //除法的非法標(biāo)志位

  17. uchar keynum;    //按鍵鍵值
  18. uchar keycode;   //按鍵IO口狀態(tài)值   

  19. uchar scanok;    //IO口掃描結(jié)束
  20. uchar checkok;   //鍵值獲取結(jié)束


  21. sbit DUAN       = P2^6;     //74HC573的LE端    LED的段選端
  22. sbit WEI        = P2^7;     //74HC573的LE端    LED的位選端
  23. sbit BUZZER     = P2^2;

  24. void delay_ms(uint z)                      //1ms的延時(shí)函數(shù)   
  25. {
  26. uchar x,y;
  27. for(x=z;x>0;x--)
  28.    for(y=110;y>0;y--);
  29. }


  30. void wei_1(uchar wei)
  31. {
  32.         P0=wei;
  33.     WEI=1;
  34.         WEI=0;
  35. }

  36. void duan_1(uchar duan)
  37. {
  38.         uint i;
  39.         P0=table[duan];
  40.     DUAN=1;
  41.         DUAN=0;
  42.         for(i=25;i>0;i--);

  43.         P0=0;
  44.     DUAN=1;
  45.         DUAN=0;
  46.     for(i=50;i>0;i--);       //以上4行是消隱,如果不加其他數(shù)碼管會(huì)有暗亮非常難看
  47. }

  48. void leddisplay(uchar n,uchar value)
  49. {
  50.     wei_1(_crol_(0xfe,n));
  51.         duan_1(value);
  52. }

  53. void  scankeyboard()                  //scankeyboard()函數(shù)(用于掃描鍵值)
  54. {                                     //反轉(zhuǎn)法測(cè)鍵值。。。
  55.         uchar a,b;
  56.         P3=0x0f;                     
  57.         keycode=P3;
  58.         if(keycode!=0x0f)
  59.         {
  60.             delay_ms(10);                 //按鍵閉合消抖。。
  61.                 a=keycode;
  62.                 P3=0xf0;
  63.                 b=P3;
  64.                 keycode=a|b;
  65.                 while(P3!=0xf0);
  66.                 delay_ms(10);//按鍵釋放消抖。。
  67.                 P1=keycode;
  68.                 scanok=1;//鍵值測(cè)完后。。scanok置1。。。
  69.         }
  70. }

  71. void checkkeycode(void)      
  72. {
  73.      if(scanok)                                //如果鍵值測(cè)完后,則執(zhí)行以下。。。
  74. {
  75.       scanok=0;                             //scanok清零。。為下次使用準(zhǔn)備
  76.   switch(keycode)                       //用開關(guān)語句查找鍵值對(duì)應(yīng)的邏輯功能...
  77.    {
  78.         case 0xee: keynum=0  ;break;  //數(shù)字鍵
  79.         case 0xed: keynum=1  ;break;
  80.         case 0xdd: keynum=2  ;break;
  81.         case 0xbd: keynum=3  ;break;
  82.         case 0xeb: keynum=4  ;break;
  83.         case 0xdb: keynum=5  ;break;
  84.         case 0xbb: keynum=6  ;break;
  85.         case 0xe7: keynum=7  ;break;
  86.         case 0xd7: keynum=8  ;break;
  87.         case 0xb7: keynum=9  ;break;
  88.         case 0x77: keynum=10 ;break;   // +
  89.         case 0x7b: keynum=11 ;break;   // -
  90.         case 0x7d: keynum=12 ;break;   // *
  91.         case 0x7e: keynum=13 ;break;   // /
  92.         case 0xbe: keynum=14 ;break;   // =
  93.         case 0xde: keynum=15 ;break;   //清零
  94.         
  95.         //0C=/
  96.         //123*
  97.         //456-
  98.         //789+
  99.   }
  100.    checkok=1;                         //查完后,checkok置1.
  101. }
  102. }

  103. void datpros(void)                     //數(shù)據(jù)處理函數(shù)。。
  104. {
  105.     if(keynum==15)                      //如果是15  則認(rèn)為是清零的  進(jìn)行清零
  106.    {
  107.       dat=0;
  108.     }
  109.     else                                //否則則認(rèn)為是數(shù)字鍵 進(jìn)行顯示 存貯 并運(yùn)算
  110.    {
  111.    if(clrflag)                    //清除標(biāo)志為1,則執(zhí)行以下。
  112.   {        
  113.     dat=0;
  114.     clrflag=0;                 //為下次使用準(zhǔn)備。
  115.   }
  116.    dat=dat*10+(ulong)keynum;     //將每次按的數(shù)字合成一個(gè)整體。。比如按下"1","2","3"后就會(huì)把它合成"123"
  117.    if(dat>1000000000) overflow=1; //如果輸入值大于65535(所用的為int型數(shù)據(jù),最大為65535)的話則溢出標(biāo)志置1,可供顯示程序查詢并顯示"EEEEEEE"
  118.    if(divflag&&!dat) illegal=1;   //如果做除法時(shí)除了零,則非法標(biāo)志置1,供顯示程序查詢
  119.    }
  120. }

  121. void add(void)
  122. {
  123.     addflag++;                          //加法標(biāo)志置1。。。
  124.    subflag=mulflag=divflag=0;          //將其它運(yùn)算標(biāo)志清零。。(一次只能作一種運(yùn)算)
  125.    clrflag=1;                          //清零標(biāo)標(biāo)置1,(當(dāng)按下加號(hào)后,再按第二個(gè)加數(shù)時(shí),這時(shí)應(yīng)該顯示第二加數(shù)。。所以要清掉第一個(gè)加數(shù)。)
  126.    if(addflag>1)                       //此處用于邊加。。
  127.    {                                   //當(dāng)連續(xù)加的時(shí)候。。加號(hào)應(yīng)有等于的功能。。
  128.        dat=dat+datA;                   //算出和
  129.     datA=dat;                       //和保存,用于下一次連加。。
  130.    }                                   //說明:比如進(jìn)行"1+2+3"時(shí),當(dāng)按第二個(gè)加時(shí),應(yīng)該要顯示1+2的和。。
  131.    else datA=dat;                      //如果不是連加,將輸入的第一個(gè)加數(shù)暫存。。(因?yàn)轱@示程序只顯示dat變量的值。)

  132. }

  133. void sub(void)
  134. {
  135.     subflag++;
  136.     addflag=mulflag=divflag=0;
  137.     clrflag=1;
  138.     if(subflag>1)                //連減。。
  139.    {
  140.         dat=datA-dat;
  141.      datA=dat;
  142.     }
  143.     else datA=dat;
  144. }

  145. void mul(void)
  146. {
  147.     mulflag++;
  148.     addflag=subflag=divflag=0;
  149.     clrflag=1;
  150.     if(mulflag>1)                //連乘
  151.    {
  152.    dat=datA*dat;
  153.    datA=dat;
  154.     }
  155.     else datA=dat;

  156. }

  157. void div(void)
  158. {
  159.     divflag++;
  160.     addflag=subflag=mulflag=0;
  161.     clrflag=1;
  162.     if(divflag>1)
  163.     {
  164.       dat=datA/dat;
  165.    datA=dat;
  166.     }
  167.     else datA=dat;
  168. }

  169. void equ(void)
  170. {

  171.     if(addflag)                           //如果些時(shí)做加法運(yùn)算。。
  172.    {
  173.     dat=dat+datA;                     //計(jì)算各存入dat(顯示程序會(huì)將dat顯示的。。)
  174.     }
  175.     if(subflag)
  176.     {
  177.     dat=datA-dat;
  178.     }
  179.     if(mulflag)
  180.     {
  181.        dat=datA*dat;
  182.     }
  183.     if(divflag)
  184.     {
  185.        dat=datA/dat;
  186.     }
  187.     addflag=subflag=mulflag=divflag=0;    //運(yùn)算一次完成后將所有運(yùn)標(biāo)志清零。為下次運(yùn)算作準(zhǔn)備。。
  188. }

  189. void display(void)
  190. {
  191.         uchar ge=0,shi=0,bai=0,qian=0,wan=0,shiwan=0,baiwan=0,qianwan=0;
  192.         
  193.         if(!overflow&&!illegal)
  194.         {
  195.                 ge=dat%10;                     //將數(shù)據(jù)分開然后分別顯示
  196.                 shi=dat%100/10;
  197.                 bai=dat%1000/100;
  198.                 qian=dat%10000/1000;
  199.                 wan=dat%100000/10000;
  200.                 shiwan=dat%1000000/100000;
  201.                 baiwan=dat%10000000/1000000;
  202.                 qianwan=dat%100000000/10000000;
  203.                
  204.                
  205.                 leddisplay(7,ge);
  206.                 if(shi|bai|qian|wan|shiwan|baiwan|qianwan)leddisplay(6,shi);
  207.                 if(bai|qian|wan|shiwan|baiwan|qianwan)leddisplay(5,bai);
  208.                 if(qian|wan|shiwan|baiwan|qianwan)leddisplay(4,qian);
  209.                 if(wan|shiwan|baiwan|qianwan)leddisplay(3,wan);
  210.                 if(shiwan|baiwan|qianwan)leddisplay(2,shiwan);
  211.                 if(baiwan|qianwan)leddisplay(1,baiwan);
  212.                 if(qianwan)leddisplay(0,qianwan);
  213.                
  214.                 P0=0xff;
  215.         }
  216.         else P0=0;
  217. }

  218. void calculate_handle(void)//計(jì)算大函數(shù)。。
  219. {
  220.         if(checkok)//如果檢測(cè)鍵值完萬。。則執(zhí)行以下。。
  221.         {
  222.                 checkok=0;//檢測(cè)完標(biāo)志清零..
  223.                 switch (keynum)//如果是+,-,*,/,=則進(jìn)入相應(yīng)的函數(shù)。。
  224.                 {
  225.                         case 10 : add(); break;    //如果是按了"+",則進(jìn)入加法函數(shù)。
  226.                         case 11 : sub(); break;    //如果是按了"-",則進(jìn)入加法函數(shù)。
  227.                         case 12 : mul(); break;    //如果是按了"*",則進(jìn)入加法函數(shù)。
  228.                         case 13 : div(); break;    //如果是按了"/",則進(jìn)入加法函數(shù)。
  229.                         case 14 : equ(); break;    //如果是按了"=",則進(jìn)入加法函數(shù)。
  230.                         default : datpros();       //如果不是,計(jì)算符(即為數(shù)字),則進(jìn)入數(shù)據(jù)處理函數(shù)。
  231.                 }
  232.         }
  233. }

  234. void main(void)
  235. {
  236.         P0=0xff;
  237.         while(1)
  238.         {
  239.                 scankeyboard();   
  240.                 checkkeycode();
  241.                 calculate_handle();
  242.                 display();
  243.         
  244.         }
  245. }

復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

ID:76106 發(fā)表于 2015-4-4 14:12 | 顯示全部樓層
評(píng)論里面的源代碼真的是太牛了
回復(fù)

使用道具 舉報(bào)

ID:65232 發(fā)表于 2015-4-11 22:22 | 顯示全部樓層
做個(gè)記號(hào)少后看
回復(fù)

使用道具 舉報(bào)

ID:65232 發(fā)表于 2015-4-11 22:22 | 顯示全部樓層
做個(gè)記號(hào)少后看
回復(fù)

使用道具 舉報(bào)

ID:80733 發(fā)表于 2015-5-21 20:46 | 顯示全部樓層
這是C語言嗎,table[1-8】怎摸看不懂啊
回復(fù)

使用道具 舉報(bào)

ID:80108 發(fā)表于 2015-5-21 23:30 | 顯示全部樓層
認(rèn)認(rèn)真真去學(xué)習(xí)兩位老大的“C”程序,更加重要的是學(xué)習(xí)程序的編寫方法!

先謝謝兩位大大的程序啦!
回復(fù)

使用道具 舉報(bào)

ID:86461 發(fā)表于 2015-7-28 19:51 | 顯示全部樓層
本帖最后由 scx2006114 于 2015-7-29 09:50 編輯
exv 發(fā)表于 2014-11-23 17:59
改了下您的代碼,table[1~8]有些占空間了。
scankeyboard()函數(shù)寫得很好,比光盤中“矩陣鍵盤_c_按鍵顯 ...

我使用了這個(gè)程序后,出現(xiàn)了些問題,您能否幫我解決下,謝謝了
第一個(gè)問題,我要連按三下同一個(gè)九個(gè)數(shù)中的一個(gè)才能在數(shù)碼管顯示出相應(yīng)的數(shù)字
第二個(gè)問題,程序中加減可以正常運(yùn)行,而乘除則不能正常運(yùn)行
(我使用的51單片機(jī)板是六個(gè)數(shù)碼管)
回復(fù)

使用道具 舉報(bào)

ID:70535 發(fā)表于 2019-8-20 21:41 來自手機(jī) | 顯示全部樓層
admin 發(fā)表于 2014-11-20 13:45
#include
#define uchar unsigned char
#define uint unsigned int

學(xué)習(xí)了,感謝兩位源碼分享!
回復(fù)

使用道具 舉報(bào)

ID:662959 發(fā)表于 2020-6-23 08:42 | 顯示全部樓層
認(rèn)真學(xué)習(xí),這里師傅真牛
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表