标题:
摁第一个键,数码管第一位显示加数1. 摁第二个键,选择加法 摁第三个键,数码管第...
[打印本页]
作者:
春天的花蕊
时间:
2017-3-25 14:03
标题:
摁第一个键,数码管第一位显示加数1. 摁第二个键,选择加法 摁第三个键,数码管第...
#include<reg52.h> #include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
uchar jia,dengyu,qian,hou,gongneng,yunsuan,key;
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void display(int num)
{
uchar ge,shi;
switch(num)
{
case 1:dula=0;
P0=table[key];
dula=1;
wela=0;
P0=0xef;
wela=1;
delayms(5);
break;
case 2:dula=0;
P0=table[key];
dula=1;
dula=0;
wela=0;
P0=0xdf;
wela=1;
delayms(5);
case 3:dula=0;
P0=table[key];
dula=1;
dula=0;
wela=0;
P0=0xbf;
wela=1;
delayms(5);
case 4:ge=key/10;
shi=key%10;
dula=0;
P0=table[ge];
dula=1;
dula=0;
wela=0;
P0=0xfe;
wela=1;
delayms(5);
dula=0;
P0=table[shi];
dula=1;
dula=0;
wela=0;
P0=0xfd;
wela=1;
delayms(5);
}
}
void matrixkeyscan()
{
int temp;
P3=0xfe;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delayms(5);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xee:key=1;break;
case 0xde:key=2;break;
case 0xbe:key=3;break;
case 0x7e:key=4;break;
}
while(temp!=0xf0) //等待按键释放
{
temp=P3;
temp=temp&0xf0;
}
}
}
delayms(5);
P3=0xfd;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delayms(5);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xed:key=5;break;
case 0xdd:key=6;break;
case 0xbd:key=7;break;
case 0x7d:key=8;break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}
delayms(5);
P3=0xfb;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delayms(5);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xeb:key=9;break;
case 0xdb:key=0;break;
case 0x7b:key=dengyu;break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}
delayms(5);
P3=0xf7;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delayms(5);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xe7:key=jia;break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}
}
void main()
{
while(1)
{
matrixkeyscan();//不停用键盘扫描程序
gongneng=jia|dengyu;
if(gongneng==0)
{
qian=key;
display(1);
}
yunsuan=jia;
if(yunsuan==1)
{
display(2);
}
if(gongneng==0)
{
hou=key;
display(3);
}
if(dengyu==1)
{
hou=qian+hou;
display(hou);
}
}
}
复制代码
作者:
春天的花蕊
时间:
2017-3-25 14:04
我的显示根本就不对 是哪里错了请大神们指教
作者:
cjjcjj1
时间:
2017-3-25 14:30
提示:
作者被禁止或删除 内容自动屏蔽
作者:
春天的花蕊
时间:
2017-3-25 15:04
cjjcjj1 发表于 2017-3-25 14:30
你的具体功能要求是什么?
摁第一个键,数码管第一位显示加数1.
摁第二个键,选择加法
摁第三个键,数码管第三位显示加数2
紧接着数码管后两位显示和
作者:
cjjcjj1
时间:
2017-3-25 15:08
提示:
作者被禁止或删除 内容自动屏蔽
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1