蜂鸣器键盘七段LED显示器的自检程序设计单片机课程设计Word文件下载.docx

上传人:b****5 文档编号:19733431 上传时间:2023-01-09 格式:DOCX 页数:28 大小:528.76KB
下载 相关 举报
蜂鸣器键盘七段LED显示器的自检程序设计单片机课程设计Word文件下载.docx_第1页
第1页 / 共28页
蜂鸣器键盘七段LED显示器的自检程序设计单片机课程设计Word文件下载.docx_第2页
第2页 / 共28页
蜂鸣器键盘七段LED显示器的自检程序设计单片机课程设计Word文件下载.docx_第3页
第3页 / 共28页
蜂鸣器键盘七段LED显示器的自检程序设计单片机课程设计Word文件下载.docx_第4页
第4页 / 共28页
蜂鸣器键盘七段LED显示器的自检程序设计单片机课程设计Word文件下载.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

蜂鸣器键盘七段LED显示器的自检程序设计单片机课程设计Word文件下载.docx

《蜂鸣器键盘七段LED显示器的自检程序设计单片机课程设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《蜂鸣器键盘七段LED显示器的自检程序设计单片机课程设计Word文件下载.docx(28页珍藏版)》请在冰豆网上搜索。

蜂鸣器键盘七段LED显示器的自检程序设计单片机课程设计Word文件下载.docx

图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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1