51单片机按键控制花样灯

合集下载

单片机控制的花样彩灯设计

单片机控制的花样彩灯设计

课程设计报告书题目: 花样彩灯控制系统专业:电气工程学号: 0401100102学生姓名:杜世会指导教师:赵阳日期:2012-6-22河南工业职业技术学院课程设计(论文)任务书电气工程系电气自动化 1001 学生:杜世会指导教师:赵阳助理指导教师(并指出所负责的部分):教研室:教研室主任:目录1引言 (4)2 设计原理 (5)2.1MCS51 (5)2.2 LED (6)2.3中断指令 (8)2.4硬件接原理图 (9)3程序流程图 (11)3.1主流程图 (11)3.2流水灯子流程图 (12)3.3中断程序流程图 (13)4汇编程序 (14)4.1主程序 (14)4.2一秒钟定时程序 (17)5小结 (18)参考文献 (19)1.1引言随着人们生活环境的不断改善和美化,在许多场合可以看到彩色霓虹灯。

LED 彩灯由于其丰富的灯光色彩,低廉的造价以及控制简单等特点而得到了广泛的应用,用彩灯来装饰已经成为一种时尚。

但目前市场上各式样的 LED 彩灯控制器大多数用全硬件电路实现,电路结构复杂、功能单一,这样一旦制作成品只能按照固定的模式闪亮,不能根据不同场合、不同时间段的需要来调节亮灯时间、模式、闪烁频率等动态参数。

这种彩灯控制器结构往往有芯片过多、电路复杂、功率损耗大等缺点。

此外从功能效果上看,亮灯模式少而且样式单调,缺乏用户可操作性,影响亮灯效果。

因此有必要对现有的彩灯控制器进行改进。

课程设计是学完一门课后应用本课知识及以前的知识积累而进行的综合性、开放性的训练,是培养学生工程意识和创新能力的重要环节。

进一步巩固和加深“单片机”课程的基本知识,了解单片机设计知识在实际中的应用。

综合运用“单片机”课程和先修课程的理论及生产实际知识去分析和解决电路设计问题,进行单片机电路设计的训练。

学习单片机设计电路的一般方法,了解和掌握单片机电路的设计过程和进行方式,培养正确的设计思想和分析问题、解决问题的能力,特别是总体电路设计能力。

单片机独立按键控制led灯实验原理

单片机独立按键控制led灯实验原理

主题:单片机独立按键控制LED灯实验原理目录1. 概述2. 单片机独立按键控制LED灯实验原理3. 实验步骤4. 结语1. 概述单片机在现代电子设备中起着至关重要的作用,它可以通过编程实现各种功能。

其中,控制LED灯是单片机实验中常见的任务之一。

本文将介绍单片机独立按键控制LED灯的实验原理及实验步骤,希望对初学者有所帮助。

2. 单片机独立按键控制LED灯实验原理单片机独立按键控制LED灯的实验原理主要涉及到单片机的输入输出端口及按键和LED的连接方式。

在单片机实验中,按键与单片机的输入端口相连,LED与单片机的输出端口相连。

通过按键的按下和松开来改变单片机输出端口电平,从而控制LED的亮灭。

3. 实验步骤为了完成单片机独立按键控制LED灯的实验,需要按照以下步骤进行操作:步骤一:准备材料- 单片机板- 按键- LED灯- 连线- 电源步骤二:搭建电路- 将按键与单片机的输入端口相连- 将LED与单片机的输出端口相连- 连接电源步骤三:编写程序- 使用相应的单片机开发软件编写程序- 程序中需要包括按键状态检测和LED控制的部分步骤四:烧录程序- 将编写好的程序烧录到单片机中步骤五:运行实验- 按下按键,观察LED的亮灭情况- 确保按键可以正确控制LED的亮灭4. 结语通过上述实验步骤,我们可以实现单片机独立按键控制LED灯的功能。

这个实验不仅可以帮助学习者了解单片机的输入输出端口控制,还可以培养动手能力和程序设计能力。

希望本文对单片机实验初学者有所帮助,谢谢阅读!实验步骤在进行单片机独立按键控制LED灯实验时,需要按照一定的步骤进行操作,以确保实验能够顺利进行并取得预期的效果。

下面将详细介绍实验步骤,帮助读者更好地理解和掌握这一实验过程。

1. 准备材料在进行单片机独立按键控制LED灯实验前,首先需要准备相应的材料。

这些材料包括单片机板、按键、LED灯、连线和电源。

在选择单片机板时,需要根据具体的实验需求来确定,常见的有51单片机、Arduino等,不同的单片机板具有不同的特性和使用方法,因此需要根据实验要求来选择适合的单片机板。

推荐-51单片机多模式彩灯控制器 精品

推荐-51单片机多模式彩灯控制器 精品

20XX届单片机课程设计题目:按键多模式彩灯控制器班级:电气1001组别:第十组指导老师:日期:6.11-6.20目录摘要本文介绍了一种简易LED彩灯控制系统的软硬件设计过程,本方案以AT89C51单片机作为主控核心,按键控制电路、彩灯显示电路以及单片机最小系统等模块组成的核心主控制电路。

利用软件编程烧录程序到单片机来实现对LED彩灯进行控制,本系统亮灯模式多,用户根据操作提示可以随意变换想要的闪烁方式和控制彩灯的闪烁频率。

本系统具有电路结构简单、易操作、硬件少、体积小、成本低、低能耗等优点,具有一定的实用和参考价值。

关键词LED彩灯;彩灯控制系统;闪烁方式第1章方案设计随着人们生活环境的不断改善和美化,在许多场合可以看到彩色霓虹灯。

LED彩灯由于其丰富的灯光色彩,低廉的造价以及控制简单等特点而得到了广泛的应用,用彩灯来装饰街道和城市建筑物已经成为一种时尚。

但目前市场上各式样的LED彩灯控制器大多数用全硬件电路实现,电路结构复杂、功能单一,这样一旦制作成品只能按照固定的模式闪亮,不能根据不同场合、不同时间段的需要来调节亮灯时间、模式、闪烁频率等动态参数。

这种彩灯控制器结构往往有芯片过多、电路复杂、功率损耗大等缺点。

此外从功能效果上看,亮灯模式少而且样式单调,缺乏用户可操作性,影响彩灯效果,因此有必要对现有的彩灯控制器进行改进。

1.1设计方案彩灯控制器大致可分为两种方案实现。

一种是利用电子电路装置控制,另一种是采用单片机控制。

方案一:根据设计任务要求介绍的彩灯控制电路的基本组成,可以确定彩灯控制器应由振荡电路、计数/时序分配电路、移位位寄存器和彩灯显示五部分组成。

其框图如图1-1所示。

图1-1彩灯循环控制器硬件框图方案二:本方案主要是通过对基于单片机的多控制、多闪烁方式的LED彩灯循环系统的设计,来达到本设计的要求。

其硬件构成框图如图1-2所示,以单片机为核心控制,由单片机最小系统(时钟电路、复位电路、电源)、按键控制电路、LED发光二极管和5V直流电源电路组成。

任务11 设计按键控制花样彩灯

任务11  设计按键控制花样彩灯
任务11 设计按键控制花样彩灯
11.1.1 明确工作任务 • 用任务三制作的电路,通过编程实现按键控制的8位LED花样点亮 。上电后没有键按下时,与P0口相连的8个LED灯高低四位交替点亮, 当按键S1按下时,与P0口相连的8位LED灯从P0.7向低位逐位点亮,当8 位全亮时又从高位向低位逐位熄灭,并以此循环;当按键S2按下时, 与P0口相连的8位LED灯从P0.0向高位移位点亮,并以此循环。
11.1.3 跟我学
1)交换指令
(1)累加器A高低半字节交换指令 SWAP A ;A7-4←A3-0
这条指令的功能是将A的高4位和低4位数据交换。
(2)整字节交换指令 XCH A,direct ; A←→(direct)将直接地址与A中的内容交换; XCH A, Rn ; A←→Rn 将寄存器R与A中的内容交换; XCH A, @Ri ; A←→(Ri) 将由Ri指定的地址中的内容与A的内容交 换。 (3)半字节交换指令
JB、JNB和JC、JNC指令的功能分别是判断直接位地址和进位位CY的内容是 “1”还是“0”,以此来决定程序的走向。如果条件满足,则程序转移至标号处(rel );如果条件不满足,则程序仍按顺序执行(即执行该指令的下一条指令)。JBC 指令除能实现条件判断转移功能外,还可以在条件满足转移后将被检测位清“0”。
任务11 设计按键控制花样彩灯 --------------程序分析讲解及仿真
任务11 设计按键控制花样彩灯 --------------程序分析讲解及仿真
任务11 设计按键控制花样彩灯 --------------程序分析讲解及仿真
任务11 设计按键控制花样彩灯
3)判断累加器A是否为零转移指令
JZ rel ;若A=0,则PC=PC+rel, 若A≠0,则PC=PC+2 JNZ rel ;若A≠0, 则PC=PC+re令时,先判断A中的内容是否为零,若是则转移至rel处(常

51单片机按键控制花样灯

51单片机按键控制花样灯

51单片机按键控制花样灯时间:2018-09-10 13:50:11 来源:51hei 作者:/***************************************************** 本程序实现用按键控制花样灯。

** 当K1按下时,灯从0xfe向左跑一遍;** 当K2按下时,LED灯从0x7f向右跑一遍到了0xfe右跑回到起始位置;** 当K3键按下时,LED灯从0xfe开始作流水灯形式运行一次,然后再流回来。

* * 当K4键按下时,LED灯先亮前四个,接着再转向亮后四个。

** 当K5键按下时,结束任意正在进行的程序,使LED灯全部熄灭。

*******************************************************/*************************************************连接方法:P0接独立按键JP5。

P2接LED灯接口JP1 ************************************************************/#include <reg52.h> //头文件,函数声明#include <intrins.h>//定义按键所在位sbit K1=P0^0。

sbit K2=P0^1。

sbit K3=P0^2。

sbit K4=P0^3。

sbit K5=P0^4。

unsigned char led。

unsigned char j。

void delayms(unsigned char ms> // 1ms标准延时{while(ms-->{for(j=0。

j<110。

j++>。

//还是无法设置比较标准的延时,如1S等;所以应该用定时器延时才最准确}}void main(>{ //P2=led。

unsigned int i。

while(1>{/********************************************** 当K1按下时,灯从0xfe向左跑一遍; **********************************************/if(K1==0>delayms(10>。

003 花样彩灯控制器

003  花样彩灯控制器

制作名称:花样彩灯控制器1、制作编号:0032、难度等级:★★★(适合第4学期制作)3、设计要求1)以单片机AT89S51作为主控芯片,设计一个花样彩灯控制器。

2)单片机要求具有自动上电复位功能,振荡器采用11.0592MHz晶振。

3)要求该控制器连接多个发光二极管,发光二极管能够以多种方式(花样)显示,花样新颖,发光二极管的变换频率要适中。

4)用两个按键来控制在多种花样之间的切换。

5)用一个发光二极管的亮灭来显示按键的切换效果。

6)合理选择连接于发光二极管电路上的限流电阻的阻值大小,保障发光二极管的发光亮度适中。

7)整个系统的供电为:直流5V单电源供电。

5、原理简介6、参考电路板图7、制作实物照片8、参考程序ORG 0000HLJMP MAINORG 0030HMAIN: MOV R0,#16MOV R1,#1BJ: CJNE R1,#1,M2MOV DPTR,#TAB1ACALL XHM2: CJNE R1,#2,M3MOV DPTR,#TAB2ACALL XHM3: CJNE R1,#3,M4MOV DPTR,#TAB3ACALL XHM4: CJNE R1,#4,M5MOV DPTR,#TAB4ACALL XHM5: CJNE R1,#5,M6MOV DPTR,#TAB5ACALL XHM6: CJNE R1,#6,M7MOV DPTR,#TAB6ACALL XHM7: CJNE R1,#7,M8MOV DPTR,#TAB7ACALL XHM8: CJNE R1,#8,M9MOV DPTR,#TAB8M9: CJNE R1,#9,MXMOV DPTR,#TAB9ACALL XHMX: AJMP BJXH: MOV A,#0MOVC A,@A+DPTRMOV P0,AINC DPTRMOV A,#0MOVC A,@A+DPTRMOV P3,AINC DPTRACALL DELDJNZ R0,XHMOV R0,#16RETDDEL: MOV R7,#100DD1: MOV R6,#200DD2: MOV R5,#5DJNZ R5,$DJNZ R6,DD2DJNZ R7,DD1RETDEL: MOV R7,#100D1: MOV R6,#50D2: MOV R5,#5JB P2.1,N1JNB P2.1,$CPL P2.7INC R1CJNE R1,#10,N1MOV R1,#1N1: JB P2.0,N2JNB P2.0,$CPL P2.7DEC R1CJNE R1,#0,N2MOV R1,#9N2: DJNZ R6,D2DJNZ R7,D1RETTAB1: DB 01H,00H,02H,00H,04H,00H,08H,00H,10H,00H,20H,00H,40H,00H,80H,00H DB 00H,80H,00H,40H,00H,20H,00H,10H,00H,08H,00H,04H,00H,02H,00H,01HTAB2: DB 0FEH,0FFH,0FDH,0FEH,0FBH,0FDH,0F7H,0FBH,0EFH,0F7H,0DFH,0EFH, 0FBH,0FDH,7FH,0BFHDB 0FFH,0F7H,0F7H,0FBH,0FBH,0FDH,0FDH,0FEH,0FEH,0F7H,0F7H,0FBH, 0FBH,0FDH,0FDH,0FEHTAB3: DB 03H,00H,06H,00H,0CH,00H,18H,00H,30H,00H,60H,00H,0C0H,00H,80H,80H DB 00H,0C0H,00H,60H,00H,30H,00H,18H,00H,0CH,00H,06H,00H,03H,01H,01HTAB4: DB 0FEH,0FFH,0FDH,0FFH,0FBH,0FFH,0F7H,0FFH,0EFH,0FFH,0DFH,0FFH, 0BFH,0FFH,7FH,0FFHDB 0FFH,7FH,0FFH,0BFH,0FFH,0DFH,0FFH,0EFH,0FFH,0F7H,0FFH,0FBH,0FFH,0FDH,0FFH,0FEHTAB5: DB 01H,00H,02H,01H,04H,02H,08H,04H,10H,08H,20H,10H,40H,20H,80H,40H DB 00H,80H,80H,40H,40H,20H,20H,10H,10H,08H,08H,04H,04H,02H,02H,01HTAB6: DB 0FFH,00H,00H,0FFH,0C0H,00H,00H,0C0H,00H,0A0H,0A0H,00H,00H,40H,40H,00HDB 00H,0E0H,0B0H,60H,00H,3FH,00H,13H,00H,0AH,0BH,06H,0AH,01H,01H,09HTAB7: DB 01H,0FFH,02H,0FFH,04H,0FFH,08H,0FFH,10H,0FFH,20H,0FFH,40H,0FFH,80H,0FFHDB 0FFH,80H,0FFH,40H,0FFH,20H,0FFH,10H,0FFH,08H,0FFH,04H,0FFH,02H,0FFH,01HTAB8: DB 0EH,03H,05H,07H,02H,07H,08H,02H,10H,0FH,20H,1AH,60H,20H,0C0H,0F0H DB 0EFH,10H,0A0H,60H,0B0H,30H,2BH,1FH,1AH,0DH,08H,09H,09H,07H,05H,04HTAB9: DB 0DH,0FH,0EH,0ADH,0FCH,0C0H,13H,0AH,3CH,01H,64H,06H,0C0H,0CBH,8AH,8FHDB 0F1H,0DEH,0C0H,6AH,0BH,3CH,0FH,18H,0C1H,0BH,0FH,06H,01H,0CBH,0F1H,0A1HEND。

单片机的花样彩灯设计

单片机的花样彩灯设计

课程设计报告书题目: 单片机控制的花样彩灯设计专业:电气工程及其自动化(1)班学号:学生姓名:指导教师:2010年12 月 1 日南昌工程学院课程设计(论文)任务书一、课题设计(论文)题目:基于单片机控制的花样彩灯设计二、课程设计(论文)使用的原始资料(数据)及设计技术要求:设计要求:以MCS51单片机为核心,辅以外围接口电路,设计一个由键盘控制的四种花样LED闪烁彩灯,使八个LED实现流水灯(跑马灯)、逐点点亮、间隔点亮、逐点熄灭四种花样。

要求采用键盘查询方式(非中断方式)实现花样转换。

在当前花样循环显示时,按下相应的花样选择按钮,能立即转换至对应的闪烁花样(但必须在去干扰或消除抖动之后)。

四个按钮S1、S2、S3、S4分别对应花样1、花样2、花样3、花样4。

程序开始运行时自动执行花样1(流水灯)。

时间间隔采用定时/计数器控制为1S左右(误差不超过10%)。

1、单片机控制系统硬件电路设计,包括单片机时钟和复位电路的设计、LED驱动和键盘设计等。

2、控制软件设计与调试,包括1S定时功能的实现、键盘响应程序和显示控制程序等。

三、课程设计(论文)工作内容及完成时间:1、查找相关文献,进行方案选择。

2天 11.22---11.232、系统硬件电路设计,绘制电路原理图。

3天 11.24---11.263、绘制软件流程图,编写与调试软件。

3天 11.29---12.14、完成课程设计报告,答辩。

2天 12.2---12.3四、主要参考资料:1、《单片机原理及应用》,李建忠,西安电子科技大学出版社,2002年2、《单片微型计算机与接口技术》,李群芳等,电子工业出版社,2002年3、《单片微型计算机原理与接口技术》,陈光东等,华中科技大学出版社,1999年4、《单片机实验与实践》,周立功等,北京航空航天大学出版社,2004年5、《开放式综合实验/仿真系统MCS51实验分册》,伟福公司电气与电子工程系 07电气工程电力系统专业 1 班学生:王文虎日期:自 2010 年 11 月 22 日至 2010 年 12 月 3 日指导教师:章彧助理指导教师(并指出所负责的部分):教研室:电气工程教研室主任:目录1引言 (4)2 设计原理 (5)2.1MCS51 (5)2.2 LED (6)2.3中断指令 (8)2.4硬件接原理图 (9)3程序流程图 (11)3.1主流程图 (11)3.2流水灯子流程图 (12)3.3中断程序流程图 (13)4汇编程序 (14)4.1主程序 (14)4.2一秒钟定时程序 (17)5小结 (18)参考文献 (19)1.1引言随着人们生活环境的不断改善和美化,在许多场合可以看到彩色霓虹灯。

基于单片机c语言花样彩灯设计

基于单片机c语言花样彩灯设计

/*-------------2011.3.19 xxx编写------------------------------------------------------------设计名称:花样和速度可控的花样彩灯设计功能:1.本程序用了两个按键,其中一个可以循环控制花样,另一个循环控制流水速度;2.有断电保存当前花样和速度功能,即断电后,在重现上电时,执行的花样和速度仍旧是断电前的速度和花样。

缺点:1、本程序为延时计时,精度不高;2、由于使用延时来得到秒信号,时数和分数被改变后,有时要过一秒后才能被更新显示------------------------------------------------------------------------------------------------*/#include<reg52.h>#include<zi.c>#include<24c02.c>sbit s1=P1^4; //定义按键sbit s2=P1^5;void zhongduan(void)interrupt 1{//P1=0xff;TR0=0; //关闭定时器T0if(s1==0) //如果按键s1被按下{delay_ms(10); //延时消抖di();{if(s1==0) //如果按键s1按下{k++;write_add_24c02(0,k);if(k==6){k=1;}}while(!s1);flag=1;} //等待s1键抬起并改变标志位TR0=1; //启动定时器T0}if(s2==0) //如果按键s2被按下{delay_ms(10); //延时消抖di();if(s2==0){i++;write_add_24c02(1,i);if(i==6)i=1;}while(!s2);flag=1;} //等待s2键抬起并改变标志位TR0=1; //启动定时器T0}void main(void){TMOD=0X02; // 定时器TO,工作方式2,带自动装在的8位计数器,最大数值2^8=256TH0=256-200; //装载初值TL0=256-200;ET0=1; // 定时器T0中断允许TR0=1; //开启定时器T0EA=1; //打开外部中断0k=read_add_24c02(0);i=read_add_24c02(1);if(k>=6)k=1;if(i>=6)i=1;while(1){flag=0; //按键按下标志位while(flag==0) //检测到有按键按下{ switch(k){case 1:huayang_1();break;case 2:huayang_2();break;case 3:huayang_3();break;case 4:huayang_4();break;case 5:huayang_5();break;}switch(i){case 1:x=10;break;case 2:x=100;break;case 3:x=500;break;case 4:x=1000;break;case 5:x=2000;break;}}}}/****************************************花样子文件zi.c*************************************************/ /*sbit S1=P1^3; 定义按键s1为引脚P1.3sbit S2=P1^4;sbit S3=P1^5;sbit S4=P1^6;sbit S5=P1^7;*/#define led P3sbit beep=P2^0; //定义蜂鸣器为引脚P2.0unsigned int x=10;unsigned char k=1,i=1,flag=0;//#define led ledvoid delay_ms(unsigned int xms) //1ms延时子程序{ unsigned int aa,bb;for(aa=xms;aa>0;aa--){if(flag==1) //当检测到有按键按下,跳出内层循环break;for(bb=800;bb>0;bb--);} //调整bb数值,以使本句运行时间为1ms 。

51单片机技术应用教程(C语言版)项目八PC机远程控制花样霓虹灯设计与制作

51单片机技术应用教程(C语言版)项目八PC机远程控制花样霓虹灯设计与制作

8.1.2 51单片机串行通信基础知识
串行接口控制寄存器SCON
76 5 4 3 2 1 0 SCON(98H) SM0 SM1 SM2 REN TB8 RB8 TI RI
SM0、SSMM12::多串机行通接信口R控E4N种制:允工位许作,串方用行式于接选方收择式位位2和。。方由式软3件。置1或清
通信方式
并行通信:数据的各位同 时传输
串行通信:数据逐位顺序 传输
8.1.1串行通信的基本原理 串行通信制式
单工(simplex) :数据只能按照一 个固定的方向传输,如广播
设备A
设备B
半双工(half duplex) :2个方向上 的数据传输不能同时进行,只能一 端发送,一端接收,如对讲机
全双工(full duplex) : 2个方向可 以同时发送和接收,如电话机
76 5 4 3 2 1 0 SCON(98H) SM0 SM1 SM2 REN TB8 RB8 TI RI
TB8:发R送B数8:据接T的收I:第数发9据送R位I的中:。接第断在收9标方位中志式。断位2工标和。作志方在在位式方方。3式中式在0,2时方和由,式方发0式中送3,时完接,8位收数完8位数
1 0 为方0式还2 是为1,11位T帧I、格R式I都以正常fo方sc/6式4或被fosc激/32活。 1 1 在方方式3式1时,11如位果帧格S式M2=1,可则变只(由有定收时到器控有制效)的停止位后,RI置1。
在方式0时,SM2必须为0。
8.1.2 51单片机串行通信基础知识
串行接口控制寄存器SCON
SM0 SM1 工在作方方式式 2和方0。式功R3E能处N于=1接时收,时允,许如接波果收特S率;MR2=E1N,=0而时且,接收到的第9位数据RB8

智能家居单片机控制系统实例讲解课件-按键控制的霓虹灯

智能家居单片机控制系统实例讲解课件-按键控制的霓虹灯

P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7
39 38 37 36 35 34 33 32
R9
4k7
P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15
D8
LED-RED
D7
LED-RED
D6
LED-RED
D5
LED-RED
D4
LED-RED
D3
LED-RED
D2
LED-RED
29
30
D1
31
LED-RED
PSEN ALE EA
1 2 3 4 5 6 7 8
P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7
AT89C51
21 22 23 24 25 26 27 28
P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1
P3.4/T0 P3.5/T1 P3.6/WR P3.7/RD
10 11 12 13 14 15 16 17
10/ 4
二、电路设计
在电路中,采用51单片机的P1口控制8个发光二极管,P2口的P2.0引脚控 制按键S。 P2.0引脚通过上拉电阻R9与+5V电源连接,当S没有按下时,P2.0引脚保持 高电平,当S按下时,P2.0引脚接地,因此通过读取P2.0引脚的状态,就可 以得知按键S是否按下。
{
delay(1200); //延时10ms左右去抖动
ቤተ መጻሕፍቲ ባይዱ
if(S==0)

51单片机彩灯控制器的设计

51单片机彩灯控制器的设计

51单片机彩灯控制器的设计一、引言彩灯控制器是一种用于控制多个彩灯的设备,可以通过控制器改变灯光的亮度、颜色和闪烁等效果。

本文将介绍使用51单片机设计的彩灯控制器。

二、设计目标与需求1.控制多个彩灯:控制器需要具备控制多个彩灯的能力,能够同时控制彩灯开关、亮度和颜色等。

2.节约成本:设计需要尽量简化硬件电路,减少成本。

3.方便使用:控制器需要易于操作,提供用户友好的界面和操作方式。

三、硬件设计1.单片机选择:本设计选择了常用的51单片机作为主控芯片,其具备较强的计算和控制能力。

2.输入设备:采用4x4矩阵键盘作为输入设备,通过矩阵键盘可以方便地输入控制指令和参数。

3.输出设备:使用数字电路和三极管驱动电路实现对多个彩灯的控制,通过PWM技术控制灯光的亮度。

4.通信接口:设计可选装串口通信接口,以便将控制器与其他设备连接。

四、软件设计1.系统框图:彩灯控制器的软件框图如下:```主程序├4x4矩阵键盘扫描功能├彩灯控制函数├开关控├亮度控└颜色控└串口通信功能(可选)```2.矩阵键盘扫描功能:通过扫描矩阵键盘,获取用户输入的按键信息,并根据按键信息触发相应的彩灯控制功能。

3.彩灯控制函数:实现对彩灯开关、亮度和颜色等参数的控制。

-开关控制:根据用户输入的指令,控制彩灯的开关状态。

-亮度控制:使用PWM技术控制彩灯的亮度,根据用户输入的亮度参数设置对应的PWM占空比。

-颜色控制:根据用户输入的颜色参数,控制彩灯的颜色。

可以通过RGB色彩模型实现颜色变化。

4.串口通信功能(可选):通过串口通信接口,实现与其他设备的通信,可以通过串口发送控制指令和接收反馈信息。

五、总结本文介绍了使用51单片机设计的彩灯控制器。

通过合理的硬件设计和软件设计,实现了对多个彩灯的控制。

控制器具备控制开关、亮度和颜色等功能,简化了硬件电路,节约了成本。

同时,控制器还提供了用户友好的界面和操作方式,方便使用。

设计还可选装串口通信接口,实现与其他设备的通信。

51单片机彩灯控制器的设计

51单片机彩灯控制器的设计

51单片机彩灯控制器的设计原题要求如下:1. 用16盏以上的LED小灯,实现至少4种彩灯灯光效果(不含全部点亮,全部熄灭);2. 可以用输入按钮在几种灯光效果间切换;3. 可以通过按钮暂停彩灯效果,使小灯全亮,再次按下相同按钮后继续之前的效果;4. 增加自动在几种效果间切换的功能,并设置一个按钮可以在自动模式和手动模式间切换;5. 使用定时中断延时。

最终作品如下:一共有十钟灯光效果,分别是:顺时针流水灯、逆时针流水灯、交替闪烁、顺时针对角灯、逆时针对角灯、顺时针逐个点亮、顺时针逐个熄灭、逆时针逐个点亮、逆时针逐个熄灭、二进制加法。

程序代码如下:/**************************************************************************************************模块名称:51单片机彩灯控制器模块功能:实现十种循环彩灯控制编写日期:2016/12/18******************************************************************************* *******************/#include <reg51.h>#define false 0#define true 1#define uchar unsigned char#define uint unsigned intsbit pause_key = P3^0; //暂停按钮sbit auto_key = P3^1; //手动模式的效果切换sbit change_key = P3^2; //手动模式效果切换sbit pauseLed = P3^6; //暂停、启动指示灯sbit autoLed = P3^7; //自动、手动模式指示灯int ledCode[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //led段码(单个显示)int ledCode2[8]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00}; //led段码(半显示半灭)int disCode[10]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09}; //数码管段码0~9void displayLed(void); //显示led的主函数void keyScan(void); //键盘扫描处理函数void Delay10ms(unsigned int n); //延时10msbit isPause = false; //是否暂停bit isAuto = true; //是否自动运行bit isChange = false; //是否要切换下一个效果uchar time; //计时满0.5suchar types; //第几种灯光显示方案uint counts; //灯光的第几个/****************************************************************************** ** 函数名: T0_INT* 函数功能: T0定时器中断函数* 输入: 无* 输出: 无******************************************************************************* /void T0_INT(void) interrupt 1{TL0= (65536-50000)/256;TH0= (65536-50000)%256;time ++;if(time >= 10) //定时时间:0.5s{time=0;if(isChange == true) //可以变换下一种显示效果了{counts = 0;types++; //显示下一种效果if(types > 9) types = 0;P0 = disCode[types]; //更新数码管显示isChange = false;}displayLed();counts++;}}/****************************************************************************** ** 函数名: main* 函数功能: 主函数* 输入: 无* 输出: 无******************************************************************************* /void main(void){TMOD=0x61; //0110 0001 //方式一TL0= (65536-50000)/256; //50msTH0= (65536-50000)%256;TR0=1; //开启T0ET0=1; //T0中断允许EA=1; //总中断开启time = 0; //定时器时间扩种(0.5s)counts = 0; //灯光的第几次types = 0; //灯光显示模式pauseLed = 0; //暂停指示灯灭P0 = disCode[types]; //更新数码管显示while(1){keyScan(); //键盘扫描及处理}}/****************************************************************************** ** 函数名: keyScan* 函数功能: 键盘扫描处理* 输入: 无* 输出: 无******************************************************************************* /void keyScan(void){if(pause_key == 0) //按下了暂停按钮{Delay10ms(1);if(pause_key == 0){isPause = ~isPause;pauseLed = isPause;if(isPause == true){ET0=0; //关闭T0中断P0 = 0xfd; //数码管显示“-”P1 = 0x00; //所有的灯都亮起来P2 = 0x00;}else{ET0=1; //T0中断允许P0 = disCode[types]; //更新数码管显示displayLed();}while(pause_key == 0); //防止按键重复检测}}if(auto_key == 0) //自动、手动切换按键按下{Delay10ms(1);if(auto_key == 0){isAuto = ~isAuto;autoLed = isAuto;}while(auto_key == 0); //防止按键重复检测}if(change_key == 0 && isAuto == false) //手动模式,并且效果切换按下{Delay10ms(1);if(change_key == 0){isChange = true;}while(change_key == 0); //防止按键重复检测}}/****************************************************************************** ** 函数名: displayLed* 函数功能: 显示led灯* 输入: (全局变量)types:显示效果;counts:当前效果下的第几次* 输出: 无******************************************************************************* /void displayLed(void){switch(types){case 0: //顺时针旋转led灯{if(counts >= 16) counts = 0;if(counts >=15){if(isAuto == true) isChange = true;}if(counts <8){P1 = 0xff;P2 = ledCode[7-counts];}else{P1 = ledCode[15-counts];P2 = 0xff;}break;}case 1: //逆时针旋转LED灯{if(counts >= 16) counts = 0;if(counts >=15){if(isAuto == true) isChange = true;}if(counts <8){P1 = ledCode[counts];P2 = 0xff;}else{P1 = 0xff;P2 = ledCode[counts-8];}break;}case 2: //交叉替换{if(counts >= 16) counts = 0;if(counts >=15){if(isAuto == true) isChange = true;}if(counts % 2 == 0) //偶数{P1=0xaa;P2=0xaa;else{P1=0x55;P2=0x55;}break;}case 3: //对角顺时针{if(counts >= 8) counts = 0;if(counts >=7){if(isAuto == true) isChange = true;}P1 = ledCode[7 - counts];P2 = ledCode[7 - counts];break;}case 4: //对角逆时针{if(counts >= 8) counts = 0;if(counts >=7){if(isAuto == true) isChange = true;}P1 = ledCode[counts];P2 = ledCode[counts];break;}case 5: //顺时针逐个点亮{if(counts >= 17) counts = 0;if(counts <8){P1 = ~ledCode2[7 - counts];P2 = 0xff;}else if(counts <16){P1 = 0x00;P2 = ~ledCode2[15 - counts];else //全亮{P1 = 0x00;P2 = 0x00;if(isAuto == true) isChange = true;}break;}case 6: //顺时针逐个又灭掉{if(counts >= 17) counts = 0;if(counts <8){P1 = ledCode2[7 - counts];P2 = 0x00;}else if(counts <16){P1 = 0xff;P2 = ledCode2[15 - counts];}else //全灭{P1 = 0xff;P2 = 0xff;if(isAuto == true) isChange = true;}break;}case 7: //逆时针逐个点亮{if(counts >= 17) counts = 0;if(counts <8){P1 = 0xff;P2 = ledCode2[counts];}else if(counts <16){P1 = ledCode2[counts - 7];P2 = 0x00;}else //全亮P1 = 0x00;P2 = 0x00;if(isAuto == true) isChange = true;}break;}case 8: //逆时针逐个灭掉{if(counts >= 17) counts = 0;if(counts <8){P1 = 0x00;P2 = ~ledCode2[counts];}else if(counts <16){P1 = ~ledCode2[counts - 7];P2 = 0xff;}else //全亮{P1 = 0xff;P2 = 0xff;if(isAuto == true) isChange = true;}break;}case 9: //二进制加法{if(counts >= 255) counts = 0;if(counts == 254 && isAuto == true) isChange = true;P1 = ~counts;P2 = ~counts;break;}default:types = 0;P0 = disCode[types]; //更新数码管显示}}/****************************************************************************** ** 函数名: Delay10ms (多个)* 函数功能: 延时函数,延时n*10ms* 输入: n-延时次数* 输出: 无******************************************************************************* /void Delay10ms(unsigned int n){unsigned char a, b;for (; n>0; n--){for (b=38; b>0; b--){for (a=130; a>0; a--);}}}完整proteus仿真图如下:。

基于51单片机的花样流水灯设计--学位论文

基于51单片机的花样流水灯设计--学位论文

摘要摘要计算机技术的飞速发展和提高,把我们带入了崭新的时代,现在,计算机的应用已经深入到千家万户。

单片微型计算机是制作在一块集成电路芯片上的计算机,简称单片机。

单片机在现在社会有着广泛的应用,小到人们的日常电子用品,大到航天飞机、宇宙飞船,上面都有单片机的广泛应用。

单片机具有体积小、功能强大、低功耗、应用广泛等特点。

以AT公司的芯片AT89C51 单片机来实现流水灯的设计。

本系统由单片机控制,I/O口接LED的负极,而LED的正极则直接与5V电源相连。

通过I/O口输出的低电平点亮LED灯。

因此可以通过控制单片机的I/O口的电平高低以达到控制LED,从而实现不同花样的流水灯的目的。

关键词:LED,单片机,高低电平变化ABSTRACTABSTRACTThe rapid development of computer technology and improving, bring us to the new era, now, the application of computer has been deep into the thousands. Single chip microcomputer is made on an integrated circuit chip computer, hereinafter referred to as single chip microcomputer. SCM has been widely used in the present society, small to People's Daily electronic products, big to aerospace aircraft, spacecraft, above has the wide application of single-chip microcomputer. SCM has small volume, powerful function, low power consumption, wide application, etc. AT the company's chip AT89C51 single-chip microcomputer to realize the water lamp design. This system controlled by single chip microcomputer, I/O ports connect the LED the cathode, and LED the anode is directly connected to 5V power supply. Through the I/O port output low level light leds. So you can single chip microcomputer control through the I/O ports to control LED, the level of high and low so as to realize the purpose of the different pattern of flowing water light.Key words:LED , MCU ,High and Low output leve目录第1章引言 (1)1.1 研究背景及意义 (1)1.2 国内外研究现状以及本系统的重点问题 (1)1.3 本文章节安排 (2)第2章系统设计方案论证 (3)2.1 控制器模块方案论证 (3)2.2 键盘模块方案 (4)2.3 电源模块方案 (4)第3章系统硬件设计方案 (5)3.1 系统设计框图 (5)3.2 硬件电路设计 (5)3.2.1 电源电路 (5)3.2.2 单片机89C52最小系统 (6)3.2.3 按键电路 (13)3.3.4 LED灯电路 (13)第4章程序设计及软件仿真 (15)4.1 软件设计框图 (15)4.2 软件开发平台选择 (15)4.3 软件系统功能模块 (16)4.3.1 初始化模块 (16)4.3.2 延时函数 (17)4.3.3 定时器控制模块 (17)4.3.4 键盘扫描模式 (17)4.3.5 LED灯输出控制模块 (18)4.4 程序调试仿真 (19)4.4.1 仿真平台介绍 (19)4.4.2 仿真测试 (19)第5章硬件调试 (21)5.1 硬件设计 (21)5.2 硬件调试 (21)5.2.1 下载功能调试 (21)5.2.2 LED电路测试 (21)5.2.3 模式选择功能调试 (22)5.2.4 速度加减功能调试 (22)5.2.5 复位电路调试 (22)5.2.6 稳定性测试 (22)总结 (23)致谢 (25)参考文献 (26)附录 (27)附录一:原理图 (27)附录二:硬件实物 (28)附录三:程序代码 (29)第1章引言第1章引言1.1 研究背景及意义现如今,随着集成化芯片的飞速发展,分立元件或数字逻辑电路正逐步被集成电路所取代,而单片机作为一种集成电路,其价格低廉,且可靠性强、控制简单但控制方法多样。

单片机控制的花样彩灯共14页word资料

单片机控制的花样彩灯共14页word资料

课程设计报告书题目: 花样彩灯控制系统专业:电气工程日期:2012-6-22河南工业职业技术学院课程设计(论文)任务书一、课题设计(论文)题目:花样彩灯控制系统二、课程设计(论文)使用的原始资料(数据)及设计技术要求:设计要求:利用8031单片机,正常情形下使P1口八个发光二极管做跑马灯和流水灯显示;紧急情形下,使八个发光二极管做鸳鸯戏水灯显示。

三、设计任务:1.设计硬件电路,画出电路原理图;2.画出程序流程图;3.编制程序,写出源程序代码;4.写出5000字的详细说明书,要求字迹工整,原理叙述正确,会计算主要元器件的一些参数,并选择元器件;四、主要参考资料:1、《单片机原理及应用》,李建忠,西安电子科技大学出版社,2019年2、《单片微型计算机与接口技术》,李群芳等,电子工业出版社,2019年3、《单片微型计算机原理与接口技术》,陈光东等,华中科技大学出版社,2019年4、《单片机实验与实践》,周立功等,北京航空航天大学出版社,2019年5、《开放式综合实验/仿真系统MCS51实验分册》,伟福公司电气工程系电气自动化专业 1001 班学生:杜世会指导教师:赵阳助理指导教师(并指出所负责的部分):教研室:教研室主任:目录1引言 (4)2 设计原理 (5)2.1MCS51 (5)2.2 LED (6)2.3中断指令 (8)2.4硬件接原理图 (9)3程序流程图 (11)3.1主流程图 (11)3.2流水灯子流程图 (12)3.3中断程序流程图 (13)4汇编程序 (14)4.1主程序 (14)4.2一秒钟定时程序 (17)5小结 (18)参考文献 (19)1.1引言随着人们生活环境的不断改善和美化,在许多场合可以看到彩色霓虹灯。

LED 彩灯由于其丰富的灯光色彩,低廉的造价以及控制简单等特点而得到了广泛的应用,用彩灯来装饰已经成为一种时尚。

但目前市场上各式样的 LED 彩灯控制器大多数用全硬件电路实现,电路结构复杂、功能单一,这样一旦制作成品只能按照固定的模式闪亮,不能根据不同场合、不同时间段的需要来调节亮灯时间、模式、闪烁频率等动态参数。

基于51的可控霓虹灯控制器(串口和按键控制)

基于51的可控霓虹灯控制器(串口和按键控制)

/***********************************************************************设计人:* * *时间:2011年6月22日21:08:51功能:霓虹灯控制器功能说明:在ROM中事先保存有一定数据1. 进入运行后进行自动运行,在12864上显示延时时间,以及引脚。

(其中时间以100ms为单位,引脚以十进制数为说明)2. 在自动模式下,可进入手动控制,按键P3^4 ,在手动控制下按键P3^4可返回自动模式3. 在自动模式下,可按键P3.2 进入手动设置界面手动设置界面:在手动设置界面下按照12864上的提示首先输入要点亮的引脚2个然后再输入时间,重复反复运行若在设置时间按后按键P3.3 则跳出设置,进入自动运行模式(按照之前的设置在自动运行模式)4. 可通过串口通信进行设置,详情见串口通讯函数说明注1 :设置智能设置7以内包括7组引脚点亮位置和时间,进行循环注2 :在程序中有一段保留代码,此代码是I2C通信的FLASH的驱动程序但是由于52单片机的内部程序存储空间只有8K程序生成的HEX文件已经超过无法运行,故作保留程序此程序设计是为了上电的时候能够直接读取FLASH中的数据,运行上次设置的数据以及每次设置之后的数据存储。

(也可通过它来扩大存储的点亮引脚和时间的数量)(之所以多字节数据多次读写,是由于多字节数据读写数据有限)***********************************************************************/#include "LCMDRV_12864.h"#include <reg52.h>#include <string.h>//#include <I2C.h>//#include <I2C.c>//#define cat_adr 0xa0 //i2c地址器件#define uchar unsigned char#define uint unsigned int//8155控制定义#define COMM_8155 (*((unsigned char volatile xdata *) 0x7f00))#define PA_8155 (*((unsigned char volatile xdata *) 0x7f01))#define PB_8155 (*((unsigned char volatile xdata *) 0x7f02))#define PC_8155 (*((unsigned char volatile xdata *) 0x7f03))/************按键定义*****************/sbit key_enter = P3^2;//手动设置进入和确定按键sbit key_exit = P3^3;//手动设置退出按键sbit key_man_ctrl = P3^4; //手动控制进入和退出按键//sbit key_sub = P3^5;sbit lcd_rst = P3^5;/*************标志位********************/uchar key_man; //手动控制标志位uchar key_set; //按键设置标志位uchar timer_10ms_flag; //定时器标志位uchar ctrl_mod; //0为自动,1为手动uchar uart_flag; //串口通信结束标志位1时使能/*****************数据定义**********************///串口数据保存unsigned char uart_cnt=0;//自动运行所需数据uchar auto_data[25] = {0XFF,0XAA,0X55,0X0A,0X55,0xAA,0x0A,0x0F,0xF0,0x0B,0xF0,0x0F,0x0C,0x00,0x00}; uchar uart_data[25];uchar auto_num =15;//数据显示uchar dis_data[25];/*****************函数定义**********************///初始化函数void initial(void);//自动控制功能主程序void auto_ctrl(void);void mannual_ctrl(void);void mannual_set(void);void main(void){uchar i;//unsigned char *temp;initial();while(1){/*************串口设置***************串口数据发送完毕标志位:uart_flag == 1进入函数处理设置完毕之后,设置为自动运行模式************************************/if(uart_flag == 1){uart_cnt--;uart_flag = 0;auto_num = uart_cnt;uart_cnt = 0;ctrl_mod = 0;for(i=0 ; i<25;i++)auto_data[i] = uart_data[i];/*将最新设置的值写入flashI2C_ACK=0;temp = auto_data;for(;I2C_ACK == 0;)I2C_ACK = I2C_ISendBytes(cat_adr,0x00,temp,8);temp = temp + 8;I2C_ACK=0;for(;I2C_ACK == 0;)I2C_ACK = I2C_ISendBytes(cat_adr,0x08,temp,8);temp = temp + 8;I2C_ACK=0;for(;I2C_ACK == 0;)I2C_ACK = I2C_ISendBytes(cat_adr,0x10,temp,9);*/}/************手动设置***********************按键key_enter进入手动设置注意:设置范围应该在10次以内*********************************************/if((key_enter == 0) || (key_set == 1)){DelayX10us(10); //按键消抖if((key_enter == 0) || (key_set == 1)){/*****************后面记得打开************************/mannual_set();}}/********************************************************手动控制按键控制key_man_ctrl标志位key_man功能:从PB口读取数据,实时反映在LED灯的显示上控制要求:当按键key_man_ctrl时进入按键控制模式置位标志位关闭串口中断不接受串口信息在按键控制模式中循环直到重新按key_man_ctrl打开串口中断同时清标志位********************************************************/{DelayX10us(10);if(key_man_ctrl == 0){mannual_ctrl();ctrl_mod = 0;}}/***************************************自动控制:直接通过保存在auto_data数组中的数据自动控制显示***************************************/if(ctrl_mod == 0)auto_ctrl();}}/**********************************************手动设置函数根据提示手动设置设置时led灯会显示设置的时间或者点亮位置**********************************************/void mannual_set(void){unsigned char temp0,temp1,temp2;unsigned char PB_data,PC_data;P1=0xff;// unsigned char *temp;LCM_Init(1);strcpy(dis_data,"key_set mode!");LCM_DispStrXY(3,1,dis_data);for(temp0=0;temp0<25;temp0++)auto_data[temp0] = 0;DelayX100ms(15);key_set = 1; //打开手动设置标志位ctrl_mod = 1; //停止运行自动模式标志ES = 0; //关闭串口中断temp0=0;while(key_set == 1){if(temp0 == 0){auto_data[0] = 0xff;temp0++;}else if(temp0%3 != 0){if(temp0%3 == 2)temp2 = temp1;LCM_Init(1);strcpy(dis_data,"input the port!");LCM_DispStrXY(3,1,dis_data);temp1=0;while(1){PB_data = PB_8155;PB_data = ~PB_data;if((PB_data&temp1) == 0 ){temp1 =temp1 + PB_data;PA_8155 = temp1;}if((key_enter==0)){auto_data[temp0] = temp1;temp0++;while(key_enter == 0);break;}}}else if(temp0%3 == 0){LCM_Init(1);strcpy(dis_data,"the port1 is:");LCM_DispStrXY(2,1,dis_data);LCM_DispUIntXY(2, 14,temp1);strcpy(dis_data,"the port2 is:");LCM_DispStrXY(3,1,dis_data);LCM_DispUIntXY(3, 14,temp1);strcpy(dis_data,"input the time!");LCM_DispStrXY(4,1,dis_data);temp1=0;while(1){PB_data = PB_8155;PB_data = ~PB_data;if((PB_data&temp1) == 0x00 ){temp1 = temp1 + PB_data;PA_8155 = temp1;}PC_data = PC_8155;if((key_enter == 0)||(key_exit == 0)){auto_data[temp0] = temp1;temp0++;if(key_exit == 0){auto_data[temp0] = 0x00;temp0++;auto_data[temp0] = 0x00;auto_num = temp0;key_set = 0; //关闭手动设置标志位ctrl_mod = 0; //打开自动模式标志ES = 1; //打开串口中断/*将最新设置的值写入flashI2C_ACK=0;temp = auto_data;for(;I2C_ACK == 0;)I2C_ACK = I2C_ISendBytes(cat_adr,0x00,temp,8);temp = temp + 8;I2C_ACK=0;for(;I2C_ACK == 0;)I2C_ACK = I2C_ISendBytes(cat_adr,0x08,temp,8);temp = temp + 8;I2C_ACK=0;for(;I2C_ACK == 0;)I2C_ACK = I2C_ISendBytes(cat_adr,0x10,temp,9);*/}while(key_enter == 0);break;}}}}}/**********************************************手动设置函数根据提示手动设置设置时led灯会显示设置的时间或者点亮位置**********************************************/ void mannual_ctrl(void){unsigned char PB_data;P1 = 0XFF;LCM_Init(1);strcpy(dis_data,"mannual mode!");LCM_DispStrXY(3,1,dis_data);ES = 0; //关闭串口中断;key_man = 1;while(key_man_ctrl == 0);while(key_man == 1){PB_data = PB_8155;PA_8155 = ~PB_data;if(key_man_ctrl == 0){key_man = 0;ES = 1;while(key_man_ctrl == 0);break;}}ES = 1; //打开串口中断;}/************************************************自动控制函数通过保存在auto_data数组中的数据自动运行控制输出并且显示出所存在的数据************************************************/void auto_ctrl(void){unsigned char i;LCM_Init(1);strcpy(dis_data,"auto mode!");LCM_DispStrXY(3,1,dis_data);DelayX100ms(15);if(auto_data[0]==0xff) //判断是否有起始位{while(1){if((key_enter == 0)||(key_exit == 0)||(key_man_ctrl == 0))break;if(uart_flag == 1)break;for(i=1;i<=auto_num-2 ;){if((key_enter == 0)||(key_exit == 0)||(key_man_ctrl == 0)||(uart_flag == 1)) break;if(uart_flag == 1)break;if(i%3 != 0){LCM_Init(1);strcpy(dis_data,"the port1 is:");LCM_DispStrXY(2,1,dis_data);LCM_DispUIntXY(2, 15,auto_data[i]);strcpy(dis_data,"the port2 is:");LCM_DispStrXY(3,1,dis_data);LCM_DispUIntXY(3, 15,auto_data[i+1]);strcpy(dis_data,"the time is:");LCM_DispStrXY(4,1,dis_data);LCM_DispUIntXY(4, 15,auto_data[i+2]);P1 = auto_data[i+1];PA_8155 = auto_data[i];i++;i++;}else{DelayX100ms(auto_data[i]);i++;}}}}else //否则数据错误,自动进入手动设置{key_set = 1;ctrl_mod = 1;}}/*******************初始化函数初始化内容:LCM12864初始化欢迎界面;标志位初始化;8155初始化定时器定时初始化;串口通信初始化;自动控制数据初始化****************************/void initial(void){//unsigned char *temp;/*/设定定时器定时,并设定一个标志位*//*/设定定时器定时,并设定一个标志位*/SCON = 0x50; /* uart in mode 1 (8 bit), REN=1 */TMOD = TMOD | 0x20 ; /* Timer 1 in mode 2 */TH1 = 0xFD; /* 9600 Bds at 11.059MHz */ TL1 = 0xFD; /* 9600 Bds at 11.059MHz */ES = 1; /* Enable serial interrupt*/EA = 1; /* Enable global interrupt */TR1 = 1; /* Timer 1 run *//*/设定串口通信比特率为9600bit/s *///串口定时器1/*设定8155控制字*/COMM_8155 = 0x01;/***** 欢迎界面****/LCM_Init(1);strcpy(dis_data,"welcome!");LCM_DispStrXY(3,1,dis_data);strcpy(dis_data,"nam:sup_mov");LCM_DispStrXY(4,1,dis_data);strcpy(dis_data,"num:20085016");LCM_DispStrXY(5,1,dis_data);strcpy(dis_data,"cla:auto_0801");LCM_DispStrXY(6,1,dis_data);DelayX100ms(40);/***********************************初始化标志位***********************************/timer_10ms_flag = 0 ;ctrl_mod = 0;uart_flag = 0;key_man = 0;key_set = 0;/**************************************自动运行初始化读取flash中的值**************************************//* I2C_ACK = 0;temp = auto_data;for(;I2C_ACK == 0;)I2C_ACK = I2C_IRcvBytes(cat_adr,0x00,temp,8);temp = temp + 8;I2C_ACK=0;for(;I2C_ACK == 0;)I2C_ACK = I2C_IRcvBytes(cat_adr,0x08,temp,8);temp = temp + 8;I2C_ACK=0;for(;I2C_ACK == 0;)I2C_ACK = I2C_IRcvBytes(cat_adr,0x10,temp,9);*/}/****************************************************************************** *串口数据发送方式0xff(数据起始位)0xXX(点亮的灯管)0xXX(延时时间)0xXX(点亮的灯管)…………………………0x00 0x00(数据发送结束标志)注:其中延时时间以100毫秒为单位计算即每次最大延时时间为25.6s手动设置方式相同设置范围应该在10次以内******************************************************************************* /void serial_IT(void) interrupt 4{if (RI == 1){RI = 0;uart_data[uart_cnt] = SBUF;SBUF = uart_data[uart_cnt];if(uart_data[uart_cnt]== 0x00){if(uart_data[uart_cnt-1]==0x00){uart_flag = 1;ctrl_mod = 1; //停止接受标志0xff为起始接收标识位}}uart_cnt++;//开始接受标志(0xff)或者信息}elseTI = 0;}。

51单片机的七彩LED灯渐变调光调色程序

51单片机的七彩LED灯渐变调光调色程序

51单片机的七彩LED灯渐变调光调色程序//------------------------------------------------------------------------------------// Main.c//------------------------------------------------------------------------------------// Copyright (C) 2013 Shenyang JYXD.// WEN BO RUI// Tool chain: KEIL Full 'c'////#pragma CD OE DB SB// Compilation directives#include;#include;#define uchar unsigned char#define uint unsigned intuint Period;//Period刷新周期uint PWM;uint Pulse;//脉冲个数uchar Speed;//速度变量uchar count;uint excount;bit Gra;//渐变/跳变总控制位bit Gra7;//七彩渐亮渐灭控制位bit Gra3;//红绿蓝渐亮渐灭控制位bit BP;//亮到暗,暗到亮转换位bit LEDdelay ;//LED定时到标志位sbit key1 = P3^1;//花样组合键1sbit key2 = P3^0;//花样组合键2sbit key3 = P3^5;//速度组合键1sbit key4 = P3^4;//速度组合键2ucharled1[12]={0x10,0x030,0x20,0x60,0x40,0x50,0x70,0x5 0,0x40,0x60,0x20,0x30};//红、黄、绿、青、蓝、粉、白、粉、蓝、青、绿、黄ucharled2[24]={0x10,0x00,0x30,0x00,0x20,0x00,0x60,0x00 ,0x40,0x00,0x50,0x00,0x70,0x00,0x50,0x00,0x40,0x00,0x60,0x00,0x20,0x00 ,0x30,0x00};uchar led3[3]={0x10,0x20,0x40};//红、绿、蓝uchar ledcount,ledcount1;//*********************************************** ************//以下定义函数// 1毫秒延时函数delayms();花样及速度扫描函数keyscan();//*********************************************** ************/*void delayms(unsigned int ms){unsigned char i ;while(ms--){for(i = 0 ; i ;跳变无灭灯过程void Pattern2();//花样2函数--------->;跳变有灭灯过程void Pattern34();void keyscan(){if((key4==1)&&(key3==1)) {Speed= 20;Period = 25;}//预设4种速度200MSif((key4==0)&&(key3==1)) {Speed= 50;Period = 50;}//500MSif((key4==1)&&(key3==0)) {Speed= 100;Period = 100;}//1Sif((key4==0)&&(key3==0)) {Speed= 150;Period = 200;}//1.5Sif((key2==1)&&(key1==1)) {ledcount1 =0;Pattern1();}//预设4种花样if((key2==0)&&(key1==1)) {ledcount1 =0;Pattern2();}if((key2==1)&&(key1==0)) {ledcount = 0;Gra3 = 1;Pattern34();}if((key2==0)&&(key1==0)) {ledcount = 0;Gra7 = 1;Pattern34();}}void value(){if(Speed == 20) PWM = Pulse*8;if(Speed == 50) PWM = Pulse*4;//脉冲个数if(Speed == 100)PWM = Pulse*2;if(Speed == 150)PWM = Pulse;}void Reset(void){unsigned char coderst[ ]={0xe4,0xc0,0xe0,0xc0,0xe0,0x32};(*((void (*)(void))(rst)))();}void main(){_nop_ ();_nop_ ();_nop_ ();P1 = 0;TMOD = 0x11;//11.0592M晶振的10ms定时初值(100分之一秒)TH0 = 0x0db;TL0 = 0x0ff;TH1 = 0x0ff;//0.05ms(20000分之一秒)TL1 = 0x0D1;EA = 1;//开启总中断允许ET0 = 1;//允许T0定时器中断ET1 = 1;//允许T1定时器中断TR0 = 1;//开启T0定时器EX0=1;//开外部中断0IT0=1;//下降沿触发while(1){keyscan();}}//*********************************************** **************************//Pattern1() 花样函数1-------------跳变无灭灯过程//*********************************************** **************************void Pattern1(){//keyscan();Gra = 0;//跳变位=0if(LEDdelay){LEDdelay = 0;P1 = led1[ledcount];ledcount++;if(ledcount>;11){ledcount = 0;}}}//*********************************************** ************************//Pattern2() 花样函数2-------------跳变有灭灯过程//*********************************************** ************************void Pattern2(){//keyscan();Gra = 0;if(LEDdelay){LEDdelay = 0;P1 = led2[ledcount];ledcount++;if(ledcount>;23){ledcount = 0;}}}//*********************************************** ************************//Pattern3() 花样函数3-------------3彩渐变//*********************************************** ************************/*void Pattern3(){keyscan();if(Speed == 20) Period = 25;if(Speed == 50) Period = 50;if(Speed == 100)Period = 100;if(Speed == 150)Period = 200;Gra = 1;Gra3 = 1;}*///*********************************************** ************************//Pattern4() 花样函数4-------------7彩渐变//*********************************************** ************************void Pattern34(){Gra = 1;//渐变位 = 1}/************************************************ *********/// 定时器0中断服务程序/************************************************ *********/void time0(void) interrupt 1{TR1 =0;TF0 =0;TH0=0xdb;//重新写入初值TL0=0xff;if(!Gra)//执行跳变程序{count ++;if(count >; Speed){LEDdelay = 1;count = 0;}}if(Gra){TR1 = 1;//开启TR1;if(!BP)//{if(Gra7){P1 = led1[ledcount1]; //10ms到,亮相应的LED }if(Gra3){P1 = led3[ledcount1]; //10ms到,亮相应的LED }Pulse++;value();if(Pulse >;= Period) {Pulse = Period;BP = 1;//一个周期完成转换模式}}if(BP){if(Gra7){P1 = led1[ledcount1]; //10ms到,亮相应的LED }if(Gra3){P1 = led3[ledcount1]; //10ms到,亮相应的LED }value();Pulse--;//脉冲个数if(Pulse == 0){Pulse = 0;BP = 0;//一个周期完成转换模式 ledcount1++;if(Gra7){if(ledcount1 >; 11) {ledcount1 = 0;}Gra7 = 0;}if(Gra3){if(ledcount1 >; 2) {ledcount1 = 0;}Gra3 = 0;}}}}/************************************************ *********/// 定时器1中断服务程序/************************************************ *********/void timer1() interrupt 3{PWM --;TH1 = 0xff;//0.05ms(20000分之一秒)TL1 = 0xD1;if(PWM == 0){P1 = 0;TR1 = 0;}}/************************************************ *********/// 外部中断0中断服务程序下降沿触发/*********************************************************/void extern0(void) interrupt 0 {IE0 = 0;// 清标志位excount++;if(excount>;50)// 50大约3秒{EA = 0;//P1_5 = 1;excount = 0;Reset();}}。

51单片机技术应用教程(C语言版)项目四 花样霓红灯的设计与制作

51单片机技术应用教程(C语言版)项目四 花样霓红灯的设计与制作

函数 atoi atol atof strtod strtol strtoul
rand srand calloc free init_mempool
malloc realloc
功能 将字符串sl转换成整型数值并返回这个值 将字符串sl转换成长整型数值并返回这个值 将字符串sl转换成浮点数值并返回这个值 将字符串s转换成浮点型数据并返回这个值 将字符串s转换成long型数值并返回这个值 将字符串s转换成unsigned long型数值并返回这个值
5.请写出二维数组的格式,并举例说明。
51单片机技术应用活页式教程(C语言版)
项目四 花样霓虹灯的设计与制作
4.1 C51库函数
知识 链接
4.2 用户自定义函数 4.3 C51数组
【知识点4.1】 C51库函数
• 函数有库函数和自定义函数两类。 • C51的库函数由C51的编译器提供,每个库函数的原型放
使单片机程序产生延时 对字节中的一位进行测试
【知识点4.2】用户自定义函数
• 1.用户自定义函数的形式
• (1)无参数函数。此种函数被调用时,既无参数输入,也不返回结果给调用函数,它 是为完成某种操作过程而编写的。
• (2)有参数函数。在定义此类函数时,必须定义与实际参数一一对应的形式参数,并 在函数结束时返回结果给调用该函数的程序使用,函数的返回值是通过函数中的return 语句获得的。调用时必须提供实际的输入参数。
如果P1口接了8个LED灯,该程序的功能是:
51单片机技术应用活页式教程(C语言版)
项目四 花样霓虹灯的设计与制作
【引导学习】
2. 请接合第1题程序,请写出有参与无参、形参与实参的含义。
3.请用字符型数组定义LED,存放流水灯8种显示状态,存放在程 序存储器中。 4.请用一维数组定义LED数码管的0-9的显示编码。
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

51单片机按键控制花样灯时间:2012-09-10 13:50:11 来源:51hei 作者:/***************************************************** 本程序实现用按键控制花样灯。

** 当K1按下时,灯从0xfe向左跑一遍;** 当K2按下时,LED灯从0x7f向右跑一遍到了0xfe右跑回到起始位置;** 当K3键按下时,LED灯从0xfe开始作流水灯形式运行一次,然后再流回来。

** 当K4键按下时,LED灯先亮前四个,接着再转向亮后四个。

* * 当K5键按下时,结束任意正在进行的程序,使LED灯全部熄灭。

* ******************************************************/*************************************************连接方法:P0接独立按键JP5;P2接LED灯接口JP1 ************************************************************/#include <reg52.h> //头文件,函数声明#include <intrins.h>//定义按键所在位sbit K1=P0^0;sbit K2=P0^1;sbit K3=P0^2;页脚内容1sbit K4=P0^3;sbit K5=P0^4;unsigned char led;unsigned char j;void delayms(unsigned char ms) // 1ms标准延时{while(ms--){for(j=0;j<110;j++); //还是无法设置比较标准的延时,如1S等;所以应该用定时器延时才最准确}}void main(){ //P2=led;unsigned int i;while(1){/*********************************************页脚内容2* 当K1按下时,灯从0xfe向左跑一遍;**********************************************/if(K1==0)delayms(10); //消除键盘抖动if(K1==0){led=0xfe;for(i=0;i<7;i++) //i可以去8的倍数,表示本电路执行多少次{//led=0x7f; // P端口的初定义要在循环外面,不然会使效果错乱P2=led; //由于这里已经初设一个灯,所以for里面要加上这一个delayms(100); //起初这里设置500MS,使按键每按一下灯彩走一个,不能达到要求。

led=_crol_(led,1);P2=led;delayms(100);}while(!K1); //这里强调松开就没再次执行程序P2=led; //说明执行完上面的程序的最后状态页脚内容3} //P2=led; // 如果把本行放在这里,虽然在开头中没有说明程序烧写好之后就先显示一个灯,但由于本行在if外面,所有最后还是会显示/************************************************************当K2按下时,LED灯从0x7f向右跑一遍到了0xfe右跑回到起始位置************************************************************/if(K2==0)delayms(10);if(K2==0){led=0x7f;for(i=0;i<7;i++){P2=led;delayms(100);led=_cror_(led,1);P2=led;delayms(100);页脚内容4}while(!K1);P2=led;delayms(100);for(i=0;i<7;i++){led=_crol_(led,1);P2=led;delayms(100); //跑回去怎么就那么快呀?} //此时led=0x7f}/******************************************************当K3键按下时,LED灯从0xfe开始作流水灯形式运行一次,然后再流回来。

* *************************************************/if(K3==0)delayms(10); //消除抖动if(K3==0)页脚内容5{led=0xfe;delayms(200);for(i=0;i<7;i++){P2=led;delayms(200);led=led<<1; // 备注led=_crol_(led,1)等于led<<1||led>>7;P2=led;delayms(200);if(led==0x00)break; //这里一定要有个break,跳出循环,然后别忘了此时的状态是00,而不是7f }while(!K1);led=0x7f;P2=led;delayms(200 );页脚内容6for(i=0;i<7;i++){led=led>>1;P2=led;delayms(200);}}/**************************************************** *当K4键按下时,LED灯先亮前四个,接着再转向亮后四个。

* ****************************************************/ if(K4==0)delayms(10); //消除抖动if(K4==0){for(i=0;i<4;i++) //执行四次{ led=0xf0;P2=led;delayms(500);页脚内容7led=0x0f;P2=led;delayms(500);}}/*********************************************************当K5键按下时,结束任意正在进行的程序,使LED灯全部熄灭。

*********************************************************/ if(K5==0)delayms(10);if(K5==0)P2=0xff;}}/**** */时钟+秒表+流水灯的单片机汇编程序时间:2012-09-10 13:49:42 来源:作者://HJSMSY-V1.0单片机开发板测试程序页脚内容8//---------------------------------------------// <<电脑钟>>//---------------------------------------------//=======主函数================================== ORG 0000HLJMP MAINORG 000BHLJMP T00// ORG 001BH// LJMP T11ORG 0030H//=======程序初始化============================= MAIN:MOV TMOD,#11HMOV TH0,#3CHMOV TL0,#0B0HMOV TH1,#0F0HMOV TL1,#0B0HSETB EASETB ET0页脚内容9// SETB ET1SETB TR0// SETB TR1CLR P3.4MOV R7,#00H ;秒值MOV 30H,#00H ;秒个位值MOV 31H,#00H ;秒十位值MOV 32H,#00H ;分个位MOV 33H,#00H ;分十位MOV 34H,#00H ;时个位MOV 35H,#00H ;时十位MOV 44H,#00H ;秒表毫秒十位MOV 45H,#00H ;秒表秒毫秒百位MOV 46H,#00H ;秒表秒个位MOV 47H,#00H ;秒表秒十位MOV 48H,#00H ;秒表分个位MOV 49H,#00H ;秒表分十位MOV P2,#0F0H ;P2口按键初始化MOV 40H,#01H ;数码管休眠值/流水灯/秒表开关数MOV 41H,#08H ;流水灯循环值页脚内容10MOV 42H,#00H ;秒表暂停// ACALL T11//-----------------------------------------------MAIN1:MOV P0,#0FFHMOV P1,#0FFHMOV R0,40HCJNE R0,#01H,ACL1ACALL MAIN2 ;时钟显示ACL1:CJNE R0,#02H,ACL2ACALL MAIN3 ;秒表ACL2:CJNE R0,#03H,ACL3ACALL LED ;流水灯ACL3:ACALL KEY ;按键扫描// ACALL BAO ;定时报警LJMP MAIN1//=======报警子程序============================ BAO:MOV R4,33HCJNE R4,#03H,YY1页脚内容11CLR P3.2ACALL KEYLJMP YY2YY1:CJNE R4,#05H,YY2SETB P3.2ACALL KEYYY2:RET//======时钟扫描子程序======================= MAIN2:MOV A,30HMOV DPTR,#TABMOVC A,@A+DPTRMOV P0,ACLR P1.0ACALL DELAYMOV A,31HMOV DPTR,#TABMOVC A,@A+ DPTRMOV P0,A页脚内容12CLR P1.1SETB P1.0ACALL DELAYMOV A,32HMOV DPTR,#TABMOVC A,@A+DPTRMOV P0,ACLR P1.2SETB P1.1ACALL DELAYMOV A,33HMOV DPTR,#TABMOVC A,@A+DPTRMOV P0,ACLR P1.3SETB P1.2ACALL DELAYMOV A,34HMOV DPTR,#TABMOVC A,@A+DPTR页脚内容13MOV P0,ACLR P1.4SETB P1.3ACALL DELAYMOV A,35HMOV DPTR,#TABMOVC A,@A+DPTRMOV P0,ACLR P1.5SETB P1.4ACALL DELAYMOV P0,#7FHMOV P1,#0EBHACALL DELAYMOV P1,#0FFHRET//========秒表扫描子程序========================= MAIN3:MOV A,44HMOV DPTR,#TAB页脚内容14MOVC A,@A+DPTRMOV P0,ACLR P1.0ACALL DELAYMOV A,45HMOV DPTR,#TABMOVC A,@A+ DPTRMOV P0,ACLR P1.1SETB P1.0ACALL DELAYMOV A,46HMOV DPTR,#TABMOVC A,@A+DPTRMOV P0,ACLR P1.2SETB P1.1ACALL DELAYMOV A,47HMOV DPTR,#TAB页脚内容15MOVC A,@A+DPTRMOV P0,ACLR P1.3SETB P1.2ACALL DELAYMOV A,48HMOV DPTR,#TABMOVC A,@A+DPTRMOV P0,ACLR P1.4SETB P1.3ACALL DELAYMOV A,49HMOV DPTR,#TABMOVC A,@A+DPTRMOV P0,ACLR P1.5SETB P1.4ACALL DELAYMOV P0,#7FH页脚内容16MOV P1,#0EBHACALL DELAYMOV P1,#0FFHRET//=======定时器T0中断服务======================== T00:MOV TH0,#0D8HMOV TL0,#0F0HINC R7CJNE R7,#64H,AAMOV R7,#00H//-------时钟跑值--------------------------------TK1:INC 30H ;每秒钟秒个位增一MOV R6,30HCJNE R6,#0AH,AAMOV 30H,#00HTK2:INC 31HMOV R6,31HCJNE R6,#06H,AAMOV 31H,#00HTK3:INC 32H页脚内容17MOV R6,32HCJNE R6,#0AH,AAMOV 32H,#00HTK4:INC 33HMOV R6,33HCJNE R6,#06H,AAMOV 33H,#00HTK5:INC 34HMOV R5,34HMOV R6,35HCJNE R5,#04H,TK6CJNE R6,#02H,TK6MOV 34H,#00HMOV 35H,#00HTK6:CJNE R5,#0AH,AAMOV 34H,#00HINC 35H//-------秒表跑值----------------------AA:MOV R5,42H页脚内容18CJNE R5,#01H,TK7INC 44HTK7:MOV R5,44HCJNE R5,#0AH,AA1MOV 44H,#00HINC 45HMOV R5,45HCJNE R5,#0AH,AA1MOV 45H,#00HINC 46HMOV R5,46HCJNE R5,#0AH,AA1MOV 46H,#00HINC 47HMOV R5,47HCJNE R5,#06H,AA1MOV 47H,#00HINC 48HMOV R5,48HCJNE R5,#0AH,AA1页脚内容19MOV 48H,#00HINC 49HMOV R5,49HCJNE R5,#06H,AA1MOV 49H,#00HAA1:RETI//====定时器T1中断服务子程序==================== //T11:MOV TH1,#0F0H// MOV TL1,#0B0H// RETI//******定时时间调整子程序*************************// TBAO:MOV 50H,#00HMOV 51H,#00HMOV 52H,#00HMOV 53H,#00HMOV 54H,#00HMOV 55H,#00HMOV R3,50H页脚内容20DJNZ 30H,RET1RET1: RET//======键盘扫描子程序========================== KEY:MOV P2,#0F0HMOV R3,P2CJNE R3,#0F0H,KE0LJMP KK13KE0:CJNE R3,#0E0H,KE1 ;P2.4行MOV P2,#0EFHJB P2.3,KK1 //用作调定时时间;K13 秒个位增一ACALL DELAY1ACALL TK1KK1:JB P2.2,KK2 ;K14 秒十增一ACALL DELAY1ACALL TK2KK2:JB P2.1,KK3 ;K15 分个位增一ACALL DELAY1ACALL TK3KK3:JB P2.0,KE1 ;K16 分十位增一ACALL DELAY1页脚内容21ACALL TK4KE1:MOV P2,#0DFH ;P2.5行JB P2.3,KK4 ;K9 时个位增一ACALL DELAY1ACALL TK5KK4:JB P2.2,KK5 ;K10 时十位增一ACALL DELAY1INC 35HMOV R3,35HCJNE R3,#03H,HH0MOV 35H,#00HLJMP KK5HH0:CJNE R3,#02H,HH1LJMP KK5HH1:CJNE R3,#01H,HH2LJMP KK5HH2:MOV 35H,#00HKK5:JB P2.1,KK6ACALL DELAY1 ;K11 开/关蜂鸣器CPL P3.2页脚内容22KK6:JB P2.0,KE2 ;K12 秒表暂停MOV 42H,#00HKE2:MOV P2,#0BFH ;P.6行JB P2.3,KK7 ;K5 时钟暂停/取消暂停ACALL DELAY1CPL ET0KK7:JB P2.2,KK8 ;K6 显示/休眠/流水灯ACALL DELAY2INC 40HMOV R3,40HCJNE R3,#04H,KK8MOV 40H,#01HKK8:JB P2.1,KK9// ACALL DELAY3 ;K7 秒表清0MOV 44H,#00HMOV 45H,#00HMOV 46H,#00HMOV 47H,#00HMOV 48H,#00H页脚内容23MOV 49H,#00HKK9:JB P2.0,KE3 ;K8 秒表开始跑MOV 42H,#01HKE3:MOV P2,#7FH ;P2.7行JB P2.3,KK10 ;K1 秒十位减一ACALL DELAY1MOV R3,31HCJNE R3,#00H,JA1LJMP KK10JA1:DEC 31HKK10:JB P2.2,KK11 ;K2 分个位减一ACALL DELAY1MOV R3,32HCJNE R3,#00H,JA2LJMP KK11JA2: DEC 32HKK11:JB P2.1,KK12 ;K3 分十位减一ACALL DELAY1MOV R3,33H页脚内容24CJNE R3,#00H,JA3LJMP KK12JA3:DEC 33HKK12:JB P2.0,KK13 ;K4 时个位减一ACALL DELAY1MOV R3,34HCJNE R3,#00H,JA4LJMP KK13JA4:DEC 34HKK13:RET//=====流水灯子程序=========================== LED: MOV A,#0feHMOV 41H,#08HMOV P0,#0FFHLED1:MOV P1,AMOV R3,#100D0: ACALL DELAYDJNZ R3,D0MOV R3,41H页脚内容25DJNZ R3,AAALJMP BBAAA:RL AMOV 41H,R3ACALL KEYLJMP LED1BB:MOV 41H,#07HCC: MOV P1,AMOV R3,#30D1: ACALL DELAYDJNZ R3,D1MOV R3,41HDJNZ R3,DDLJMP LED0DD:RR AMOV 41H,R3ACALL KEYLJMP CCLED0:RET页脚内容26//=====延时子程序============================== DELAY:MOV R1,#250DEL1:NOPNOPNOPNOPDJNZ R1,DEL1RET//====调用时钟显示作延时======================== DELAY1:MOV R2,#20DELA3: ACALL MAIN2DJNZ R2,DELA3RET//====调用秒表显示作延时======================== DELAY3:MOV R2,#20DELA5:ACALL MAIN3DJNZ R2,DELA5RET//====调用延时子程序作延时====================== DELAY2:MOV R2,#100页脚内容27DELA4:ACALL DELAYDJNZ R2,DELA4RET//======共阳数码管段码表================================= TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,87HEND页脚内容28。

相关文档
最新文档