蜂鸣器键盘七段LED显示器的自检程序设计单片机课程设计Word文件下载.docx
- 文档编号:19733431
- 上传时间:2023-01-09
- 格式:DOCX
- 页数:28
- 大小:528.76KB
蜂鸣器键盘七段LED显示器的自检程序设计单片机课程设计Word文件下载.docx
《蜂鸣器键盘七段LED显示器的自检程序设计单片机课程设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《蜂鸣器键盘七段LED显示器的自检程序设计单片机课程设计Word文件下载.docx(28页珍藏版)》请在冰豆网上搜索。
图P3.13-1
图P3.13-2
单片机上电复位时,P2口为高电平,SEL8有效及74HC245三态门状态为打开状态,此时可以采集键盘、拨盘信息。
SEL7有效关闭三态门。
K1-K4为仪表键盘(用户使用),SW1-SW4拨盘为自检开关,通过上拉电阻使K(SW)闭合为“0”打开为“1”。
3.14.电子秒表硬件编程框图及相关说明:
图P3.14-1
电子秒表硬件,主要是由键盘、51单片机、LED显示和译码器构成。
通过按键的不同切换,由译码器来选择字位,通过LED显示是、出来,完成改变电子秒表的跑表和计时的切换功能。
3.2.自检及其大程序的任务框图
3.21.蜂鸣器自检程序框图
此实验任务利用硬件蜂鸣器和软件编程实现两种以上声音,声音的波形为方波,通过改变通断蜂鸣器的延时时间来改变音调,但每一种声音的频率必须在人耳所能听到的频率之内,执行指令CLRP2.3后,P2.3为“0”,晶体管导通,蜂鸣器BEEP得电发声。
据此可以判断蜂鸣器电路时正确的。
注意:
如果蜂鸣器未带振荡器,要想让蜂鸣器产生声音必须要让晶体管按照一定的频率不断地导通、截止交互变化,即P2.3不断地输出“0”、“1”,输出的频率不同时,声音也不同。
如果蜂鸣器带振荡器,则只需控制其通断即可。
图P3.21-1
3.22.LED显示器自检程序框图
3.23.键盘自检程序框图
3.24.自选题目:
电子秒表程序框图
如自选题目所用到的硬件有LED、键盘、定时器,其中LED要提供不同的显示时间,只需在不同的内容上调用即可,显示需提供缓冲区,对于键盘应该有不同的定义,即跑表对键的定义秒表对秒表对键的定义,如何通过按键来改变不同的显示,为了提高运算效率,需用T0、T1两个计数器,改变T0的通断改变跑表的暂停、继续,秒表所用的T1只可改变其开通,只设定一次。
程序开始后,首先进行初始化,开启定时器T1,然后进入到秒表显示状态,然后在进行采键,若检测到K1按下,则调到跑表计时单元,若没有检测到K1按下,则时钟继续计时,并在数码管上显示出来。
若检测到K3按下,则对秒表进行复位。
通过定时器T0来控制时间,并在LED显示管上将时间显示出来。
之后再进行采键,若检测到K1按下,则调到跑表计时单元进行复位,并在数码管上显示出来。
若检测到K2键按下,跑表程序暂停,若检测到K3键按下,则跑表继续进行。
再检测K4键是否按下,若K4键按下,则跳回到秒表显示。
图P3.24-1
图P3.24-3
四.程序清单:
4.1.蜂鸣器自检程序
MOVR0,#20
MOVR1,#20
MOVR2,#20
LOOP1:
CLRP2.3;
蜂鸣器响
ACALLDELAY1;
调用延时
SETBP2.3;
蜂鸣器不响
ACALLDELAY1;
DJNZR0,LOOP1;
设置循环次数
LOOP2:
CLRP2.3
ACALLDELAY2
SETBP2.3
DJNZR1,LOOP2
LOOP3:
ACALLDELAY3
DJNZR2,LOOP3
AJMPBEEP
RET
DELAY1:
MOVR0,#2;
延时1ms
LOOP4:
MOVR3,#250
LOOP5:
DJNZR3,LOOP5
DJNZR0,LOOP4
DELAY2:
MOVR0,#4;
延时2ms
LOOP6:
MOVR3,#250
LOOP7:
DJNZR3,LOOP7
DJNZR0,LOOP6
DELAY3:
MOVR3,#250;
延时500us
LOOP8:
DJNZR3,LOOP8
4.2.LED自检程序
LED0:
SEL1:
CLRP2.5;
将第一位LED有效
CLRP2.6
CLRP2.7
ACALLLED;
调用LED子程序,逐段显示,以显示小数点结束,然后显示从0到9
SEL2:
CLRP2.5
SETBP2.7
ACALLLED
SEL3:
SETBP2.6
SEL4:
SEL5:
SETBP2.5
SJMPLED0;
跳转到LEDO程序
LED:
MOVA,#2H;
显示LED的a段
MOVP0,A
ACALLDELAY
MOVA,#4H;
显示LED的b段
MOVA,#8H;
显示LED的c段
MOVA,#10H;
显示LED的d段
MOVA,#20H;
显示LED的e段
MOVA,#40H;
显示LED的f段
MOVA,#80H;
显示LED的g段
MOVA,#1H;
显示LED的.段
MOVA,#7EH;
显示数字0
MOVA,#0CH;
显示数字1
MOVA,#0B6H;
显示数字2
MOVA,#9EH;
显示数字3
ACALLDELAY
MOVA,#0CCH;
显示数字4
MOVA,#0DAH;
显示数字5
MOVA,#0FAH;
显示数字6
MOVA,#0EH;
显示数字7
MOVA,#0FEH;
显示数字8
MOVA,#0DEH;
显示数字9
MOVA,#0FFH;
显示数字8.
DELAY:
MOVR1,#0FFH;
延时0.13s
LP5:
MOVR2,#0FFH
LP6:
DJNZR2,LP6
DJNZR1,LP5
LP7:
LP8:
DJNZR2,LP8
DJNZR1,LP7
LP9:
MOVR2,#0FFH
LP10:
DJNZR2,LP10
DJNZR1,LP9
RET
4.3.键盘自检程序
KEY:
ACALLKEYIN;
读键
CPLA;
将采集的A取反
JZKEY;
没有按键,跳回
ANLA,#0FH;
将拨盘屏蔽
ACALLTIME1;
有按键,延时10ms去抖动
在按键
CPLA
ANLA,#0FH
JZKEY
RRCA;
判断是否为K1按下
JCKEY1;
有进位则K1按下,跳到KEY1
RRCA
JCKEY2
JCKEY3
JCKEY4
KEYIN:
MOVP0,#0H;
关闭LED显示
ACALLSEL8;
打开三态门
MOVP1,#0FFH;
设置P1为输入口
MOVA,P1;
采集键盘和拨盘的状态
ACALLSEL7;
关闭三态门
TIME1:
MOVR1,#50;
LP1:
MOVR2,#200
LP2:
DJNZR2,LP2
DJNZR1,LP1
TIME2:
MOV10H,#100;
延时1s
D0:
ACAllDELAY10MS
DJNZ10H,D0
DELAY10MS:
MOVR7,#10;
延时10ms
LO1:
MOVR6,#250
LO2:
DJNZR6,LO2
DJNZR7,LO1
RET
KEY1:
ACALLBEEP1;
调用BEEP1子程序
ACALLSEL2;
位选最高位
MOVR0,#0CH
MOVP0,R0;
将1的七段码送到P0口
ACALLTIME2
SJMPKEY
KEY2:
ACALLBEEP2
ACALLSEL3
MOVR0,#0B6H
将2的七段码送到P0口
KEY3:
ACALLBEEP3
ACALLSEL4
MOVR0,#9EH
将3的七段码送到P0口
KEY4:
ACALLBEEP4
ACALLSEL5
MOVR0,#0CCH
将4的七段码送到P0口
CLRP2.5
SEL5:
SETBP2.5
SEL7:
SEL8:
BEEP1:
MOVR2,#200;
设置循环次数为200次
CLRP2.3;
喇叭响
ACALLDELAY1
喇叭停
DJNZR2,LP5;
判断循环次数是否为零
RET
MOVR6,#100;
延时200us
D1:
DJNZR6,D1
BEEP2:
CLRP2.3
ACALLDELAY2
DJNZR2,LP6
MOVR6,#150;
延时300us
D2:
DJNZR6,D2
BEEP3:
LP7:
DJNZR2,LP7
DELAY3:
MOVR6,#200;
延时400us
D3:
DJNZR6,D3
BEEP4:
ACALLDELAY4
DJNZR2,LP8
DELAY4:
MOVR6,#250;
延时500us
D4:
DJNZR6,D4
4.4.电子秒表程序
;
-------------------------
定义秒表和跑表的存储单元
MBEQU40H;
跑表数值
PBEQU50H;
秒表数值单元
定义中断和主程序存储单元
ORG0000H
AJMPMAIN
ORG000BH;
T0中断地址
AJMPTIME0
ORG001BH;
T1中断地址
AJMPTIME1
ORG0030H
主程序
MAIN:
MOVTMOD,#11H;
置定时器T0为工作方式1
QJ:
LCALLJP;
采键
JZSTA2
JBACC.0,STA1;
K1键按下,则跳到STA1执行跑表功能
JBACC.3,STA2;
K4键按下,则跳到STA2执行分钟显示功能
SJMPQJ
跑表程序
STA1:
MOVR0,#MB;
计时器清零
MOVA,#00H
CLR1:
MOV@R0,A
INCR0
CJNER0,#49H,CLR1
SETBEA;
CPU开中断
GO:
SETBET0;
定时器T0开中断
SETBTR0;
启动定时器T0
DISP1:
R0指向40H单元
CALLJP;
采集键盘的状态
JBACC.1,STOP;
K2键按下,则暂停跑表功能
JBACC.2,GO;
K3键按下,则继续执行跑表功能
JBACC.3,DISP2;
CALLSEL5
CALLAA
CALLSEL4
INCR0;
R0指向41H单元
CALLSEL3
R0指向42H单元
CALLBB
CALLSEL2
R0指向43H单元
SJMPDISP1
STOP:
CLRET0;
关闭定时器TO的中断
秒表程序
STA2:
MOVR1,#PB;
CLR2:
MOV@R1,A
INCR1
CJNER1,#59H,CLR2
SETBTR1;
启动定时器T1
SETBET1;
定时器T1开中断
DISP2:
MOVR1,#PB+2;
R1指向52H单元
JBACC.2,STA2;
K3按下的话,复位
AJMPXIANSHI;
显示秒表
XIANSHI:
CALLAA1
INCR1;
R1指向53H单元
R1指向54H单元
CALLBB1
R1指向55H单元
AJMPDISP2
显示子程序
AA:
MOVP0,#00H;
关显示
CALLDELAY1;
延时5MS
MOVA,@R0;
把RO指向的地址单元的内容送给A
MOVDPTR,#TAB1;
DPTR指向表TAB1的首地址
MOVCA,@A+DPTR;
取出表中对应的字型送给A寄存器
MOVP0,A;
将字型送P0口显示
CALLDELAY;
延时1MS
AA1:
MOVA,@R1;
把R1指向的地址单元的内容送给A寄存器
BB:
MOVDPTR,#TAB2;
DPTR指向表TAB2的首地址
BB1:
键采集程序
JP:
CALLSEL8;
打开三态门
MOVP1,#0FFH;
置P1口为输入口
MOVA,P1;
CALLSEL7;
关闭三态门
CPLA
ANLA,#0FH
定时中断0控制跑表程序
TIME0:
PUSHACC;
保护A寄存器
MOVTH0,#0D8H;
重置定时器TO的初值10MS
MOVTL0,#0EFH
INCMB;
10MS计数器加1,存放到40H单元中
MOVA,MB
CJNEA,#10,TEND;
10MS计数器的值不等于10,
;
即不到100MS,则跳到TEND中断返回
MOVMB,#00H;
10MS计数器清零
INCMB+1;
100MS计数器加1,存放到41H单元中
MOVA,MB+1
100MS计数器的值不等于10,即不到1S,则跳到TEND中断返回
MOVMB+1,#00H;
100MS计数器清零
INCMB+2;
1S计数器加1,存放到42H单元中
MOVA,MB+2
1S计数器的值不等于10,即不到10S,则跳到TEND中断返回
MOVMB+2,#00H;
1S计数器清零
INCMB+3;
10S计数器加1,存放到43H单元中
MOVA,MB+3
CJNEA,#6,TEND;
10S计数器的值不等于10,即不到100S,则跳到TEND中断返回
MOVMB+3,#00H;
10S计数器清零
TEND:
POPACC;
恢复A寄存器
RETI;
中断服务子程序结束返回
定时中断1控制秒表程序
MOVTH1,#3CH;
重置T1初值50MS
MOVTL1,#0AFH
INCPB;
(50H)+1
MOVA,PB
CJNEA,#2,TEND1;
(50H)不等于2,则跳到中断返回
MOVPB,#00H;
50MS计数器清零
INCPB+1;
(51H)+1
MOVA,PB+1
CJNEA,#10,TEND1;
100MS计数器的值不等于1,即不到1S,则跳到TEND1中断返回
MOVPB+1,#00H;
INCPB+2;
100MS计数器加1,存放到52H单元中
MOVA,PB+2
1S计数器的值不等于10,即不到10S,则跳到TEND1中断返回
MOVPB+2,#00H;
INCPB+3;
10S计数器加1,存放到53H单元中
MOVA,P
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 蜂鸣器 键盘 LED 显示器 自检 程序设计 单片机 课程设计