久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
51單片機計算器源程序 矩陣鍵盤 數碼管和lcd1602顯示
[打印本頁]
作者:
Fmaroon
時間:
2016-12-5 21:36
標題:
51單片機計算器源程序 矩陣鍵盤 數碼管和lcd1602顯示
0.png
(14.53 KB, 下載次數: 41)
下載附件
2016-12-6 00:34 上傳
下面是1602顯示的版本:
0.png
(307.53 KB, 下載次數: 56)
下載附件
2016-12-6 00:26 上傳
利用矩陣鍵盤和lcd1602顯示:
#include<reg51.h> //頭文件
typedef unsigned char uchar;
typedef unsigned int uint;
sbit RW=P3^5;
sbit RS=P3^6;
sbit E=P3^4;
long x=0,y=0,num=0;
uint aa,bb=0;
uchar key;
uchar code tab1[5]="ERROR";
uchar code tab2[8]="OVERFLOW";
//LCD1602液晶檢查忙碌子函數
void LCD1602_busy()
{
char i,x=0x80;
P0=0xff;
while(x&0x80)
{
RS=0;
RW=1;
E=1;
x=P0;
E=0;
for(i=0;i<10;i++);
}
E=0;
}
//LCD1602液晶寫命令子函數
void write_com(uchar com)
{
RS=0;
RW=0;
E=1;
P0=com;
E=0;
LCD1602_busy();
}
//LCD1602液晶寫數據子函數
void write_date(uchar date)
{
RS=1;
RW=0;
E=1;
P0=date;
E=0;
LCD1602_busy();
}
//LCD1602液晶初始化子函數
void LCD1602_init()
{
write_com(0x30);
write_com(0x30);
write_com(0x30);
write_com(0x38);
write_com(0x08);
write_com(0x01);
write_com(0x06);
write_com(0x0e);
}
//LCD1602液晶清屏子函數
void LCD1602_clear()
{
write_com(0x01);
}
//除數為處理子函數
void sfj1()
{
int i=0;
LCD1602_clear();
for(i=0;i<5;i++)
write_date(tab1[i]);
}
//數值溢出處理子函數
void sfj2()
{
int i=0;
LCD1602_clear();
for(i=0;i<8;i++)
write_date(tab2[i]);
}
//鍵值轉化為鍵盤上按鍵值子函數
char sfj3(int keycode)
{
switch(keycode)
{
case 0:
return '7';
break;
case 1:
return '4';
break;
case 2:
return '1';
break;
case 3:
return 'c';
break;
case 4:
return '8';
break;
case 5:
return '5';
break;
case 6:
return '2';
break;
case 7:
return '0';
break;
case 8:
return '9';
break;
case 9:
return '6';
break;
case 10:
return '3';
break;
case 11:
return '=';
break;
case 12:
return '/';
break;
case 13:
return '*';
break;
case 14:
return '-';
break;
case 15:
return '+';
break;
}
}
//LCD1602液晶顯示子函數
void display(long a)
{
long temp,b,c=-1;
int lenth=1,i,j;
LCD1602_clear();
if(a<0)
{
a=a*c;
write_date('-');
}
temp=a;
while((temp=temp/10)!=0)
{
lenth++;
}
for(i=lenth;i>0;i--)
{
b=1;
for(j=0;j<i-1;j++)
{
b=b*10;
}
write_date(0x30+a/b);
a=a%b;
}
}
//算術運算子函數
void sfj4()
{
if(bb)
{
switch(aa)
{
case 1:
x=x+y;
num=x;
if(num<134217728&&num>-134217728)
{
display(num);
}
else
sfj2();
break;
case 2:
x=x-y;
num=x;
if(num<134217728&&num>-134217728)
{
display(num);
}
else
sfj2();
break;
case 3:
x=x*y;
num=x;
if(num<134217728&&num>-134217728)
{
display(num);
}
else
sfj2();
break;
case 4:
if(y==0)
sfj1();
else
{
x=x/y;
num=x;
if(num<134217728&&num>-134217728)
{
display(num);
}
else
sfj2();
}
break;
}
y=0;
}
}
//主函數
void main()
{
EA=1;
EX0=1;
IT0=1;
P2=0xff;
display(0);
LCD1602_init();
write_date(0x30);
while(1)
{
}
}
//外部0中斷處理子函數
void wb0() interrupt 0 using 0
{
key=sfj3(P2&0x0f);
if(key<='9'&&key>='0') //判斷按下的鍵是否為數值
{
num=num*10+(key-'0');
if(aa>0)
{
y=num;
bb=1;
}
else
x=num;
if(num<134217728&&num>-134217728) //當前數值是否超出限定范圍
{
display(num);
}
else
sfj2();
}
else
{
switch(key)
{
case 'c':
x=0;
y=0;
num=0;
bb=0;
aa=0;
display(num);
break;
case '=':
sfj4();
bb=0;
aa=0;
num=0;
break;
case '+':
if(aa)
sfj4();
aa=1;
num=0;
break;
case '-':
if(aa)
sfj4();
aa=2;
num=0;
break;
case '*':
if(aa)
sfj4();
aa=3;
num=0;
break;
case '/':
if(aa)
sfj4();
aa=4;
num=0;
break;
}
}
}
復制代碼
下載:
51單片機簡易計算器.rar
(50.24 KB, 下載次數: 66)
2016-12-6 00:34 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
shenqiang
時間:
2016-12-20 13:21
有點難啊
作者:
shenqiang
時間:
2016-12-20 13:56
樓主在不?求教。QQ278959526
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
国产精品黄视频
|
自拍第1页
|
黑人巨大精品欧美一区二区免费
|
91色视频在线观看
|
欧美一区二区网站
|
国产精品免费一区二区三区四区
|
97免费在线视频
|
一区精品在线观看
|
国产精品久久久久久久久久久久久
|
成人福利在线观看
|
国产真实精品久久二三区
|
久久久久久久久久久久久91
|
91社区在线高清
|
我爱操
|
在线一区
|
一区二区中文字幕
|
伊人国产精品
|
亚洲精品视频在线
|
亚洲精品二区
|
久久久久国产一区二区三区
|
91在线视频免费观看
|
97精品超碰一区二区三区
|
国产成人影院
|
国产在线拍偷自揄拍视频
|
国产日韩欧美激情
|
亚洲精品在线播放
|
国产精品国产三级国产aⅴ入口
|
免费在线观看h片
|
国产成人一区二区三区
|
亚洲国产欧美国产综合一区
|
国产精品成av人在线视午夜片
|
亚洲毛片在线观看
|
精品熟人一区二区三区四区
|
岛国av一区二区三区
|
精品毛片
|
国产精品久久久久久久久久妇女
|
九九热这里
|
国产精品区二区三区日本
|
亚洲成人免费视频
|
欧美激情精品久久久久久
|
有码一区
|