久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
51單片機計算器程序
[打印本頁]
作者:
氧離子di
時間:
2021-7-13 16:06
標題:
51單片機計算器程序
2.png
(29.92 KB, 下載次數(shù): 96)
下載附件
2021-7-13 19:05 上傳
1. 一次只能計算兩數(shù);
2. +,-,*,/分別對應(yīng)P,-,H,d
3. 計算范圍[0,1000000)
4. 不支持負數(shù)運算
5. 小數(shù)只有兩位
6. 式子問題為ERROR
7. 溢出顯示OVER
單片機源程序如下:
/*
請看計算器4.0的說明Word
*/
#include <reg52.h>
#define GPIO_DIG P0
#define GPIO_KEY P1
typedef unsigned char uchar;
typedef unsigned int uint;
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
uchar code smg[]=
{
0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,
0x77,0x7c,0x39,0x5e,0x79,0x71
};
long Value1,Value2,Value3;
uchar a,b,c,x,minus,err,dian; //a是數(shù)字1的flag,b是數(shù)字2的flag,c是運算符的flag,x是運算符,minus是負號
void count(uchar);
void display(long);
void Keyscan(void);
void delay_ms(uint);
void delay_ms(uint n) //n毫秒
{
uint i=0,j=0;
for(i=0; i<n; i++)
for(j=0; j<123; j++);
}
void Keyscan()
{
uchar KeyValue;
GPIO_KEY=0xf0;
if(GPIO_KEY!=0xf0)
{
delay_ms(10);
if(GPIO_KEY!=0xf0)
{
switch(GPIO_KEY)
{
case 0x70:
KeyValue=3;
break;
case 0xb0:
KeyValue=2;
break;
case 0xd0:
KeyValue=1;
break;
case 0xe0:
KeyValue=0;
break;
}
GPIO_KEY=0x0f;
switch(GPIO_KEY)
{
case 0x0e:
break;
case 0x07:
KeyValue+=12;
break;
case 0x0b:
KeyValue+=8;
break;
case 0x0d:
KeyValue+=4;
break;
}
while(GPIO_KEY!=0x0f);
if(KeyValue<10)
{
if(a<7) //數(shù)字1
{
Value1=Value1*10+KeyValue;
b=7;
if(Value1!=0)
a++;
}
if(b<7) //數(shù)字2
{
Value2=Value2*10+KeyValue;
c=0;
if(Value2!=0)
b++;
}
}
else
{
a=7; //跳出數(shù)字1
b=0; //準備進數(shù)字2
c=1; //顯示運算符
switch(KeyValue)
{
case 10:
x=1;
break; //add
case 11:
x=2;
break; //reduce
case 12:
x=3;
break; //multiply
case 13:
x=4;
break; //divide
case 14:
b=7;
c=0;
count(x);
x=5;
break; //equal
case 15:
a=0;
b=0;
x=0;
c=0;
minus=0;
err=0;
dian=0;
Value1=0;
Value2=0;
Value3=0;
break; //Zero
}
}
}
}
}
void display(long Temp)
{
uchar wei[7],n;
wei[0]=Temp%10; //個位
wei[1]=Temp/10%10;
wei[2]=Temp/100%10;
wei[3]=Temp/1000%10;
wei[4]=Temp/10000%10;
wei[5]=Temp/100000%10;
wei[6]=Temp/1000000%10; //第七位
if(c==1) //顯示運算符
{
switch(Temp)
{
case 1:
LSC=1;
LSB=1;
LSC=1;
GPIO_DIG=0x73;
break; //顯示P代表+
case 2:
LSC=1;
LSB=1;
LSC=1;
GPIO_DIG=0X40;
break; //顯示-代表-
case 3:
LSC=1;
LSB=1;
LSC=1;
GPIO_DIG=0x76;
break; //顯示H代表*
case 4:
LSC=1;
LSB=1;
LSC=1;
GPIO_DIG=0X5e;
break; //顯示d代表/
}
}
else if(err==1)
{
for(n=0; n<5; n++) //error
{
switch(n)
{
case 0:
LSC=1;
LSB=1;
LSA=1;
GPIO_DIG=0x70;
break;
case 1:
LSC=1;
LSB=1;
LSA=0;
GPIO_DIG=0x3f;
break;
case 2:
LSC=1;
LSB=0;
LSA=1;
GPIO_DIG=0x70;
break;
case 3:
LSC=1;
LSB=0;
LSA=0;
GPIO_DIG=0x70;
break;
case 4:
LSC=0;
LSB=1;
LSA=1;
GPIO_DIG=0x79;
break;
}
delay_ms(4);
GPIO_DIG=0x00;
}
}
else if(Temp>9999999) //over
{
for(n=0; n<4; n++)
{
switch(n)
{
case 0:
LSC=1;
LSB=1;
LSA=1;
GPIO_DIG=0x70;
break;
case 1:
LSC=1;
LSB=1;
LSA=0;
GPIO_DIG=0x7b;
break;
case 2:
LSC=1;
LSB=0;
LSA=1;
GPIO_DIG=0x3e;
break;
case 3:
LSC=1;
LSB=0;
LSA=0;
GPIO_DIG=0x3f;
break;
}
delay_ms(2);
GPIO_DIG=0x00;
}
}
else
{
if(minus==1)
{
GPIO_DIG=0x40;
LSC=0;
LSB=0;
LSA=0;
delay_ms(2);
GPIO_DIG=0x00;
}
if(Temp>999999) //第7位
{
LSC=0;
LSB=0;
LSA=1;
GPIO_DIG=smg[wei[6]];
delay_ms(2);
GPIO_DIG=0x00;
}
if(Temp>99999) //第6位
{
LSC=0;
LSB=1;
LSA=0;
GPIO_DIG=smg[wei[5]];
delay_ms(2);
GPIO_DIG=0x00;
}
if(Temp>9999) //第5位
{
LSC=0;
LSB=1;
LSA=1;
GPIO_DIG=smg[wei[4]];
delay_ms(2);
GPIO_DIG=0x00;
}
if(Temp>999) //第4位
{
LSC=1;
LSB=0;
LSA=0;
GPIO_DIG=smg[wei[3]];
delay_ms(2);
GPIO_DIG=0x00;
}
if(Temp>99||dian==2) //第3位
{
LSC=1;
LSB=0;
LSA=1;
GPIO_DIG=smg[wei[2]];
if(dian==2)
GPIO_DIG=0x80;
delay_ms(2);
GPIO_DIG=0x00;
}
if(Temp>9||dian==1) //第2位
{
LSC=1;
LSB=1;
LSA=0;
GPIO_DIG=smg[wei[1]];
if(dian==1)
GPIO_DIG=0x80;
delay_ms(2);
GPIO_DIG=0x00;
}
//第1位
{
LSC=1;
LSB=1;
LSA=1;
GPIO_DIG=smg[wei[0]];
delay_ms(2);
GPIO_DIG=0x00;
}
}
}
void count(uchar x)
{
uchar XiaoShu[2];
long YuShu;
switch(x)
{
case 1:
Value3=Value1+Value2;
break;
case 2:
if(Value1>=Value2)
Value3=Value1-Value2;
else
{
minus=1;
Value3=Value2-Value1;
}
break;
case 3:
Value3=Value1*Value2;
break;
case 4:
if(Value2==0) //error
err=1;
else
{
YuShu=(Value1*100)/Value2;
XiaoShu[0]=YuShu%10; //小數(shù)點后第2位
XiaoShu[1]=YuShu/10%10; //小數(shù)點后第1位
if(XiaoShu[0]!=0)
{
dian=2;
Value3=(Value1*100)/Value2;
}
else if(XiaoShu[1]!=0)
{
dian=1;
Value3=(Value1*10)/Value2;
}
else
{
dian=0;
Value3=Value1/Value2;
}
}
break;
case 0:
break;
}
}
void main()
{
while(1)
{
Keyscan();
if(x==0) //運算符判斷是否數(shù)字1跳出
display(Value1);
else if(0<x&&x<5) //進入數(shù)字2
{
if(c==1) //該顯示運算符flag
display(x);
else
display(Value2);
}
else
{
if(err==1)
display(err);
else
display(Value3);
}
}
}
復(fù)制代碼
Keil工程文件51hei提供下載:
計算器4.0.7z
(35.6 KB, 下載次數(shù): 13)
2021-7-13 16:05 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
日韩在线一区二区
|
国产免费一区二区三区免费视频
|
亚洲精品久久久久久久久久久久久
|
tube国产
|
xxxxxx国产
|
在线高清免费观看视频
|
国产成人免费视频网站高清观看视频
|
91精品国产综合久久小仙女图片
|
久草影视在线
|
成人三级影院
|
2018中文字幕第一页
|
自拍视频网
|
www成人免费视频
|
久久精品国产一区老色匹
|
亚洲一区二区免费视频
|
一级做a爰片久久毛片免费看
|
激情久久av一区av二区av三区
|
国产精品入口久久
|
亚洲一区二区电影在线观看
|
成人免费在线小视频
|
国产午夜视频
|
久久久久久久久一区
|
亚洲成人动漫在线观看
|
色狠狠一区
|
欧美精品电影一区
|
精品福利在线
|
午夜爱爱毛片xxxx视频免费看
|
日本人和亚洲人zjzjhd
|
亚洲一区成人
|
国产精品美女久久久久久免费
|
www.99热这里只有精品
|
中文字幕亚洲区一区二
|
日本 欧美 三级 高清 视频
|
日韩高清一区二区
|
欧美一级久久精品
|
精品视频在线免费观看
|
www.788.com色淫免费
|
午夜欧美一区二区三区在线播放
|
三级黄色片在线观看
|
中文字幕乱码视频32
|
黄网站在线观看
|