1引言随着社会的发展、科技的进步以及人们生活水平的逐步提高,各种方便于生活的自动控制系统开始进入了人们的生活,在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构,以及针对具体应用对象特点的软件结合,加以完善,同时也标志了自动控制领域成为了数字化时代的一员。它实用性强,功能齐全,技术先进,使人们相信这是科技进步的成果。它更让人类懂得,数字时代的发展将改变人类的生活,将加快科学技术的发展。
2设计任务。
2.1 外部脉冲自动计数,自动显示。
2.1.1设计一个255计数器:0-255计数,计满后自动清0,重新计数(在数码管中显示)。
2.1.2设计一个50000计数器:0-50000计数,计满后自动清0,重新计数(在数码管中显示)。
2.2 设计一个出租车计费系统。
起步价为5元(2km以内),2km后,0.8元/0.5km;要求每500m刷新计费一次,在8位数码管中,前3位显示数码管显示里程数,后3位数码管显示价钱(角,元,十元,百元)
3单片机最小系统硬件资源介绍。
89s51单片机;
6位共阳极数码管;
段码驱动器74hc573,位选译码器74hc138;
4路独立式按键;
外部晶振电路;
isp**接口(in system program,在系统编程);
dc+5v电源试配器(选配);
isp**线(选配)。
单片机最小系统实训板硬件资源分布见图1元件布局图和图2电路原理图:其中p1为外部电源输入座(dc+5v),s8为电源最小系统的电源开关,e1和c3为电源滤波,去耦电容。d1为系统电源指示灯。
j2为isp**接口,s7系统复位按键。cry1,c1,c2为外部时针电路。ic1为89s51(dip-40),左上角为第一脚。
pre1,pre2。为上拉排阻(阻值4.7k—10k)。
j5,j9,j6,j10分别对应单片机的p0,p1,p2,p3口。便于二次开发。6路共阳极数码管动态显示电路,p0口通过74hc573(起驱动和隔离作用,让电流通过74ch573流入公共地),来控制数码管的8路段码,p20-p22通过74hc138译码器(使用其中的6路)控制数码管的公共端(中间还有三极管做驱动器)。
这样设计的理由:为了保证该单片机最小系统的二次开发的资源充足和合理性。如果单只做一个动态显示电路,可以省去74hc573,和74hc138。
图1 元件布局图。
图2 单片机最小系统原理图。
4设计思路。
计数:255可用8位二进制数表示,故本设计可直接采用可以重装载的计数器t1模式二进行计数。然后对tl1的内容进行相应的二进制---十进制转换:
首先tl1的内容除以64h,所的商就是十进制的百位,然后用余数除以0ah,所得的商就是十进制数的十位,余数即相应的十进制的个位。接着将相应的十进制数进行译码,并在led数码管上显示出来。每来一个脉冲其显示的结果加一,直加至255然后t1重新开始计数。
图3 255计数程序流程图。
5设计内容。
5.1 0-255计数器数码管显示。
图4 0-255计数显示。
5.2 0-255计数程序。
org 0000h
sjmp 0030h
org 0030h;主程序开始。
start:
mov tmod,#60h ;计数器初始化,选用定时器1,模式2,计数方式。
setb tr1 ;开启定时器1
lcall l1 ;转到读取tl1中得数并进行二到十转换。
lcall l2 ;转到显示程序进行显示。
sjmp start ;返回主程序。
l1: mov r0,#20h ;将20h地址送r0,用来存放百位。
mov a,tl1 ;取tl1中的数值,即脉冲数送a
mov b,#64h ;将100送到b
div ab将脉冲数除以100取出百位。
mov @r0,a ;存百位到20h
inc r0r0加1,即得存放十位的地址。
mov a,b ;将余下的十位个位送a
mov b,#0ah ;将10送b
div ab将十位个位除以10取出十位。
mov @r0,a ;存十位到21h
inc r0r0加1,即得个位地址。
mov @r0,b ;存个位到22h
ret显示子程序。
l2: mov r1,#00h ;数码管显示从最低位开始。
mov dptr,#tab ;将译码表首地址送dptr
l3: mov a,r1 ;将数码管选通信号送a
mov p2,a ;将a中的内容送p2口,控制数码管显示。
mov a,@r0
movc a,@a+dptr ;查表译码。
mov p0,a ;将字符码送p0口输出显示。
lcall dims ;调用延时子程序。
dec r0
inc r1
cjne r1,#03h,l3;循环显示控制,未显示完三位则循环,显示完则退出。
ret延时子程序。
dims:mov r2,#06h ;延时子程序。
dl :mov r3,#0ffh
dl1:djnz r3,dl1
djnz r2,dl
ret数码管译码表。
tab:db 0c0h,0f9h,0a4h,0b0h,99h
db 92h, 82h,0f8h, 80h,90h
end5.3 0-50000计数器数码管显示。
图5 0-50000计数显示。
5.4 0-50000计数程序。
org 0000h
sjmp 0030h
org 0030h
main :mov 70h,#00h
mov 71h,#00h
mov 72h,#00h
mov 73h,#00h
mov 74h,#00h
mov tmod,#60h
mov tl1,#0ffh
mov th1,#0ffh
setb tr1
start:lcall l2
lcall l4
sjmp start
l2 :jbc tf1,l1 ;判定时器t1是否清零。
l3 :ret
l1 :inc 70h
mov r5,70h
cjne r5,#0ah,l3 ;十位。
mov 70h,#00h
inc 71h
mov r5,71h
cjne r5,#0ah,l3 ;百位。
mov 71h,#00h
inc 72h
mov r5,72h
cjne r5,#0ah,l3 ;千位。
mov 72h,#00h
inc 73h
mov r5,73h
cjne r5,#0ah,l3 ;万位。
mov 73h,#00h
inc 74h
mov r5,74h
cjne r5,#05h,l3
mov 74h,#00h
sjmp l3
l4 :mov r1,#00h ;数码管显示从最低位开始。
mov dptr,#tab ;将译码表首地址送dptr
mov r0,#70h
l5: mov a,r1 ;将数码管选通信号送a
mov p2,a ;将a中的内容送p2口,控制数码管显示。
mov a,@r0
movc a,@a+dptr ;查表译码。
mov p0,a ;将字符码送p0口输出显示。
lcall dims ;调用延时子程序。
inc r0
inc r1
cjne r1,#05h,l5;循环显示控制,未显示完六位则循环,显示完则退出。
ret延时子程序。
dims:mov r2,#06h ;延时子程序。
dl :mov r3,#0ffh
dl1:djnz r3,dl1
djnz r2,dl
ret数码管译码表。
tab:db 0c0h,0f9h,0a4h,0b0h,99h
db 92h, 82h,0f8h, 80h,90h
end5.5 出租车计费显示数码管。
图6 出租车计费系统显示。
5.6 出租车计费系统程序。
org 0000h
sjmp 0030h
org 0030h
main :mov 70h,#00h
mov 71h,#00h
mov 72h,#00h;脉冲计数。
mov 73h,#00h;每500脉冲显示个位。
mov 74h,#00h;里程数十位。
mov 75h,#00h;里程数百位。
mov 76h,#00h;角。
mov 77h,#05h;元。
mov 78h,#00h;十元。
mov tmod,#60h
mov tl1,#0ffh
mov th1,#0ffh
setb tr1
start:lcall l1
lcall l9 ;转到显示程序进行显示。
sjmp start ;计数脉冲子程序。
l1 :jbc tf1,jishu;转到记数脉冲处。
l2 :ret
jishu:inc 70h计数延时,数据显示频率。
mov r5,70h
cjne r5,#01h,l2
mov 70h,#00h
inc 71h
mov r5,71h
cjne r5,#05h,l2
mov 71h,#00h
inc 72h
mov r5,72h
cjne r5,#0ah,l2 ;里程数个位。
mov 72h,#00h
inc 73h
mov r1,75h
cjne r1,#00h,l3 ;判断是否超过100公里。
mov r1,74h
cjne r1,#00h,l3 ;判断是否超过10公里。
mov r1,73h
cjne r1,#03h,l3 ;判断是否超过2公里。
l3 :jc l2
lcall money
mov r5,73h
cjne r5,#0ah,l2 ;里程数十位。
mov 73h,#00h
inc 74h
mov r5,74h
cjne r5,#0ah,l2 ;里程数百位。
mov 74h,#00h
inc 75h
mov r5,75h
cjne r5,#0ah,l2
mov 75h,#00h
sjmp l2计费开始。
money:clr c
mov r1,76h
mov r7,#08h
mov a,r7
addc a,r1
mov r6,a
jc l9l4 :mov a,r6
da amov r6,a
mov r1,77h
swap a
anl a,#0fh
add a,r1
mov 77h,a
mov r5,a
cjne r5,#0ah,l5
sjmp l8
l5 :mov a,r6
anl a,#0fh
mov 76h,a
l6 :ret元加1
l7 :inc 77h
mov a,77h
mov r5,a
cjne r5,#0ah,l4 ;十元加1
mov 77h,#00h
inc 78h
mov a,78h
cjne r5,#0ah,l6
mov 77h,#00h
sjmp l4
l8 :mov 77h,#00h
inc 78h
mov a,78h
cjne r5,#0ah,l6
mov 77h,#00h
sjmp l5
l9: mov r4,#00h ;数码管显示从最低位开始。
mov r0,#73h
l10: mov dptr,#tab1 ;将译码表首地址送dptr
mov a,r4 ;将数码管选通信号送a
mov p2,a ;将a中的内容送p2口,控制数码管显示。
mov a,@r0
cjne r4,#04h,l11
mov dptr,#tab2 ;将译码表首地址送dptr
l11 :movc a,@a+dptr ;查表译码。
mov p0,a ;将字符码送p0口输出显示。
lcall dims ;调用延时子程序。
inc r0
inc r4
cjne r4,#06h,l10;循环显示控制,未显示完六位则循环,显示完则退出。
ret延时子程序。
dims:mov r2,#06h ;延时3ms子程序。
dl :mov r3,#0ffh
dl1:djnz r3,dl1
djnz r2,dl
ret数码管译码表。
tab1:db 0c0h,0f9h,0a4h,0b0h,99h ;字符译码。
db 92h, 82h,0f8h, 80h,90h
tab2:db 040h,079h,024h,030h,19h ;带小数点字符译码。
db 12h, 02h,078h, 00h,10h
end6 结束语。
通过单片机课程设计,我不仅加深了对单片机理论的理解,将理论很好地应用到实际当中去,而且我还学会了如何去培养我们的创新精神,从而不断地战胜自己,超越自己。创新,是要我们学会将理论很好地联系实际,并不断地去开动自己的大脑,从为人类造福的意愿出发,做自己力所能及的,别人却没想到的事。使之不断地战胜别人,超越前人。
同时,更重要的是,我在这一设计过程中,学会了坚持不懈,不轻易言弃。设计过程,也好比是我们人类成长的历程,常有一些不如意,也许这就是在对我们提出了挑战,勇敢过,也战胜了,胜利的钟声也就一定会为我们而敲响。
这个设计过程中,我遇到过许多次失败的考验,就比如,自己对实际生活中的交通秩序的不了解给整个设计带来的困扰,真想要就此罢休,然而,就在想要放弃的那一刻,我明白了,原来结果并不那么重要,我们更应该注重的是这一整个过程。于是,我坚持了下来。当然最终,这个设计很成功,主要体现在,这一整个系统,几乎没有参考任何书,程序由自己独立完成,与用8255来制作的交通灯控制系统相比,程序简单易读,结构清楚,最重要的是成本低。
在设计一个系统,除了达到所要求的性能指标以外,成本也是很重要的一个指标。成本的高低也决定了产品的适用性。
7 参考文献。
1] 李朝青。单片机原理及接**术(简明修订版).杭州:北京航空航天大学出版社,1998
2] 李广弟。单片机基础[m]北京:北京航空航天大学出版社,1994
3] 阎石。数字电子技术基础(第三版). 北京:高等教育出版社,1989
4] 廖常初。现场总线概述[j].电工技术,1999.
单片机课程设计
可变程序控制器是集微机技术 自动化技术 通讯技术于一体的通用工业控制装置。它可靠性强 性能 比高 使用方便,已在工业控制的各个领域里得到了极为广泛的应用,成为实现工业自动化的一种强有力的工具 1 plc的定义有许多种。国际电工委员会 iec 对plc的定义是 可编程控制器是一种数字运算操作的电子系统...
单片机课程设计
目录。内容提要2 关键词2引言3 一 硬件电路设计3 一 电路板原理3 二 电路元器件3 二 软件设计3 一 秒钟设计方案3 二 时钟设计方案4 结语7单片机时钟设计。内容摘要 一 在实验板上用动态扫描显示00 59秒钟,具体要求如下 一 6m晶振 二 l9 l10显示00 59十进制数并循环,间隔...
单片机课程设计
1 选题背景。1.1 家庭智能防盗报警系统设计的背景及目的。随着经济的发展,人们对防盗 防劫 防火保安设备的需求量大大增加。针对偷盗 抢劫 火灾 煤气泄漏等事故进行检测和报警的系统,其需求也越来越高。家居智能是以家为平台,兼备建筑 自动化,智能化于一体的高效 舒适 安全 便利的家居环境。自动化的家居...