本文包含原理图、PCB、源代码、封装库、中英文PDF等资源
您需要 登录 才可以下载或查看,没有账号?注册会员
×
#include<reg52.h>
#include<stdio.h>
#define uchar unsigned char
#define uint unsigned int
sbit K1=P1^0;
sbit K2=P1^1;
sbit K3=P1^2;
uint count;
uchar code show[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar code disp[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uchar data disdata[8];
void delayms(uint i)
{
uint a,b;
for(a=0;a<i;a++)
for(b=0;b<120;b++);
}
void diplay()
{
uint i;
extern uint count;
disdata[0]=0x80;
disdata[1]=0xf8;
disdata[2]=0x82;
disdata[3]=0x92;
disdata[4]=0x99;
disdata[5]=0xb0;
disdata[6]=0xa4;
disdata[7]=0xf9;
for(i=0;i<count;i++)
{
P0=show[disdata];
P2=disp;
delayms(2);
}
}
void keyscan()
{
extern uint count;
if(K1==0)
{
delayms(10);
if(K1==0)
{
while (K1==0)
{
count++ ;
if(count>=8)
count=8;
}
}
else
count=count;
}
if(K2==0)
{
delayms(10);
if(K2==0)
{
while(K2==0)
{
count=count-1;
if(count<=0)
count=0;
}
}
else
count=count;
}
if(K3==0)
{
delayms(10);
if(K3==0)
{
while(K3==0)
{
count=0;
P0=0xc0;
P2=disp[0];
}
count=count;
}
else
count=count;
}
}
void main ()
{
while (1)
{
keyscan();
display();
}
}
这是我的程序 请工人帮忙看一下,我的目的是通过按键K1,K2,K3控制数码管。
按K1一次 为 1
按两次 为 21
一次类推 按8次 则为 87654321
K2按键 没按一次 在原有的基础上 少掉前一位
按K3则能清零 按一下则可以显示一位零
这个问题我做了很久 希望得到大家的帮助。谢谢!! |