资料详情

单片机模块应用设计系统

头像

51单片机

编号:4492


题目:单片机模块应用设计系统

一、目的任务

1、了解熟悉keill_v3开发工具和STC_ISP软件的使用

2、熟悉STC系列单片机的汇编语言及开发

3、熟悉嵌入式开发板的电路图及开发

二、设计原理

结合keill_v3开发工具和STC_ISP软件,使用STC10F08XE单片机,利用单片机的计时器,位操作和中断等功能,利用芯片SN74HC59,串口输入并口输出对PLTF-4561AS数码管等通信,从而实现显示数值,按键切换等功能,达到实验要求。

利用键盘反极法接受键盘对应键值,采用查询方式判断键盘按下情况,用查表和比较的方法将对应的LED灯编码查出,从而实现相应功能。

利用单片机外部中断源及及串口通信功能,通过外部中断INTO跳转到相应功能,采用单片机自发自接收模式,可以充分利用一个单片机的资源,将单片机最大限度利用起来,实现键盘键值输出,单片机接受并反映到显示器上。

本方案基于keill_v3开发环境,通过51单片机汇编语言的编辑,参考《单片机技术与工程实践》和STC10F08XE型号单片机datasheet,采用循环结构和中断方式实现数据交换,完成单片机题目功能的实现,

三、题目要求

模块要求:

1)设计一个可以显示9876的显示电路,并利用单片机实现。

2)利用按键切换,并将各个按键的值显示在数码管上

3)中断1按钮切换,设置自己电路板为自发自收类型,电路板识别所按的键盘值后,键盘值串口发送,自己串口接收后,然后在数码管上显示对应的键盘值。

4)中断2按钮切换,从电脑接收你的电话号码,并在数码管上滚屏显示。

四、设计方案

4.1 数码管显示9876

4.1.1 设计方案

由于数码管由74hc595控制,串口输入并口输出,故考虑将显示数字的电位信息保存在一个表中,经过芯片串口逐位输入信号,并由定时器控制移位脉冲,将8位信号全部保存在移位寄存器器中后,调用程序将其送入数码管,实现显示。数码管的译码部分可参考单片机课本。由于每个数码管要显示不同的数字,故考虑进行动态显示,即在短时间内每个数码管分别显示其相应的数字,并轮流循环显示,这需要建立一个表,表示每个数码管各自显示时P0口的状态,每次显示开始时赋给P0.由于每次显示时间很短,人眼中会看到四个数码同时显示相应的数字,从而完成其功能,其时间和循环控制也由同一个定时器辅助完成。

4.1.2 设计框图

4.2 设计方案

采用反极法获取键盘的读值,一开始置行线为0,列线为1,查询是否有键位电平变化,经过防抖程序后读取列值。再置行线为1,列线为0,执行重复的操作读取行值,将两次结果相与确定最终值,经过数据表翻译后送入控制数码管的p0口,显示相应数值。

4.3 设计方案

在第二问的基础上,将键盘经过表翻译的值送入sbuf,经过串口发送,串口接收,然后将SBUF的值送入P0口。

五、设计源代码   

1、设计一个可以显示9876的显示电路,并利用单片机实现:

org 0000H

ajmp main

org 000BH

ajmp lock

org 0040H

main: mov tmod,#02

mov th0,#0DFH

mov tl0,#0DFH

setb ea

setb et0

setb tr0

start: mov r4,#04H

now: mov r3,#0fH

mov a,r4

mov dptr,#table

movc a,@a+dptr

mov p0,a

mov a,r4

mov dptr,#table2

movc a,@a+dptr

there: cjne r3,#00H,there

djnz r4,now

ajmp start

table: db 00H

db 02H

db 04H

db 08H

db 01H

table2: db 00H

db 06FH

db 07FH

db 07H

db 7DH

lock: cpl p0.4

jb p0.4,next

rl a

mov c,acc.7

mov p0.7,c

next: djnz r3,send

setb p0.5

clr p0.5

send: reti

end

2、利用按键切换,并将各个按键的值显示在数码管上:

org 0000H

ajmp main

org 000bH

main: nop

keyl: mov p2,#0FH

mov a,p2

anl a,#0FH

cjne a,#0FH,kl1

ajmp keyl

kl1:lcall dly

mov a,p2

anl a,#0FH

cjne a,#0FH,kl2

ajmp keyl

kl2:mov r0,a

keyr:mov p2,#0F0H

mov a,p2

anl a,#0F0H

cjne a,#0F0H,kr1

ajmp keyr

kr1:lcall dly

mov a,p2

anl a,#0F0H

cjne a,#0F0H,kr2

ajmp keyr

kr2:orl a,r0

mov r0,a

ajmp check3

dly:mov r7,#30

dly1:mov r6,#150

dly2:djnz r6,dly2

djnz r7,dly1

ret

check3: mov a,#00H

mov r5,#00H

next3: mov a,r5

inc a

mov r5,a

mov dptr,#table3

movc a,@a+dptr

clr cy

subb a,r0

jnz next3

now: mov p0,#01h

mov r3,#0fh

mov dptr,#table2

mov a,r5

movc a,@a+dptr

dly3: mov r6,#20h

dly4: djnz r6,dly4

lock: cpl p0.4

jb p0.4,next

rl a

mov c,acc.7

mov p0.7,c

next: djnz r3,dly3

setb p0.5

clr p0.5

ajmp keyl

table2: db 00H

db 0F1H,0F9H,0DEH,0B9H,0FCH,0F7H,6FH,7FH,07H,7DH,6DH,66H,4FH,5BH,06H,3FH

table3: db 00H

db 0E7H,0D7H,0B7H,77H,0EBH,0DBH,0BBH,7BH,0EDH,0DDH,0BDH,7DH,0EEH,0DEH,0BEH,7EH

end

3、中断1按钮切换,设置自己电路板为自发自收类型,电路板识别所按的键盘值后,键盘值串口发送,自己串口接收后,然后在数码管上显示对应的键盘值:

org 0000H

ajmp main

org 0023H

ljmp keyl

org 0030H

main: mov scon,#50H

setb ea

setb ex0

ajmp $

keyl: mov p2,#0FH

mov a,p2

anl a,#0FH

cjne a,#0FH,kl1

ajmp keyl

kl1:lcall dly

mov a,p2

anl a,#0FH

cjne a,#0FH,kl2

ajmp keyl

kl2:mov r0,a

keyr:mov p2,#0F0H

mov a,p2

anl a,#0F0H

cjne a,#0F0H,kr1

ajmp keyr

kr1:lcall dly

mov a,p2

anl a,#0F0H

cjne a,#0F0H,kr2

ajmp keyr

kr2:orl a,r0

mov r0,a

ajmp check3

dly:mov r7,#30

dly1:mov r6,#150

dly2:djnz r6,dly2

djnz r7,dly1

ret

check3: mov a,#00H

mov r5,#00H

next3: mov a,r5

inc a

mov r5,a

mov dptr,#table3

movc a,@a+dptr

clr cy

subb a,r0

jnz next3

now: mov p0,#01h

mov r3,#0fh

mov dptr,#table2

mov a,r5

movc a,@a+dptr

mov pcon,#80H

mov tmod,#20H

mov th1,#0e6H

mov tl1,#0e6H

setb tr1

mov sbuf,a

jnb ti,$

clr ti

mov pcon,#80H

mov tmod,#20H

mov th1,#0e6H

mov tl1,#0e6H

setb tr1

jnb ri,$

clr ri

mov a,sbuf

dly3: mov r6,#20h

dly4: djnz r6,dly4

lock: cpl p0.4

jb p0.4,next

rl a

mov c,acc.7

mov p0.7,c

next: djnz r3,dly3

setb p0.5

clr p0.5

ajmp loop

table2: db 00H

db 0F1H,0F9H,0DEH,0B9H,0FCH,0F7H,6FH,7FH,07H,7DH,6DH,66H,4FH,5BH,06H,3FH

table3: db 00H

db 0E7H,0D7H,0B7H,77H,0EBH,0DBH,0BBH,7BH,0EDH,0DDH,0BDH,7DH,0EEH,0DEH,0BEH,7EH

loop:reti

end

六、实验结果与评估    

要求一:通过STC_ISP选定相关单片机型号,下载到单片机后,单片机成功显示9876,相关功能达成。

要求二:源程序下载到单片机后,按下不同的键位,LED显示屏上切换出不同的对应的数字,说明源码正确。

要求三:源程序下载到单片机后,把单片机改为自发自接收模式(用短接线将TXD接口和RXD接口连接起来),按下中断1键(INT0)后,按下单片机键盘按键,单片机成功发送并接收到数据并且将数据显示到LED显示屏上,说明源码正确。

七、实验反思与心得

此次微机系统与接口课程设计较为仓促,是在考试之后进行的,而且刚开始对于STC_ISP和μKeill的使用完全不了解,因此开始时进行的较为困难,而且对于STC10F08XE型单片机的结构不是特别了解,感觉难以下手。但是在参照AG嵌入式开发板和STC10F08X的图纸后,对于其结构有了一定的了解,再参考《单片机技术与工程实践》,使得对于此次课程设计有了一定的了解,第一天进展并没有太多,但是万事开头难,第二天我们便研发出来第一第二和第三个功能,给了我们很大的鼓舞和信心,由于我们还需要同时做c语言的课设,而且截止日期和微机课设的时间一样,所以整体做的比较赶,尽管答辩当天上午准备了一上午,并没有完全做出第四问的功能,只是实现了一部分。这几天总的来说还是比较忙和累的,但是每当看出代码转换成了相应的成果,内心就忘记了疲惫和焦虑。总的来说这次的课程设计让我学到了很多新的东西,也帮助我复习了之前相关的所学习的内容,所以收获还是很大的。通过这次课程设计,我学到了很多我感兴趣的知识,也学习到了很多工程实践中的技能和技巧。加深了我对单片机以及汇编语言的兴趣,我决定以后利用时间来多多学习相关的知识。感谢老师教授了我相关的知识,让我能够学习了很多的单片机知识,对于我完成本次单片机课设有了很大的帮助。这次的课程设计我认为很有意义,培养了我的思考能力,动手能力以及排除故障能力,对于我今后的职业生活也有很大的帮助

经过本次课程设计,我们重新拾起了本来不太牢固的单片编程及结构知识,经过反复琢磨,实践,最终实现所要求的大部分功能,圆满地完成了课设。本次课程设计将书本上的理论转化为了实践,让我真正感受到了唯有实践出真知。在本次课设前,我们对于单片机代码如何运用,如何将代码系统编程以达到所需功能感到无从下手,无所适从。而经过了这次课设的实战磨练,我们已经能在一定程度上运用单片机的各种基本功能,虽然这个过程充满着磨炼与坎坷,但是我们仍然坚持克服了下来。由于期末前没有什么时间,我们本次课设是在考试之后的一天半内完成的。虽然借着考试后的余温,但是过程仍比我们想象中的困难,但这也磨炼了我们的意志。

八、参考文献

《单片机技术与工程实践》林土胜著