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

四位LED动态扫描显示

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

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

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

×
·这是一个LED使用的例子,使用四位LED显示一个数。
·T1用于动态扫描,时间以稳定显示为准。本程序已经实物调过了。
·下面是源程序及一些说明 更多源码及教程请到http://www.bqmcu.com.cn

#include
#include
#define LedDataOut P2 //数据口
#define LedBitOut P3 //LED位选口
unsigned char code table[]={0x3f,0x06,0x5b,0x4f, //用于数码管显示的码表
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c, //分别表示字符:0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F
0x39,0x5e,0x79,0x71};
unsigned char code LEDbit[]={0x10,0x20,0x40,0x80};
unsigned char LEDBUF[4]; //这个数组用于记录要显示的数据
unsigned int LEDcount=0;
void initTimer(void) //定时器初始化
{
TMOD=0x00;
TH1=0xd1;
TL1=0x10;
}
void timer1(void) interrupt 3 //T1定时器中断,用于LED显示的动态扫描
{
LedDataOut=~table[LEDBUF[LEDcount]]; //送字段
LedBitOut=~LEDbit[LEDcount]; //送字位
if(LEDcount<4) LEDcount++; //共显四位
else LEDcount=0;
TH1=0xd1; //重载初值
TL1=0x10;
}
void main(void){
unsigned int AdValue=0;
unsigned int i=0;
unsigned int j=0;
initTimer();
TR0=1;
ET0=1;
TR1=1;
ET1=1;
EA=1;
AdValue=9999;
while(1){ //下面是将一个数各位分离出来存入到数组LEDBUF中
LEDBUF[3]=AdValue%10; //取余得最高位
AdValue=AdValue/10;
LEDBUF[2]=AdValue%10;
AdValue=AdValue/10;
LEDBUF[1]=AdValue%10;
AdValue=AdValue/10;
LEDBUF[0]=AdValue%10;
AdValue=AdValue/10;
for(j=0;j<32700;j++) _nop_(); //这个只是为了延时,
if(i<9999) i++;
else i=0;
AdValue=i;
}
}
·下面是仿真实例

·下面是整个实例的下载(Proturs中是仿真文件)
2007622225558175.rar
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

GMT+8, 2024-12-24 02:42 , Processed in 0.061443 second(s), 10 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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