四位LED数码管编程Word文件下载.docx
- 文档编号:3540364
- 上传时间:2023-05-01
- 格式:DOCX
- 页数:16
- 大小:17.57KB
四位LED数码管编程Word文件下载.docx
《四位LED数码管编程Word文件下载.docx》由会员分享,可在线阅读,更多相关《四位LED数码管编程Word文件下载.docx(16页珍藏版)》请在冰点文库上搜索。
//蜂鸣器01开关
ucharkey;
//键顺序吗
ucharfun=10;
//功能状态,<
=MAXFUN
ucharit0=0,it1;
//Timer0中断计数
uchartext=0;
//数字
//uchartext_ctrl[4]={0xFE,0xFD,0xFB,0xF7};
//位选通值,11111110,11111101,11111011,11110111
uchartext_ctrl[4]={0xE,0xD,0xB,0x7};
//位选通值,00001110,00001101,00001011,00000111
//uchartext_code[11]={0x28,0x7E,0xA2,0x62,0x74,0x61,0x21,0x7A,0x20,0x60,0xff};
//0,1,2,3,4,5,6,7,8,9,关显示,数码管码表,高电平有效
//uchartext_code[17]={0x28,0x7e,0xa2,0x62,0x74,0x61,0x21,0x7a,0x20,0x60,0x30,0x25,0xa9,0x26,0xa1,0xb1};
//数码管代码
uchartext_code[11]={0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xF6,0xff};
uchartext_index=0;
//当前显示第几个
uchardis_buf[4];
//显示缓存
ucharrefresh=0;
//刷新否T1蜂鸣
ucharmin=0;
//minutes
ucharsec=0;
//scconds
ucharhour=0;
ucharonsetup=0;
ucharkeydown0=0,keydown1=0;
uchardataPWM=0xFf;
//PWM值增加,则占空比减小,LED灯渐暗。
/*****************************************************/
//延时子程序
voiddelay0(ucharx)//x*0.14MS
{
uchari;
while(x--)
for(i=0;
i<
13;
i++){}
}
//T1蜂鸣
voidbeepT1()
if(refresh>
0)
{
refresh++;
bee=!
bee;
if(refresh>
=30)
refresh=0;
}
//文字输出
voidtextout()
//P0=0xff;
//先关闭所有数码管
P2=dis_buf[text_index];
//传入数字的码
bee=bee<
<
4;
P0=text_ctrl[text_index]|bee;
//选择位
//P0=bee;
text_index++;
//下一位
if(text_index>
=4)
text_index=0;
//键扫描子程序
voidkeyscan(void)
uchartemp;
key=-1;
//不按键
P1=0x0F;
//低四位输入
delay0(12);
temp=P1;
//读P1口
temp=temp&
0x0F;
temp=~(temp|0xF0);
if(temp==1)
key=0;
elseif(temp==2)
key=1;
elseif(temp==4)
key=2;
elseif(temp==8)
key=3;
else
key=16;
P1=0xF0;
//高四位输入
0xF0;
temp=~((temp>
>
4)|0xF0);
key=key+0;
key=key+4;
key=key+8;
key=key+12;
if(key!
=-1)
fun=key;
//key=0;
//dis_buf=text_code[key];
//查表得键值
//判断键是否按下
intkeydown(void)
{
P1=0xF0;
if(P1!
=0xF0)
keyscan();
//delay0(250);
return1;
//
//beep();
//while(P1!
=0xF0);
//等待键释放
return0;
}
//设置显示缓存
voidsettext(uchartext0,uchartext1,uchartext2,uchartext3)
dis_buf[0]=text_code[text0];
dis_buf[1]=text_code[text1];
dis_buf[2]=text_code[text2];
dis_buf[3]=text_code[text3];
//fun10
//秒表mm:
ss
voidfun10()
it0++;
if(it0==20)//1s
it0=0;
sec++;
if(sec==60)
{
sec=0;
min++;
if(min==60)
{
min=0;
}
}
refresh=1;
dis_buf[1]=text_code[min%10];
dis_buf[0]=text_code[min/10];
dis_buf[3]=text_code[sec%10];
dis_buf[2]=text_code[sec/10];
//fun11
//时钟hh:
mm
voidfun11()
if(it0==20)//1s
hour++;
if(hour==12)
{
hour=0;
}
//dis_buf[1]=text_code[hour%10];
//dis_buf[0]=text_code[hour/10];
refresh=1;
}dis_buf[1]=text_code[hour%10];
dis_buf[0]=text_code[hour/10];
dis_buf[3]=text_code[min%10];
dis_buf[2]=text_code[min/10];
//fun12
//倒计时
voidfun12()
if(it0==20)//0.1s
sec--;
//secmust>
=1
if(sec==0)
sec=60;
min--;
//dis_buf[1]=text_code[min%10];
//dis_buf[0]=text_code[min/10];
if(min==0)
min=60;
//fun13
//设置时间:
hh:
voidfun13()
onsetup=1;
sec=0;
min=0;
hour=0;
dis_buf[1]=text_code[min%10];
dis_buf[0]=text_code[min/10];
dis_buf[3]=text_code[sec%10];
dis_buf[2]=text_code[sec/10];
//fun3
voidfun130()
if(keydown1!
=keydown0)
keydown0=keydown1;
if(keydown1==0)return;
//按键弹起
if(onsetup==1)
hour=key*10;
elseif(onsetup==2)
hour+=key;
elseif(onsetup==3)
min=key*10;
elseif(onsetup==4)
min+=key;
onsetup++;
dis_buf[1]=text_code[hour%10];
dis_buf[0]=text_code[hour/10];
dis_buf[3]=text_code[min%10];
dis_buf[2]=text_code[min/10];
//fun14
//设置
voidfun14()
//定时器0中断服务程序,用于数码管的动态扫描
//T0定时器,50ms激发一次,间隔1秒执行一次输出(需要20次)
voidtimer0()interrupt1
//TR1=0;
TH0=V_TH0;
//1ms延时常数
TL0=V_TL0;
//频率调节
//TH1=PWM;
//TR1=1;
keydown1=keydown();
//if(keydown1!
=keydown0)
if(fun<
=9)
fun130();
else
switch(fun)
case10:
fun10();
break;
case11:
fun11();
case12:
fun12();
case13:
fun13();
case14:
fun14();
default:
//定时器1中断服务程序,用于数码管的动态扫描
//T1定时器,5ms激发一次,间隔5ms执行一次输出
voidtimer1()interrupt3
//TR1=0;
//处理一行
TH1=V_TH1;
TL1=V_TL1;
it1++;
//if(it1==200)
it1=0;
beepT1();
textout();
//系统初始化
//函数功能:
对系统进行初始化,包括定时器初始化和变量初始化*/
voidinit(void)
{
//变量初始化
bee=1;
P0=0xFF;
P2=0xFF;
text_index=0;
dis_buf[0]=text_code[0];
dis_buf[1]=text_code[0];
dis_buf[2]=text_code[0];
dis_buf[3]=text_code[0];
//定时器初始化/
TMOD=V_TMOD;
//延时常数
//延时常数
TH1=PWM;
//脉宽调节
TL1=0;
IE=0x82;
ET0=1;
//定时/计数器T0中断允许
ET1=1;
//定时/计数器T1中断允许
TR0=1;
//T0启动
TR1=1;
//T1启动*/
}
//主程序
//处理按键时加上了按键消抖
voidmain(void)
init();
//系统初始化
while
(1);
//连run()都没了
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- LED 数码管 编程