找回密码
 注册会员
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

大家帮忙看下,程序该怎么修改,51单片机LED显示问题,谢谢

[复制链接]
admin 发表于 2012-9-3 02:34:19 | 显示全部楼层 |阅读模式

本文包含原理图、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;

}

}
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2024-11-23 17:15 , Processed in 0.059896 second(s), 12 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表