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

標(biāo)題: 發(fā)愁單片機(jī)計(jì)算器功能 在將操作數(shù)輸出到顯示器和+-*/運(yùn)算的地方卡住了 求大神 [打印本頁(yè)]

作者: holy2456    時(shí)間: 2017-12-22 21:31
標(biāo)題: 發(fā)愁單片機(jī)計(jì)算器功能 在將操作數(shù)輸出到顯示器和+-*/運(yùn)算的地方卡住了 求大神
怎么才能實(shí)現(xiàn)簡(jiǎn)單計(jì)算器功能 在將操作數(shù)輸出到顯示器和+-*/運(yùn)算的地方卡住了

作者: 空靈的夜    時(shí)間: 2017-12-23 11:57
#在這里快速回復(fù)#/*  S16 S12 S8 S4分別是123+         S15 S11 S7 S3分別是456-         S14 S10 S6 S2分別是789*         S13 S9 S5 S1分別是0 CLR = / */  /* 實(shí)現(xiàn)兩個(gè)數(shù)的運(yùn)算,每個(gè)數(shù)的位數(shù)至少可以八位  */ #include<reg52.h>                         typedef unsigned char uint8; typedef unsigned int uint16;  sbit rw=P1^2; sbit rs=P1^1; sbit e=P1^0; sbit led=P3^5;  sbit beep=P3^7; uint8 key,num; uint8 fuhao;//定義具體的那個(gè)符號(hào),是加減還是乘除。 uint8 flag;        //定義有沒(méi)有按下符號(hào)鍵,這個(gè)是統(tǒng)稱 long a,b,c,d;        //定義運(yùn)算數(shù)據(jù)的第一個(gè)和第二個(gè)及等于的數(shù)變量 uint8 k; //定義小數(shù)點(diǎn)后面顯示的位數(shù) uint8 biao;  uint8 dat1[]={1,2,3,0x2b-0x30, 4,5,6,0x2d-0x30, 7,8,9,0x2a-0x30, 0,0x01-0x30,0x3d-0x30,0x2b-0x30 };//保存顯示的數(shù)據(jù)  void delay(uint16 i)     //延時(shí)函數(shù) {         while(i--); } void lcdwrc(uint8 c) {         delay(1000);         rs=0;               //數(shù)據(jù)命令選擇端         rw=0;               //讀寫選擇端         e=0;                //使能端         P0=c;                        e=1;         delay(1000);         e=0; } void lcdwrd(uint8 dat)//將要寫的命令發(fā)送到數(shù)據(jù)總線上 {         delay(1000);         rs=1;         rw=0;         e=0;         P0=dat;               //位置                        e=1;                //使能下降沿輸入數(shù)據(jù)         delay(1000);            e=0;         rs=0; }  void lcdinit()          //初始化函數(shù) {         delay(1500);         lcdwrc(0x38);        //設(shè)置16*2,5*7八位數(shù)據(jù)接口         delay(500);         lcdwrc(0x38);         delay(500);         lcdwrc(0x38);         delay(500);         lcdwrc(0x38);                  lcdwrc(0x08);        //開液晶顯示                 lcdwrc(0x01);        //顯示清零,指針清零         lcdwrc(0x06);        //寫一個(gè)字符后指針和地址加一         lcdwrc(0x0c);        //設(shè)置開顯示,不開光標(biāo)         key=0;         num=0;         flag=0;         fuhao=0;         a=0;         b=0;         c=0;         d=0;         biao=0;         led=0;  }  void keyscan() {         P2=0xfe;   //令第一行為0,然后判斷是哪一列按下         if(P2!=0xfe)         {                 delay(1000);                 if(P2!=0xfe)                 {                         key=P2&0xf0;      //按位0大                         switch(key)                         {                                 case 0xe0: num=0;break;          //1                                 case 0xd0: num=1;break;          //2                                 case 0xb0: num=2;break;          //3                                 case 0x70: num=3;break;          //加                         }                 }                 while(P2!=0xfe);                 if(num==0||num==1||num==2)         //確認(rèn)第一行的數(shù)1,2,3                 {                         if(flag==0)         //沒(méi)有按下符號(hào)鍵                         {                                 //led=1;                                 a=a*10+dat1[num];                //輸入                         }                         else                         {                                 //led=1;                                 b=b*10+dat1[num];                         }                                  }                 if(num==3)                 {                         //led=0;                         flag=1;                         fuhao=1;     //加號(hào)+                         }                 lcdwrd(0x30+dat1[num]);   //加0x30轉(zhuǎn)ACSII         }           P2=0xfd;                                    //令第二行為0,判斷是哪一列按下         if(P2!=0xfd)         {                 delay(1000);                 if(P2!=0xfd)                 {                         key=P2&0xf0;                         switch(key)                         {                                 case 0xe0: num=4;break;          //4                                 case 0xd0: num=5;break;          //5                                 case 0xb0: num=6;break;          //6                                 case 0x70: num=7;break;          //減—                         }                         }                 while(P2!=0xfd);                 if(num==4||num==5||num==6)                 {                         if(flag==0)         //沒(méi)有按下符號(hào)鍵                         {                                 //led=1;                                 a=a*10+dat1[num];                                 }                         else                         {                                 //led=1;                                 b=b*10+dat1[num];                         }                                         }                 else                 {                         flag=1;                         fuhao=2;//帶表減號(hào)                 }                 lcdwrd(0x30+dat1[num]);        //位置在函數(shù)末端,輸出函數(shù)         }           P2=0xfb;                 //令第三行為0,判斷哪一列按下         if(P2!=0xfb)         {                 delay(1000);                 if(P2!=0xfb)                 {                         key=P2&0xf0;                         switch(key)                         {                                 case 0xe0: num=8;break;          //7                                 case 0xd0: num=9;break;          //8                                 case 0xb0: num=10;break;  //9                                 case 0x70: num=11;break;  //乘*                         }                         }                 while(P2!=0xfb);                 if(num==8||num==9||num==10)                 {                         if(flag==0)         //沒(méi)有按下符號(hào)鍵                         {                                 //led=1;                                 a=a*10+dat1[num];                                 }                         else                         {                                 //led=1;                                 b=b*10+dat1[num];                         }                                         }                 else                 {                         flag=1;                         fuhao=3;//帶表乘號(hào)*                 }                 lcdwrd(0x30+dat1[num]);         }           P2=0xf7;                 //令第四行為0,判斷哪一列按下         if(P2!=0xf7)         {                 delay(1000);                 if(P2!=0xf7)                 {                         key=P2&0xf0;                         switch(key)                         {                                 case 0xe0: num=12;break;  //0                                 case 0xd0: num=13;break;  //清除rst                                 case 0xb0: num=14;break;  //等號(hào)=                                 case 0x70: num=15;break;  //除/                         }                         }                 while(P2!=0xf7);                 switch(num)                 {                         case 12:                                          if(flag==0)         //沒(méi)有按下符號(hào)鍵                                         {                                                 //led=1;                                                 a=a*10+dat1[num];                                                 lcdwrd(0x30);                                                 }                                         else                                         {                                                 //led=1;                                                 b=b*10+dat1[num];                                                 lcdwrd(0x30);                                         }                                         break;                                                  case 13:                                          lcdwrc(0x01);        //清屏指令                                                                 a=0;                                         b=0;                                         flag=0;                                         fuhao=0;                                         break;                          case 15:                                                                  flag=1;                                         fuhao=4;                                         lcdwrd(0x2f);//除號(hào)/                                         break;                                                                  case 14:                                          if(fuhao==1)//加                                         {                                                 lcdwrc(0x4f+0x80);    //地址                                                   lcdwrc(0x04);    //設(shè)置光標(biāo)左移,屏幕不移動(dòng)                                                 c=a+b;           //輸出的數(shù)                                                 while(c!=0)             //一位一位顯示                                                 {                                                         lcdwrd(0x30+c%10); //顯示結(jié)果的最后一位在0x4f的位置                                                         c=c/10;            //取前面的結(jié)果數(shù)據(jù)                                                         }                                                 lcdwrd(0x3d);       //顯示等于號(hào)=                                                 a=0;                                                 b=0;                                                 flag=0;                                                 fuhao=0;        //全部清除為0                                         }                                         if(fuhao==2)   //減                                         {                                                 lcdwrc(0x4f+0x80);                                                 lcdwrc(0x04);   //設(shè)置光標(biāo)左移,屏幕不移動(dòng)                                                 if(a>b)                                                         c=a-b;                                                 else                                                         c=b-a;                                                                                                  while(c!=0)         //一位一位顯示                                                 {                                                         lcdwrd(0x30+c%10);//顯示結(jié)果的最后一位在0x4f的位置                                                         c=c/10;//取前面的結(jié)果數(shù)據(jù)                                                         }                                                 if(a<b)        lcdwrd(0x2d); //顯示-號(hào)                                                 lcdwrd(0x3d); //顯示等于號(hào)=                                                 a=0;                                                 b=0;                                                 flag=0;                                                 fuhao=0;//全部清除為0                                         }                                         if(fuhao==3)//乘法                                                         {                                                 lcdwrc(0x4f+0x80);                                                 lcdwrc(0x04); //設(shè)置光標(biāo)左移,屏幕不移動(dòng)                                                 c=a*b;                                                 while(c!=0)         //一位一位顯示                                                 {                                                         lcdwrd(0x30+c%10);//顯示結(jié)果的最后一位在0x4f的位置                                                         c=c/10;//取前面的結(jié)果數(shù)據(jù)                                                         }                                                 lcdwrd(0x3d); //顯示等于號(hào)=                                                 a=0;                                                 b=0;                                                 flag=0;                                                 fuhao=0;//全部清除為0                                                 }                                         if(fuhao==3)//乘法                                                         {                                                 lcdwrc(0x4f+0x80);                                                 lcdwrc(0x04);//設(shè)置光標(biāo)左移,屏幕不移動(dòng)                                                 c=a*b;                                                 while(c!=0)         //一位一位顯示                                                 {                                                         lcdwrd(0x30+c%10);//顯示結(jié)果的最后一位在0x4f的位置                                                         c=c/10;//取前面的結(jié)果數(shù)據(jù)                                                         }                                                 lcdwrd(0x3d); //顯示等于號(hào)=                                                 a=0;                                                 b=0;                                                 flag=0;                                                 fuhao=0;//全部清除為0                                                 }                                         if(fuhao==4)                                         {                                                 k=0;                                                 lcdwrc(0x4f+0x80);                                                 lcdwrc(0x04);//設(shè)置光標(biāo)左移,屏幕不移動(dòng)                                     c=(long)(((float)a/b)*1000);//強(qiáng)制轉(zhuǎn)換為long。                                                 while(c!=0)         //一位一位顯示                                                 {                                                         k++;                                                         lcdwrd(0x30+c%10);//顯示結(jié)果的最后一位在0x4f的位置                                                         c=c/10;//取前面的結(jié)果數(shù)據(jù)                                                         if(k==3)                                                         {                                                                 lcdwrd(0x2e);       //選擇停止模式                                                                 k=0;                                                         }                                                                 }                                                 if(a/b<1)          //如果a比b小的話那么除的結(jié)果最高位是0                                                 {                                                         lcdwrd(0x30);                                                         }                                                 lcdwrd(0x3d); //顯示等號(hào)                                                 a=0;                                                 b=0;                                                 flag=0;                                                 fuhao=0; //全部清除為0                                         }                                         break;                  }         }  }    void main() {         lcdinit();         while(1)         {                 keyscan();                 } }
作者: 空靈的夜    時(shí)間: 2017-12-23 11:57
這是我做的一個(gè),你可以看一下




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 欧美男人天堂 | 精品成人免费视频 | 久久另类视频 | www.久 | 亚洲 91| 九九热精品在线 | 久久久美女 | 国产成人综合在线 | 欧美一级做a爰片免费视频 国产美女特级嫩嫩嫩bbb片 | 国内自拍视频在线观看 | 久艹av| 久久亚洲国产精品 | 日韩靠逼 | 九色网址| 久久综合狠狠综合久久 | 狠狠涩| 91大片| 盗摄精品av一区二区三区 | 欧美a级成人淫片免费看 | 亚洲在线 | 久久精品91久久久久久再现 | 色一情一乱一伦一区二区三区 | 色综合久| 久久久影院 | 日韩在线成人 | 国产亚洲精品美女久久久久久久久久 | 国产精品不卡视频 | 99精品网 | 欧美一级视频免费看 | 美女黄网| 中文字幕一区二区不卡 | 国产一区二区在线视频 | 国产精品亚洲综合 | 中文字幕在线视频精品 | 欧美日韩在线观看一区 | 蜜桃在线播放 | 日韩免费一区二区 | 国产精品久久久久不卡 | 欧美久久国产 | 日本精品裸体写真集在线观看 | h片在线看 |