久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
51單片機簡單計算器用數碼管顯示
[打印本頁]
作者:
liuda
時間:
2015-1-21 22:03
標題:
51單片機簡單計算器用數碼管顯示
是用51hei單片機開發板 電路圖詳見:
http://www.zg4o1577.cn/f/51hei-5.pdf
的數碼管部分, 用2個74hc573 鎖存,p0口作為數據口 ,p3.6和p3.7分別是段和位的鎖存端口.
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P3^6;//573段選使能
sbit wela=P3^7;//573位選使能
sbit beep=P3^4;//蜂鳴器
uchar temp,key;//按鍵變量
uchar fun;//加,減,乘,除,標志位
long int num1,num2,res;//num1與num2是2個要運算的變量,res是結果
uchar aa,dis;//aa 2個運算數標志位 dis 2個運算數與結果標志
uchar code table[]={0x00,0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//數碼管段碼
uchar code weixuan[]={0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//數碼管位碼
void delay(unsigned char i)//延時
{
uchar j,k;
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
void bee()//蜂鳴器
{
beep=0;
delay(255);
delay(255);
beep=1;
}
key_scan()//按鍵檢測
{
P1=0xfe;
temp=P1;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
if(temp!=0xf0)
{
temp=P1;
switch(temp)
{
case 0xee:
key=0;
break;
case 0xde:
key=1;
break;
case 0xbe:
key=2;
break;
case 0x7e:
key=3;
break;
}
while(temp!=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
}
}
P1=0xfd;
temp=P1;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
if(temp!=0xf0)
{
temp=P1;
switch(temp)
{
case 0xed:
key=4;
break;
case 0xdd:
key=5;
break;
case 0xbd:
key=6;
break;
case 0x7d:
key=7;
break;
}
while(temp!=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
}
}
P1=0xfb;
temp=P1;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
if(temp!=0xf0)
{
temp=P1;
switch(temp)
{
case 0xeb:
key=8;
break;
case 0xdb:
key=9;
break;
case 0xbb:
key=10;
break;
case 0x7b:
key=11;
break;
}
while(temp!=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
}
}
P1=0xf7;
temp=P1;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
if(temp!=0xf0)
{
temp=P1;
switch(temp)
{
case 0xe7:
key=12;
break;
case 0xd7:
key=13;
break;
case 0xb7:
key=14;
break;
case 0x77:
key=15;
break;
}
while(temp!=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
}
}
}
void Init()//初始化
{
num1=0;
num2=0;
wela=1;
P0=0xdf;
wela=0;
dula=1;
P0=table[1];
dula=0;
key=16;
aa=0;
dis=0;
res=0;
}
void dis_play(long int nm)//顯示函數
{
uchar a1,a6;//a1位段選變量,a6為位選變量
long int shu;
shu=nm;
if(shu==0)
{
wela=1;
P0=0xdf;
wela=0;
dula=1;
P0=table[1];
dula=0;
}
else
{
for(a6=0;a6<6;a6++)
{
a1=shu%10;//shu%10 shu比10小a1=shu本身
if(shu!=0)
{
a1=a1+1;
}
shu=shu/10;//shu/10 shu比10小 shu為0
P0=table[a1];
dula=1;
dula=0;
P0=weixuan[a6];
wela=1;
wela=0;
delay(5);
}
}
}
void display()//顯示選擇函數,dis 0或1顯示運算數,dis為2顯示結果
{
switch (dis)
{
case 0:{
dis_play(num1);
}
break;
case 1:{
dis_play(num2);
}
break;
case 2:{
dis_play(res);
}
break;
}
}
void shanshuo()//數碼管閃爍
{
wela=1;
P0=0xff;
wela=0;
delay(255);
}
void check()//運算函數
{
if(key!=16)
{
bee();
if(key>=10)
{
switch (key)
{
case 10:Init();break; // CE
case 11:{
switch (fun)//加,減,乘,除選擇標志位
{
case 0:res=num1+num2,dis=2;break;//加法
case 1:res=num1-num2,dis=2;break;//減法
case 2:res=num1*num2,dis=2;break;//乘法
case 3:res=num1/num2,dis=2;break;//除法
}
};break; // =
case 12:fun=0,aa=1,shanshuo();break; // +
case 13:fun=1,aa=1,shanshuo();break; // -
case 14:fun=2,aa=1,shanshuo();break; // *
case 15:fun=3,aa=1,shanshuo();break; // /
}
}
else
{
switch (aa)//運算變量賦值標志位
{
case 0:{
num1=num1*10+key;//把按鍵檢測到的值賦給num1運算變量1
};break;
case 1:{
dis=1;
num2=num2*10+key;//把按鍵檢測到的值賦給num2運算變量2
};break;
}
}
}
key=16;
}
void main()
{
Init();
while(1)
{
key_scan();
check();
display();
}
}
復制代碼
作者:
南天白云
時間:
2015-1-23 14:47
學習中
作者:
綠源學習者
時間:
2015-1-23 16:16
呵呵很好不過沒有仿真就不想用你的程序了
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
九一国产精品
|
亚洲av毛片成人精品
|
怡红院怡春院一级毛片
|
视频一区二区在线观看
|
国产精品亚洲一区
|
日韩一区二区三区精品
|
久久久久国产一区二区三区
|
亚洲成人国产综合
|
欧美一区二区视频
|
久久视频精品在线
|
尤物视频在线免费观看
|
亚洲成人三级
|
国产精品免费看
|
欧美精品久久久久
|
国产精品久久免费观看
|
欧美舔穴
|
久草青青
|
国产精品亚洲一区二区三区在线
|
一级做a爰片性色毛片16
|
超碰精品在线
|
成人欧美一区二区三区黑人孕妇
|
美女视频黄色片
|
日本一区二区视频
|
欧美一级片中文字幕
|
亚洲国产成人av好男人在线观看
|
国产传媒毛片精品视频第一次
|
七七婷婷婷婷精品国产
|
一区日韩
|
黄色在线免费观看
|
色综合天天天天做夜夜夜夜做
|
成人在线视频免费观看
|
欧美色图另类
|
欧美九九
|
日韩精品1区2区3区 国产精品国产成人国产三级
|
在线看亚洲
|
久久久久久国产精品免费免费狐狸
|
国产激情视频在线
|
欧美日韩高清免费
|
国产欧美精品一区
|
丝袜美腿一区二区三区
|
在线播放国产一区二区三区
|