51单片机按键控制花样灯
51单片机控制LED灯程序设计
51单片机控制LED灯程序设计首先,我们需要明确要使用到的硬件资源和引脚连接情况。
假设我们使用的是STC89C51单片机,LED灯的正极连接到单片机的P1口,负极通过电阻连接到地。
接下来,我们需要了解一些基本的汇编指令和编程规范。
在编写51单片机程序时,需要使用到一些特定的寄存器和指令。
首先是P1寄存器,它用来控制P1口的输出和输入状态。
然后是MOV指令,这是一个用来将数据从一个寄存器复制到另一个寄存器的指令。
最后是一个延时函数,可以利用循环来实现延时。
首先,我们需要初始化P1口为输出状态。
在51单片机中,IO口可以被配置为输入(1)或输出(0)。
我们可以使用MOV指令将0赋值给P1寄存器,将其配置为输出。
此外,我们还需要一个简单的延时函数,来控制LED灯的亮灭时间。
下面是一个基本的51单片机控制LED灯的程序:```assemblyORG0;程序的起始地址MOVP1,;初始化P1口为输出状态LOOP:;主循环MOVP1,;将P1的状态置为0,LED灯灭ACALLDELAY;调用延时函数,延时一段时间MOVP1,;将P1的状态置为1,LED灯亮ACALLDELAY;调用延时函数,延时一段时间JMPLOOP;无限循环DELAY:;延时函数MOVR3,;初始化循环计数器为250LOOP1:MOVR2,;初始化循环计数器为250LOOP2:MOVR1,;初始化循环计数器为250LOOP3:DJNZR1,LOOP3;内层循环DJNZR2,LOOP2;中层循环DJNZR3,LOOP1;外层循环RET;返回主程序```以上是一个简单的51单片机控制LED灯的汇编程序。
程序中通过不断切换P1口的状态来实现LED灯的亮灭。
同时,通过调用延时函数来实现亮灭的时间间隔。
在主循环中,LED灯会亮和灭各一段时间,然后无限循环。
为了将以上汇编程序烧录到单片机中,需要将其汇编为二进制文件。
通常可以使用Keil C等开发工具进行汇编和烧录操作。
单片机控制的花样彩灯设计
课程设计报告书题目: 花样彩灯控制系统专业:电气工程学号: 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灯实验原理目录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等,不同的单片机板具有不同的特性和使用方法,因此需要根据实验要求来选择适合的单片机板。
单片机的花样彩灯设计
课程设计报告书题目: 单片机控制的花样彩灯设计专业:电气工程及其自动化(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引言随着人们生活环境的不断改善和美化,在许多场合可以看到彩色霓虹灯。
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
基于51单片机的四花样彩灯课程设计报告全解
课程设计说明书课程设计名称:专业综合课程设计课程设计题目:基于单片机的综合系统设计学院名称:信息工程学院专业:计算机科学与技术班级:学号:姓名:评分:教师:20 年 1月 20 日目录1.摘要 .................................................................................................................................... - 3 -2、系统设计 ....................................................................................................................... - 3 -2.1 设计任务与要求 ..................................................................................................... - 3 -2.1.1 设计任务 ....................................................................................................... - 3 -2.1.2 设计要求 ....................................................................................................... - 4 -2.2 方案的选择与论证 ................................................................................................. - 4 -2.2.1 总体设计方案 ............................................................................................... - 4 -3 、系统硬件设计 ............................................................................................................... -4 -3.1 控制器模块 ............................................................................................................. - 5 -3.2 按键模块 ................................................................................................................. - 7 -3.3LED显示模块 .......................................................................................................... - 7 -3.4硬件元件清单 .......................................................................................................... - 8 -4、软件设计 ......................................................................................................................... - 8 -4.1主程序设计 .............................................................................................................. - 9 -4.2 编译器简介 ........................................................................................................... - 10 -4.3 结果 ....................................................................................................................... - 10 -4.4 系统调试 ................................................................................................................ - 11 -4.5 误差分析 ................................................................................................................ - 11 -5、总结 ............................................................................................................................... - 12 - 参考文献 ............................................................................................................................. - 13 -附录(代码).................................................................................................1.摘要本次试验为大学期间的综合设计,主要特点是软硬件结合。
51单片机控制LED七彩渐变灯
51单片机控制LED七彩渐变灯自己设计的51单片机控制LED七彩渐变灯MCU:89C51,89S51,89C2051等晶振:12MHz电路驱动(LED连接):P1.0连接蓝色LEDP1.1连接红色LEDP1.2连接绿色LED (必须使用纯绿色高亮LED,不可使用普通草绿管)全为低电平驱动(低电平点亮),可以加三极管驱动,红、蓝、绿LED 也可以交换位置控制方式:PWM频率:约300-700Hz(我没有计算或测量过,只是试验显示效果足够好)调节级数:共600级,相当平滑编译后的HEX文件:687241197859316.rarHEX代码::0D009300E4FEEEC39F50060000000E80F555:0100A000223D:06005F00A9078D828C83CD:10006500E4FDE96008C292FF120093D292E5824551:10007500836009C291AF82120093D291EB4A600965:0D008500C290AF03120093D2900DBD0AD5BA:010********B:100003007508C8E4F509F50AE5086008E50A70040F:1000130015080509E5096008E50870041509050ACE:10002300E50A6008E5097004150A0508E5082509CD:10003300FFE433FE7C00EF250AFFEC3EFEEF64C8CD:100043004E60087508C8E4F509F50AE509FD7C006A :0C005300E50AFB7A00AF0812005F80ACE9:030000000200A15A:0C00A100787FE4F6D8FD75810A020003A8:00000001FFC语言源程序:/*******************************程序名称:七彩LED渐变程序编写者:ZH YUMCU:51/2051晶振:12MHz*********************************/ #include#includesbit gl=P1^2; //绿色sbit rl=P1^1; //红sbit bl=P1^0; //兰timer(unsigned char t){unsigned char b;for(b=0;b{_nop_();_nop_();_nop_();}}LEDout(unsigned char g,r,b){unsigned char a;for(a=0;a<10;a++){if(g!=0){gl=0;timer(g);gl=1;}if(r!=0){rl=0;timer(r);rl=1;}if(b!=0){bl=0;timer(b);bl=1;}}}main(){ unsigned char g,r,b;g=200;r=0;b=0;while(1){if(g!=0&&b==0){g--;r++;}if(r!=0&&g==0){r--;b++;}if(b!=0&&r==0){b--;g++;}if(g+r+b!=200){g=200;r=0;b=0;}LEDout(g,r,b);}}入无法下载HEX,大家可以用KEIL自己编译,或者使用记事本保存HEX代码(重命名为.HEX 文件)都可以再把.hex文件写入单片机,接好电路即可工作自己做的LED渐变灯(使用三极管8550驱动)及部分效果图:。
51单片机彩灯控制器的设计
51单片机彩灯控制器的设计51单片机作为一种非常常见的微控制器,被广泛应用于各种控制系统中。
彩灯控制器是一种常见的应用,通过控制51单片机的IO口来控制彩灯的颜色和亮度,实现彩灯的闪烁、呼吸、渐变等效果。
本文将介绍51单片机彩灯控制器的设计过程。
首先,我们需要明确彩灯控制器的功能需求。
常见的彩灯控制器一般需要具备以下功能:1.控制彩灯的颜色和亮度;2.实现多种灯效,如闪烁、呼吸、渐变等;3.可以通过外部设备(如按钮、遥控器等)进行控制;4.响应外部输入(如声音、光线等)来控制彩灯;5.具备存储功能,保存用户设定的彩灯模式。
根据上述功能需求,我们可以着手进行彩灯控制器的设计。
下面将从硬件设计和软件设计两个方面进行详细介绍。
1.硬件设计:硬件设计包括电路设计和PCB设计两个方面。
电路设计主要是根据51单片机的引脚功能,选择合适的元器件连接到相应的引脚上,以实现各功能模块的电路连接。
常见的彩灯控制器电路包含以下模块:电源供应模块、单片机控制模块、彩灯输出模块、外设接口模块等。
PCB设计则是将电路布板到PCB板上,保证电路的稳定性和可靠性。
2.软件设计:软件设计是51单片机彩灯控制器的核心。
通过编写程序代码,控制单片机的IO口来实现控制彩灯的颜色和亮度,以及各种灯效。
软件设计需要掌握51单片机的编程方法,了解该单片机IO口的使用方法和特点。
在软件设计中,需要通过编程实现以下功能:-通过外部设备输入控制信号,如按钮、遥控器等,来控制彩灯的开关、亮度等;-通过外部输入信号,如声音、光线等,来触发彩灯的相应效果;-实现各种彩灯效果,如闪烁、呼吸、渐变等,通过控制IO口输出信号实现。
除了基本的功能设计,彩灯控制器还可以扩展一些附加功能。
例如,可以通过添加存储模块,实现保存用户设置的彩灯模式,下次开机时可以快速恢复设置。
还可以通过添加无线通信模块,实现远程控制彩灯,或者通过添加传感器模块,实现根据环境变化自动调节彩灯等。
用51控制8个LED灯的亮灭
用51控制8个LED灯的亮灭本来以为这个程序很简单的,没想到写了快三个小时。
哎学艺不精啊。
贴出来给你研究吧。
我不想做过多的解释了,我是按我理解的你出的题目做的,可能和你的本意不是很一样,1、依次亮,依次灭:从一个灯亮到全亮,再到全灭,每次改变一个灯亮灭2、奇偶号灯间隔亮灭:隔一个灯亮一个灯亮灯时间为1s,没有灯全灭的时候3、依次闪烁、切换时间为3秒,闪烁时间为2秒,我理解的是,没三秒钟有一个灯在闪烁,其中有一秒钟是灭灯状态程序中使用了P1口与8个发光二极管相连,具体电路图你百度一下吧,还有使用了一个按键,该按键与P3.7相连,低电平为按下状态。
程序如下:#include#include/*变量声明:i、j、k都是记录计时器溢出次数的变量,stat是记录当前显示状态的变量,由按键key控制temp是状态2中保护P1口状态的变量*/unsigned char i=0,j=0,k=0,stat=0,temp;bit flag=1; //状态1处于灭灯还是亮灯状态的变量,1为依次亮灯,0为依次亮灯sbit key=P3^7; //按键控制void init(); //初始化函数void delay(unsigned int N); //延时函数void keyscan(); //键盘扫描函数void main(){init();while (1){switch (stat){case 0: //0方案if(i==20&&flag){i=0;P1=P1<<1; //依次亮灯temp=P1;if(temp==0){flag=0;}}if(i==20&&!flag){i=0;if(P1==0xff){flag=1;P1=0xfe;}if(!flag){P1=P1<<1; //依次灭灯temp=P1;P1=temp+1;}}break;case 1: //2方案if(i==20){i=0;P1=~P1; //去反后亮灯状态为灭灯,P1初值取0x55或0xaa,奇偶交替亮灯}break;case 2: //3方案if(j==60){P1=temp;P1=_crol_(P1,1);temp=P1; //保护P1口亮灯状态k=0;j=0;}//闪烁部分,应该可以优化if(k<5){P1=0xff;}else if(k>=5&&k<10){P1=temp;}else if(k>=10&&k<15){P1=0xff;}else if(k>=15&&k<20){P1=temp;}else if(k>=20&&k<25){P1=0xff;}else if(k>=30&&k<35){P1=temp;}else if(k>=35&&k<40){P1=0xff;}//----------------------------------- break;}keyscan();}}void init(){TH0=0x3c; //定时器赋初值定时时间50ms TL0=0xB0;TMOD=0x01; //设置定时器工作方式为方式1 EA=1; //开总中断ET0=1; //开中断允许位TR0=1; //定时器计数P1=0xfe; //这里假设led灯与P1口相连并且//低电平有效}void delay(unsigned int N){int i,j;for (i=0;i<n;i++);for (j=0;j<110;j++);}void keyscan(){if(!key){delay(10); //消抖if(!key); //确认有键按下stat++;if(stat==3){stat=0;}//右键按下复位i=0;j=0;k=0;TH0=0x3c;TL0=0xB0;switch (stat){case 0:P1=0xfe;flag=1;stat=0;break;case 1:P1=0x55;break;case 2:P1=0xfe;temp=P1;break;}//-----------------------------------while(!key) //此循环中的函数和主函数中的显示函数是同一个//用于长按键的显示,可以去掉,去掉长按键不会正常显示,松开按键后正常{switch (stat){case 0:if(i==20&&flag){i=0;P1=P1<<1;temp=P1;if(temp==0){flag=0;}}if(i==20&&!flag){i=0;if(P1==0xff){flag=1;P1=0xfe;}if(!flag){P1=P1<<1;temp=P1;P1=temp+1;}break;case 1:if(i==20){i=0;P1=~P1;}break;case 2:if(j==60){P1=temp;P1=_crol_(P1,1); temp=P1;k=0;j=0;}if(k<5){P1=0xff;}else if(k>=5&&k<10) {P1=temp;}else if(k>=10&&k<15)P1=0xff;}else if(k>=15&&k<20){P1=temp;}else if(k>=20&&k<25){P1=0xff;}else if(k>=30&&k<35){P1=temp;}else if(k>=35&&k<40){P1=0xff;}break;}}}}void timer0() interrupt 1 {TH0=0x3c;TL0=0xB0; //溢出后重新赋初值//定时器中断时间为50msi++; //20次中断时间为1s j++; //40次中断时间为2s k++; //60次中断时间为3s }</n;i++);。
按键控制流水灯实训报告
一、实训目的1. 熟悉51单片机的I/O口编程,掌握按键输入和LED输出控制的基本方法。
2. 学习单片机程序设计的基本思路,提高编程能力。
3. 培养动手实践能力,提高电路焊接和调试水平。
二、实训原理1. 单片机I/O口编程:51单片机的I/O口可以编程设置为输入或输出模式。
在本实训中,我们将I/O口配置为输出模式,用于控制LED灯的亮灭;同时,将I/O口配置为输入模式,用于检测按键状态。
2. 按键输入:当按键未被按下时,单片机通过检测I/O口输入电平,判断按键是否处于高电平状态;当按键被按下时,单片机检测到低电平状态。
3. LED输出:单片机通过编程控制I/O口输出电平,从而控制LED灯的亮灭。
在本实训中,我们通过依次点亮LED灯来实现流水灯效果。
4. 流水灯控制逻辑:根据按键状态,单片机在无限循环中不断检测按键状态,并改变流水灯的方向。
三、实训步骤1. 准备工作:准备51单片机开发板、按键、LED灯、电阻等元器件,以及相关编程软件。
2. 电路连接:按照电路图连接好51单片机、按键、LED灯和电阻等元器件。
3. 编程:使用Keil C51集成开发环境编写程序,实现按键控制流水灯功能。
4. 调试:将编写好的程序烧录到单片机中,进行电路调试。
5. 测试:验证按键控制流水灯功能是否正常。
四、程序设计1. 初始化I/O口:将P1口配置为输出模式,用于控制LED灯;将P3口配置为输入模式,用于检测按键状态。
2. 按键检测:在主循环中,不断检测P3口状态,判断按键是否被按下。
3. 流水灯控制:根据按键状态,控制LED灯依次点亮,实现流水灯效果。
4. 延时函数:为了使流水灯效果更加明显,使用延时函数控制LED灯点亮时间。
5. 按键状态处理:当检测到按键被按下时,改变流水灯方向。
五、实训结果与分析1. 实训结果:通过编程和调试,成功实现了按键控制流水灯功能。
2. 分析:(1)I/O口编程:通过编程将51单片机的I/O口配置为输入或输出模式,是实现流水灯功能的基础。
51单片机流水灯程序
char code table4[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,};//P0123 一个灯走动
char code table5[]={0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,};//P0123 两个灯走动
char code table6[]={0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,};//P0123 三个灯走动
for(j=0;j<8;j++)//P0123 一条龙一个灯走动
{ P0=table4[j];
delay(5);
} P0=0xff;
for(j=0;j<8;j++)//P0123 一条龙一个灯走动
{ P2=table4[j];
delay(5);
}
P0=0xff;P1=0xff;P2=0xff;P3=0xff;
for(j=0;j<7;j++)//P0123 两个灯走动
{ P0=table5[j];
P1=table5[j];
P2=table5[j];
P3=table5[j];
for(j=1;j<7;j++)//P0123 一条龙两个灯走动
{ P2=table5[j];
delay(5);
{ P0=table10[j];
P1=table10[j];
P2=table10[j];
P3=table10[j];
delay(5);
} P0=0x00;P1=0x00;P2=0x00;P3=0x00;delay(5);
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的显示编码。
51单片机按键控制花样灯
51单片机按键控制花样灯首战告捷——51单片机按键测试第一次那么认真过,越来越感觉自己不错的嘛@!用了我5个小时吧~~/************************************************ ********************************************** * 本程序实现用按键控制花样灯。
** 当K1按下时,灯从0xfe向左跑一遍; ** 当K2按下时,LED灯从0x7f向右跑一遍到了0xfe右跑回到起始位置; ** 当K3键按下时,LED灯从0xfe开始作流水灯形式运行一次,然后再流回来。
** 当K4键按下时,LED灯先亮前四个,接着再转向亮后四个。
** 当K5键按下时,结束任意正在进行的程序,使LED灯全部熄灭。
************************************************** ********************************************/************************************************* ********************连接方法:P0接独立按键JP5;P2接LED灯接口JP1 ************************************************** *******************/#include ; //头文件,函数声明#include ;//定义按键所在位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;>;7;P2=led;delayms(200);if(led==0x00)break; //这里一定要有个break,跳出循环,然后别忘了此时的状态是00,而不是7f}while(!K1);led=0x7f;P2=led;delayms(200 );for(i=0;i;>;1;P2=led;delayms(200);}}/************************************************ *****当K4键按下时,LED灯先亮前四个,接着再转向亮后四个。
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单片机的花样流水灯设计
摘要计算机技术的飞速发展和提高,把我们带入了崭新的时代,现在,计算机的应用已经深入到千家万户。
单片微型计算机是制作在一块集成电路芯片上的计算机,简称单片机。
单片机在现在社会有着广泛的应用,小到人们的日常电子用品,大到航天飞机、宇宙飞船,上面都有单片机的广泛应用。
单片机具有体积小、功能强大、低功耗、应用广泛等特点。
以AT公司的芯片AT89C51 单片机来实现流水灯的设计。
本系统由单片机控制,I/O口接LED的负极,而LED的正极则直接与5V电源相连。
通过I/O口输出的低电平点亮LED灯。
因此可以通过控制单片机的I/O口的电平高低以达到控制LED,从而实现不同花样的流水灯的目的。
关键词:LED,单片机,高低电平变化ABSTRACTThe 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灯电路 (14)第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)B第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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;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); //消除键盘抖动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; //说明执行完上面的程序的最后状态} //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);}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){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 );for(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);led=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单片机开发板测试程序//---------------------------------------------// <<电脑钟>>//---------------------------------------------//=======主函数==================================ORG 0000HLJMP MAINORG 000BHLJMP T00// ORG 001BH// LJMP T11ORG 0030H//=======程序初始化=============================MAIN:MOV TMOD,#11HMOV TH0,#3CHMOV TL0,#0B0HMOV TH1,#0F0HMOV TL1,#0B0HSETB EASETB ET0// 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 ;流水灯循环值MOV 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,YY1CLR 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,ASETB 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+DPTRMOV 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,#TABMOVC A,@A+DPTRMOV P0,AACALL DELAYMOV A,45HMOV DPTR,#TAB MOVC A,@A+ DPTR MOV P0,ACLR P1.1SETB P1.0ACALL DELAY MOV A,46HMOV DPTR,#TABMOVC A,@A+DPTR MOV P0,ACLR P1.2SETB P1.1ACALL DELAYMOV A,47HMOV DPTR,#TABMOVC A,@A+DPTR MOV P0,ACLR P1.3SETB P1.2ACALL DELAYMOV A,48HMOV DPTR,#TABMOVC A,@A+DPTR MOV P0,ACLR P1.4SETB P1.3ACALL DELAYMOV A,49HMOV DPTR,#TABMOVC A,@A+DPTR MOV P0,ACLR P1.5SETB P1.4ACALL DELAYMOV P0,#7FH MOV P1,#0EBHACALL DELAYMOV P1,#0FFH RET//=======定时器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 32HMOV 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,42HCJNE 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,AA1MOV 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,50HDJNZ 30H,RET1RET1: RET//======键盘扫描子程序========================== KEY:MOV P2,#0F0HMOV R3,P2CJNE R3,#0F0H,KE0LJMP KK13KE0:CJNE R3,#0E0H,KE1 ;P2.4行JB 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 DELAY1ACALL 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.2KK6: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 40HCJNE R3,#04H,KK8MOV 40H,#01HKK8:JB P2.1,KK9// ACALL DELAY3 ;K7 秒表清0MOV 44H,#00HMOV 45H,#00HMOV 46H,#00HMOV 47H,#00HMOV 48H,#00HMOV 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,33HCJNE 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,41HDJNZ 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//=====延时子程序============================== 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,#100DELA4:ACALL DELAYDJNZ R2,DELA4RET//======共阳数码管段码表================================= TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,87H END。