单片机课程设计.docx
《单片机课程设计.docx》由会员分享,可在线阅读,更多相关《单片机课程设计.docx(12页珍藏版)》请在冰豆网上搜索。
![单片机课程设计.docx](https://file1.bdocx.com/fileroot1/2022-11/16/512a3fbc-ab04-4b74-b864-9c973df1471c/512a3fbc-ab04-4b74-b864-9c973df1471c1.gif)
单片机课程设计
课程设计实验报告
名称:
单片机与嵌入式系统
题目:
串口控制数码管与亮度控制
院系:
自动化系
班级:
学号:
学生姓名:
指导教师:
《单片机与嵌入式系统》课程设计
一、课程设计目的
单片机课程设计作为独立的教学环节,是测控专业集中实践性环节系列之一,是学习完《单片机原理及应用》课程后,并在进行相关课程设计基础上进行的一次综合练习。
单片机课程设计过程中,学生通过查阅资料,接口设计,程序设计,安装调试等环节,完成一个基于MCS-51系列单片机,涉及多种资源应用,并且有综合功能的小应用系统设计。
使学生不但能够将课堂上学到的理论知识与实际应用结合起来,而且能够对电子电路,电子元器件等方面的知识进一步加深认识,同时在软件编程,调试,相关仪器设备和相关软件的使用技能等方面得到较全面的锻炼和提高。
使学生增进对单片机的感性认识,加深对单片机理论方面的理解,加深单片机的内部功能模块的应用,如定时器/计数器,中断,片内外存储器,I/O接口,串行口等。
使学生了解和掌握单片机应用系统的软硬件设计过程,方法及实现,强化单片机应用电路的设计与分析能力。
提高学生在单片机应用方面的实践技能和科学作风,培育学生综合运用理论知识解决问题的能力。
二、主要内容
本设计以单片机STC10F08E为核心设计数码管控制器,显示各种状态时间,从0到9。
本设计系统由时钟电路、复位电路、倒计时显示电路、蜂鸣器电路、二极管灯电路等组成。
在程序中采用的是查询方式。
本系统实用性强、操作简单、扩展性强。
本次试验要求数码管显示数字从0-9再从9-0然后蜂鸣器响。
同时要求通过串口控制灯的亮度。
三.设计过程
1.设计原理
我们选择了串口控制灯亮度的题目。
在确定好题目后我们首先分析了题目的原理和设计步骤,在原来数字显示程序的基础上进行改动,当数字从0-9变化后,再从9-0,然后蜂鸣器响一声。
同时在中断的子程序中加入串口控制部分,根据灯闪的频率不同显示出灯的亮度不同,而且是调节占空比来调节灯闪动的频率。
2、设计电路图
1)、单片机系统的时钟电路
ATMEL公司生产的AT89C51单片机它是硬件电路的核心部分,时钟电路晶振使用12MHz,如图一:
图一单片机系统时钟电路
2)、单片机系统的复位电路
复位电路采取按键复位方式,设计电路如图二。
主要是方便复位,以便更好的观察仿真数据。
图二单片机系统的复位电路
3)、数码管显示电路
数码管显示部分电路如下,P2口作为位选,P0口作为段选。
图三数码管显示电路
4)、整体电路设计图四
3、主程序流程
↑
4.程序设计
;----------------------------------------
TWENTY_USEQU50H
TWO_MSEQU51H
TEN_MSEQU52H
SECEQU53H
SEC_OLDEQU54H
MINEQU55H
HOUREQU56H
WEEKEQU57H
TTEQU58H
;---------------------------------------
lamp_sp_bequ6fh
lamp_bz_bequ6eh
;----------------------------------------
LEDP00EQUP1.0
LEDP01EQUP1.1
BEEPEQUP1.6;低电平有效
org0000h
jmpmain_start
;------------------
org000bh
jmpt0_zdzcx
;------------------
org0023h
jmpuart_zdzcx
;------------------------------
org0080h
main_start:
clrp1.7;打开段选
movSP,#02fh
callcsh_zcx
main_loop:
MOVA,SEC;将SEC送到A寄存器
XRLA,SEC_OLD;将SED_OLD和SEC进行异或
JZMAIN_NEXT;累加器A为0转移到MAIN_NEXT
;----------------------------------------
movSEC_OLD,SEC
;----------
calllamp_blink_zcx;显示程序
;----------
MAIN_NEXT:
jmpmain_loop
;------------------------------
t0_zdzcx:
pusha
pushPSW
;----------
movTH0,#0FFh
movTL0,#0ECh;20us
;----------
INCTWENTY_US
MOVA,TWENTY_US
CJNEA,TT,ZHK_BJ
CLRLEDp00;置高电平
SJMPFINAL
ZHK_BJ:
;占空比比较
JCFLAG
SETBLEDp00
SJMPFINAL
FLAG:
CLRLEDp00;置高电平
FINAL:
CJNEA,#100,T0_ZDZCX_TC
TWO_MS_CL:
MOVTWENTY_US,#00H
INCTWO_MS
MOVA,TWO_MS
CJNEA,#5,T0_ZDZCX_TC
TEN_MS_CL:
MOVTWO_MS,#00H
INCTEN_MS
MOVA,TEN_MS
CJNEA,#100,T0_ZDZCX_TC
SEC_CL:
MOVTEN_MS,#00H
INCSEC
MOVA,SEC
CJNEA,#60,T0_ZDZCX_TC
MIN_CL:
MOVSEC,#00H
INCMIN
MOVA,MIN
CJNEA,#60D,T0_ZDZCX_TC
HOUR_CL:
MOVMIN,#00H
INCHOUR
MOVA,HOUR
CJNEA,#24,T0_ZDZCX_TC
WEEK_CL:
MOVHOUR,#00H
INCWEEK
MOVA,WEEK
CJNEA,#8,T0_ZDZCX_TC
MOVWEEK,#1
T0_ZDZCX_TC:
;----------
POPPSW
POPA
RETI
;------------------------------
;----------------串口----------
uart_zdzcx:
jbcTI,uart_fs
jbcRI,usrt_js
jmpuart_exit
;----------
uart_fs:
jmpuart_exit;发送程序
;----------
usrt_js:
movlamp_bz_b,SBUF;接收程序
movSBUF,SBUF
;----------
uart_exit:
reti
;------------------------------
;------------------------------
csh_zcx:
;----初始化pwm变量--
MOVTT,#0
;初始化时间变量
CLRA;清空累加器A
MOVTWENTY_US,A;对TWENTY_US清零
MOVTWO_MS,A;对TEN_MS清零
MOVTEN_MS,A;对TEN_MS清零
MOVSEC,A;对SEC清零
MOVMIN,A;对MIN清零
MOVHOUR,A;对HOUR清零
MOVWEEK,#01;给WEEK赋值01
;-----
;初始化指针
movlamp_sp_b,#0
movlamp_bz_b,#0
;-------
;初始化定时器和串口中断
movTMOD,#00100001b
movTH0,#0FFh
movTL0,#0ECh
movTH1,#0f3h;定时器1,uart
movTL1,#0f3h;波特率设定为4800
MOVPCON,#10000000B;关闭倍频
setbTR0
setbTR1
;--uart----
movSCON,#01010000b
;--int-----
movIP,#00000000b
movIE,#10010010b
;----------
ret
;------------------------------
;------------------------------
;-----------显示程序-----------
lamp_blink_zcx:
mova,lamp_bz_b
anla,#00fh
movb,#3
mulab
movdptr,#lamp_ms_tab
jmp@a+dptr
lamp_ms_tab:
ljmplamp_ms0
ljmplamp_ms1
ljmplamp_ms2
ljmplamp_ms3
ljmplamp_ms4
ljmplamp_ms5
;----------
lamp_ms0:
mova,lamp_sp_b
SETBBEEP
JZBEEP_ZCX
LOOP1:
movdptr,#lamp_data_tab
movca,@a+dptr
movP2,a
;----------
inclamp_sp_b
mova,lamp_sp_b
cjnea,#18,lamp_exit
movlamp_sp_b,#0
jmplamp_exit
;----------
lamp_ms1:
MOVTT,#1
jmplamp_ms0
;----------
lamp_ms2:
MOVTT,#10
jmplamp_ms0
;----------
lamp_ms3:
MOVTT,#50
jmplamp_ms0
;----------
lamp_ms4:
MOVTT,#70
jmplamp_ms0
;----------
lamp_ms5:
MOVTT,#99
jmplamp_ms0
;----------
lamp_exit:
ret
;----------------------------------------
BEEP_ZCX:
CLRBEEP
JZLOOP1
RET
;------------------------------
lamp_data_tab:
DB00000011b,10011111b,00100101b,00001101b;0123
DB10011001b,01001001b,01000001b,00011111b;4567
DB00000001b,00001001b;89
DB00000001b,00011111b,01000001b,01001001b;8765