本文包含原理图、PCB、源代码、封装库、中英文PDF等资源
您需要 登录 才可以下载或查看,没有账号?注册会员
×
51单片机扫描4X4键盘,在四位LED上显示相应数字或字母,我只能让四位LED一起亮,一起变,改了很久还是改不对,如何让一位一位亮,例如
按1
四位LED显示1000
然后按2
四位LED显示1200
然后按3
四位LED显示1230
然后按四
显示1234
然后循环
我觉得主要要修改主函数部分以下是程序,希望得到高手指点,谢谢
#include <reg51.h>
#include <intrins.h>
#define p0 P0
#define p1 P1
#define p2 P2
#define uchar unsigned char
#define uint unsigned int
sbit BEEP = P3^4; //蜂鸣器驱动线
static uchar code ledcode[]=
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x81};
void delay(uchar x)
{ uchar i;
while(x--)
{ for(i=0;i<200;i++)
{;}
}
}
void beep() /*蜂鸣器部分*/
{
uchar i;
for (i=0;i<100;i++)
{
delay(1);
BEEP=0;
}
BEEP=1; //关闭蜂鸣器
delay(10);
}
uchar keyscan()
{
uchar tmp, i,line=0,row=0,key;
p1=0x0f;
tmp=p1;
if(tmp!=0x0f) /*判断是不是有按键*/
{
beep();
tmp=tmp&0x0f; /*判断列数*/
for(i=0;i<4;i++)
{
if((tmp&0x01)!=0)
{
tmp=tmp>>1;
line++;
}
}
p1=0xf0; /*判断行数*/
tmp=p1;
tmp=tmp&0xf0;
tmp=tmp>>4;
for(i=0;i<4;i++)
{
if((tmp&0x01)!=0)
{
tmp=tmp>>1;
row++;
}
}
key=line*4+row; /*确定按键位置*/
}
return(key);
}
//--------------以下为主程序,我觉得要修改这里----------
void main()
{
while(1)
{
p0=ledcode[keyscan()];
p2=0x0f;
}
} |
|