全新论坛MCU智学网上线,欢迎访问新论坛!稀缺资源、技术干货、参考设计、原厂资料尽在MCU智学网
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

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

[复制链接]
1837 0

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
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;

}

}

举报

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

本版积分规则

打开支付宝扫一扫,最高立得1212元红包
搜索

图文热点

更多

社区学堂

更多

客服中心

QQ:187196467 服务时间:周一至周日 8:30-20:30

关注我们

关于我们
关于我们
友情链接
联系我们
帮助中心
网友中心
购买须知
支付方式
服务支持
资源下载
售后服务
定制流程
关注我们
官方微博
官方空间
官方微信
快速回复 返回顶部 返回列表