1、单片机LED灯控制器报告实验名称 LED灯控制器 指导教师 专业班级 学号 联系 本人承诺:本报告内容真实,无伪造数据,无抄袭他人成果。本人完全了解学校相关规定,如若违反,愿意承担其后果。签字: 年 月 日一、任务要求实验容:利用C8051F310单片机设计一个LED灯控制器 实验要求:1. LED灯外接于P0.0端。2. LED灯分别按2Hz,1Hz和0.2Hz三种不同频率闪动,各持续10s。3. 在LED灯开始和停止闪烁时蜂鸣器分别鸣响1次。4. 利用单片机部定时器定时,要求采用中断方式。 二、设计思路C8051F310单片机片上晶振频率为24.5MHz,采用8分频后为3.0625MHz
2、,输入时钟信号为48个机器周期,T1定时器采用定时方式1。2Hz,1Hz频率闪动均可以通过部定时器单次计时直接达到效果,而0.2Hz单次闪动时间过长,无法达到,故通过中断设置定时器技术的方式达到延长计时时间的效果。三、资源分配 P0.0:为LED灯控制端口,高电平触发。P3.1:为蜂鸣器控制端口,高电平触发。P0.1:为KINT键控制端口,下降沿触发。 R1、R2:用于存放计时器计时数据,R1赋给TH1、R2赋给TL1。 R3:0.2Hz下的中断程序部循环计数器R7:存放三种模式的循环次数。 R0:在外部中断程序中赋值,用于判断采用何种模式。 PSW.1:为标志位,用于等待定时器中断,中断执行
3、完清零,并在中断处向下继续执行程序。四、流程图 1、 主程序流程图(含提高部分)2、 T_KINT中断部分 3、 ITOP中断部分 4、 IT1P部分五、源代码 (含文件头说明、语句行注释)包含基础部分和提高部分;-;- Generated Initialization File -;-$include (C8051F310.inc)LED BIT P0.0 ;LED灯控制端口BEEP BIT P3.1 ;蜂鸣器控制端口KINT BIT P0.1 ;KINT按钮端口 ORG 0000H LJMP MAIN ORG 0003H ;外部中断0入口LJMP T_KINTORG 000BH ;定时器T
4、0中断入口 LJMP IT0P ORG 001BH LJMP IT1P ORG 1000HMAIN: LCALL Init_Device ;设备初始化 MOV SP, #40H ;置堆栈指针 MOV TMOD, #11H ;定时器T0、T1均为工作方式1 MOV R0,#00H CLR LED ;关led灯 CLR BEEP ;关蜂鸣器 CLR PSW.1 ;标志位1清零 CLR PSW.5 ;标志位2清零SETB EX0 ;外部中断0允许 SETB IT0 ;下降沿触发 SETB EA ;中断总允许 SETB ET0 ;定时器T0中断源允许 SETB ET1 ;定时器T1中断源允许CHOO:
5、 CJNE R0,#02H,LOOP ;选择模式 LJMP MODEL2 ;R0等于02H,跳转到1HzLOOP: JC MODEL1 ;R0小于02H,跳转到2Hz LJMP MODEL3 ;R0大于02H,跳转到0.2HzMODEL1: MOV R1, #0C1H ;设定2Hz闪烁方式定时器T0计数初值 MOV R2, #0B1H MOV R7, #28H ;置2Hz闪烁方式闪烁次数 ACALL L1 ;取定时器T0计数初值 SETB P3.1 ;蜂鸣器鸣响一次 SETB TR0 ;启动定时器T0 CLR P0.0 ;开LED灯HERE1: CJNE R7, #00H, HERE1 ;等待
6、中断 CLR TR0 ;2Hz闪烁方式结束,关闭定时器 MODEL2: MOV R1, #83H ;设定1Hz闪烁方式定时器T0计数初值 MOV R2, #63H MOV 7, #14H ;置1Hz闪烁方式闪烁次数 ACALL L1 ;取定时器T0计数初值 SETB P3.1 ;蜂鸣器鸣响一次 SETB TR0 ;启动定时器T0 CLR P0.0 ;开LED灯HERE2: CJNE R7, #00H, HERE2 ;等待中断 CLR TR0 ;1Hz闪烁方式结束,关闭定时器 MODEL3: MOV R1, #0C1H ;设定0.2Hz闪烁方式定时器T1计数初值 MOV R2, #0B1H MO
7、V R7, #28H ;置0.2Hz闪烁方式闪烁次数 ACALL L3 ;取定时器T1计数初值 MOV R3, #00H ;定时中断循环初值 SETB P3.1 ;关蜂鸣器 SETB TR1 ;启动定时器T1 CLR P0.0 ;关LED灯HERE3: CJNE R7, #00H, HERE3 ;等待中断 CLR TR1 ;0.5Hz闪烁方式结束,关闭定时器 LJMP MODEL1 ;重新开始下一轮的闪烁L1: MOV A, R1 ;定时器0计数初值赋值子程序 MOV TH0, A MOV A, R2 MOV TL0, A RETL3: MOV A, R1 ;定时器1计数初值赋值子程序 MOV
8、 TH1, A MOV A, R2 MOV TL1, A RET ORG 1200HIT0P: DEC R7 ;定时器T0中断服务程序 MOV A, R1 ;计数初值重新赋值 MOV TH0, A MOV A, R2 MOV TL0, A CLR P3.1 ;蜂鸣器停止鸣响 CPL P0.0 ;LED灯亮灭切换 RETI ORG 1400HIT1P: DEC R7 ;定时器T1中断服务程序 MOV A, R1 ;计数初值重新赋值 MOV TH1, A MOV A, R2 MOV TL1, A INC R3 ;循环初值加1 MOV A,R3 ANL A,#0FH CJNE A,#0AH,BACK
9、 MOV R3,#00H CLR P3.1 CPL P0.0BACK: RETIT_KINT:SETB PSW.1 ;标志位1置一,用于判断是否顺序执行三种模式 INC R0 ;R0加一,用于判断何种模式 CJNE R0,#04H,K_RET CLR PSW.1 ;R0到04H时清零标志位和R0 MOV R0,#00HK_RET: CLR TR1 ;关定时器1 POP SP POP SP ;出栈两次 MOV DPTR,#0036H PUSH DPL ;DPL压入栈顶 PUSH DPH ;DPH压入栈顶 RETI ; Peripheral specific initialization func
10、tions,; Called from the Init_Device labelPCA_Init: anl PCA0MD, #0BFh mov PCA0MD, #000h retTimer_Init: mov TMOD, #011h mov CKCON, #002h retPort_IO_Init: ; P0.0 - Unassigned, Open-Drain, Digital ; P0.1 - Unassigned, Open-Drain, Digital ; P0.2 - Unassigned, Open-Drain, Digital ; P0.3 - Unassigned, Open
11、-Drain, Digital ; P0.4 - Unassigned, Open-Drain, Digital ; P0.5 - Unassigned, Open-Drain, Digital ; P0.6 - Unassigned, Open-Drain, Digital ; P0.7 - Unassigned, Open-Drain, Digital ; P1.0 - Unassigned, Open-Drain, Digital ; P1.1 - Unassigned, Open-Drain, Digital ; P1.2 - Unassigned, Open-Drain, Digit
12、al ; P1.3 - Unassigned, Open-Drain, Digital ; P1.4 - Unassigned, Open-Drain, Digital ; P1.5 - Unassigned, Open-Drain, Digital ; P1.6 - Unassigned, Open-Drain, Digital ; P1.7 - Unassigned, Open-Drain, Digital ; P2.0 - Unassigned, Open-Drain, Digital ; P2.1 - Unassigned, Open-Drain, Digital ; P2.2 - U
13、nassigned, Open-Drain, Digital ; P2.3 - Unassigned, Open-Drain, Digital mov XBR1, #040h retInterrupts_Init: mov IE, #08Bh ret; Initialization function for device,; Call Init_Device from your main programInit_Device: lcall PCA_Init lcall Timer_Init lcall Port_IO_Init lcall Interrupts_Init retend六、程序测
14、试方法与结果如预期,三种波形的频率都有显示,而且没有错误。提高部分:在C8051F310单片机开发板烧录代码:不按KINT键时,LED灯以2Hz,1Hz和0.2Hz三种不同频率闪动,各持续10s,在开始、结束和切换模式时,蜂鸣器都响1s,按一次,LED灯以2Hz闪烁10s后结束;按两次,LED灯以1Hz闪烁10s后结束;按三次,LED灯以0.2Hz闪烁10s后结束;按四次,切换回顺序执行三种模式。Ps:运行过程中,偶尔会出现蜂鸣器响时间超过一秒。不知道如何调整,但模式切换正常。七、思考题1.若想实现3种闪烁方式的持续时间在5s-20s围可调,且每种方式的持续时间各不相同,应如何设计程序? 答:通过设置中断的循环次数来控制持续时间,所以只要改变循环次数,就能改变持续时间
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1