1单片机并口简单应用(流水灯)
- 格式:doc
- 大小:708.43 KB
- 文档页数:7
单片机控制左右循环的流水灯设计单片机是一种微型计算机芯片,可以用于控制和管理各种电子设备。
流水灯是一种经典的电子元件,通过依次点亮或熄灭一组LED灯来形成流动效果。
本文将设计一个使用单片机控制的左右循环流水灯。
设计思路:1.硬件设计:a.先准备一个单片机开发板、一组LED灯和与LED灯串联的电阻。
b.将LED灯按照循序连接,连接方式可以为并联或串联。
c.通过引脚和外部电路将LED灯与单片机的IO口相连。
每个LED灯与一个IO口相连,并且通过电阻限流。
2.软件设计:a.在单片机上编写控制流水灯的程序。
这可以使用C语言或汇编语言进行编写。
b.程序主要通过循环结构来实现流水灯的效果。
编写一个循环函数,用于控制LED灯的点亮和熄灭。
c.在循环函数中,通过控制IO口输出高电平或低电平来控制LED灯的亮灭。
每次循环,根据需要逐个点亮或熄灭LED灯。
d.为了实现左右循环的效果,可以通过改变点亮或熄灭的顺序来改变流水灯的方向。
可以使用一个变量来控制点亮和熄灭的顺序,每次循环后改变该变量的值。
示例代码:以下是一个使用C语言编写的简单示例代码,来控制左右循环流水灯。
```c#include <reg52.h>//定义LED灯使用的IO口sbit LED1 = P1^0;sbit LED2 = P1^1;sbit LED3 = P1^2;sbit LED4 = P1^3;//控制流水灯循环void lightFlowint i;int direction = 1; // 控制流水灯的方向,1表示向右,-1表示向左//流水灯循环while(1)//控制LED灯的点亮和熄灭LED1=0;LED2=1;LED3=1;LED1=1;LED2=0;LED3=1;LED4=1;LED1=1;LED2=1;LED3=0;LED4=1;LED1=1;LED2=1;LED3=1;LED4=0;//根据方向改变控制顺序if(direction == 1)//向右direction = -1;}elsedirection = 1;}}void mainlightFlow(;```这个示例代码中,使用P1口上的4个IO口来控制4个LED灯的点亮和熄灭。
C51单⽚机实现呼吸灯和花样流⽔灯程序1.⽤C51单⽚机实现花样流⽔灯,代码如下:#include <reg52.h>#define LED_A P1 //led灯所⽤的接⼝,是哪个⼝就写P⼏void delayms(){unsigned char x = 0; unsigned char i;unsigned char y = 0;while(y < 0.001) //定义led灯的切换的延时时间,越⼩越快。
{ //(y < 0.001);(x<100);(i<100)都可以修改x = 0;while(x<100){i = 0;while(i<100){i++;}x++;}y++;}}#define LED_NUM 8 //定义led灯的数量,可快速实现不同⽤途的修改;void main(){unsigned char k;unsigned char j;unsigned char LED_ALL[] = {0XFE,0XFD,0XFB,0XF7,0XEF,0XDF,0XBF,0X7F}; //led灯亮灭的⼗六进制数组;unsigned char LED_ALL_2[] = {0XFC,0XF3,0XCF,0X3F}; while(1) { for(k=0;k<3;k++) //第⼀个for实现奇偶灯交叉闪烁三次,想闪烁⼏次就修改(K<3)中的数值; { LED_A = 0xAA; delayms(); LED_A = 0x55; delayms(); } for(k=3;k>0;k--) //实现⼀个流⽔灯左右三次(从左到右再从右到左算⼀次); { for(j=0;j<LED_NUM;j++) { LED_A = LED_ALL[j]; delayms(); } for(j=6;j>0;j--) { LED_A = LED_ALL[j]; delayms(); } } for(k=0;k<3;k++) //实现前四个灯亮后四个灯灭,交叉闪烁3次,修改次数同上; { LED_A = 0xf0; delayms(); LED_A = 0xf; delayms(); } for(k=3;k>0;k--) //实现两个灯依次流⽔3次; { for(j=0;j<4;j++) { LED_A = LED_ALL_2[j]; delayms(); } for(j=2;j>0;j--) { LED_A = LED_ALL_2[j]; delayms(); } } }}2.实现第⼀个灯呼吸,由暗变亮,再由亮变暗,程序如下;#include <reg52.h>sbit LED1 = P3^0;void delay(unsigned int a) //定义⼀个延时函数{ while(--a);}void main(){ unsigned int t,circle=800; //定义变量,circle=800为led灯呼吸的间隔长短,数值越⼩,间隔越短。
1单片机并口简单应用(流水灯)试验1 单片机并口简单应用(流水灯)实验目的1、了解单片机C语言程序的基本结构2、了解单片机C语言程序的设计和调试方法3、掌握顺序控制程序的简单编程4、熟悉51单片机的端口使用实验仪器单片机开发试验仪、稳压电源、计算机实验原理1、硬件电路如图1所示,流水灯硬件电路由发光二极管、单片机并口(P0)、限流电阻等组成。
发光二极管连接成共阳极结构。
发光二极管点亮的条件是:阳极接高电平、各阴极接低电平。
因此,二极管公共端阳极就接成高电平,然后再按一定规则从P0口输出数据,发光二极管就会点亮。
图1 流水灯电路图2、程序流程图如下。
开实验内容:1、开发板接线图2、开发环境设置打开keil软件,版本μ Vision2 ,μvision3,μvision4 都一样,在这里用μvision4版本演示,打开之后如下图,有的时候会默认打开上次使用的工程,单击Project 菜单,选择 Close Project 关闭了默认打开的工程,显示下图界面:我们要建立新的工程,选择Project→ newμvision projiect…选择工程要保存的路径,输入工程文件名,如图点击保存后会弹出一个对话框,要求用户选择单片机型号,可以根据用户使用的单片机来选择,我们使用的STC90单片机是兼容51内核的,Keil C51 几乎支持所有的51内核单片机,51内核具有通用型,如果程序用的资源不是太复杂,我们可以选择任意一款51单片机内核就行。
例程以添加Atmel 的AT89C51来说明。
如图,然后,单击确定(OK)。
功能描述如果出现下面的界面:单击是就可以,意思是将单片机的启动代码添加到工程,我们不用修改。
到目前我们还没建立一个完整的工程,只是有工程的名字,框架,工程中还没有任何文件代码,(除了启动代码,有的keil 版本不显示启动代码),接下来我们添加文件及代码。
单击菜单File→New选项,或者单击界面上的快捷图标,新建文件串口如下。
手把手教你单片机流水灯实验(详解)每当夜幕降临,我们可以看到大街各式各样广告牌上漂亮的霓虹灯,看起来令人赏心悦目,为夜幕中的城市增添了不少亮丽色彩。
其实这些霓虹灯的工作原理和单片机流水灯是一样的,只不过霓虹灯的花样更多,看起来更漂亮一些。
这一课我们就结合S51增强型单片机实验板、ISP 编程器来手把手教你详细学习单片机的流水灯实验。
首先介绍实验的硬件设备:S51增强型单片机实验板+ISP编程器图1:S51增强型单片机实验板图2:ISP编程器套件S51增强型单片机实验板上有8个高亮度发光二极管(见图1所示),可以用来做单片机流水灯、跑马灯。
等实验,电路原理图见下图3。
图3从原理图可以看出,如果我们想让接在P1.0口的LED1亮起来,那么我们只要把P1.0口的电平变为低电平就可以了;相反,如果要接在P1.0口的LED1熄灭,就要把P1.0口的电平变为高电平就可以;同理,接在P1.1~P1.7口的其他7个LED的点亮和熄灭方法方法同LED1。
因此,要实现流水灯功能,我们只要将LED2~LED8依次点亮、熄灭,依始类推,8只LED变会一亮一暗的做流水灯了。
实现8个LED流水灯程序用中文表示为:P1.0低、延时、P1.0高、P1.1低、延时、P1.1高、P1.2低、延时、P1.2高、P1.3低、延时、P1.3高、P1.4低、延时、P1.4高、P1.5低、延时、P1.5高、P1.6低、延时、P1.6高、P1.7低、延时、P1.7高、返回到开始、程序结束。
从上面中文表示看来实现单片机流水灯很简单,但是我们不能说P1.0你变低,它就变低了。
因为单片机听不懂我们的汉语的,只能接受二进制的“1、0......”机器代码。
我们又怎样来使单片机按我们的意思去工作呢?为了让单片机工作,只能将程序写为二进制代码交给其执行;早期单片机开发人员就是使用人工编写的二进制代码交给单片机去工作的。
今天,我们不必用烦人的二进制去编写程序,完全可以将我们容易理解的“程序语言”通过“翻译”软件“翻译” 成单片机所需的二进制代码,然后交给单片机去执行。
一、实验目的1. 熟悉单片机的基本原理和组成,掌握51单片机的编程方法。
2. 理解单片机I/O口的使用,学会利用单片机控制LED灯的流水灯效果。
3. 提高动手实践能力,培养团队协作精神。
二、实验环境1. 实验设备:51单片机开发板、LED灯、面包板、电源、连接线等。
2. 实验软件:Proteus仿真软件、Keil uVision5集成开发环境。
三、实验原理流水灯实验是单片机入门级实验之一,通过控制单片机的I/O口输出高低电平,使LED灯依次点亮,形成流水灯效果。
实验中,利用单片机的定时器产生定时中断,每隔一定时间改变I/O口的输出状态,实现LED灯的流水灯效果。
四、实验步骤1. 打开Proteus软件,新建一个工程项目,添加51单片机开发板和LED灯等元件,绘制电路图。
2. 打开Keil uVision5,新建一个C51工程项目,选择对应的单片机型号。
3. 编写程序:(1)初始化I/O口:将P0口设置为输出模式,将P1口设置为输出模式。
(2)设置定时器:选择合适的定时器,设置定时时间,使其产生定时中断。
(3)编写中断服务程序:在中断服务程序中,改变I/O口的输出状态,实现LED灯的流水灯效果。
(4)编写主程序:在主程序中,启动定时器,进入中断服务程序。
4. 编译程序,生成HEX文件。
5. 将生成的HEX文件导入Proteus软件,运行仿真实验。
6. 观察实验现象,检查LED灯的流水灯效果是否正常。
五、实验结果与分析1. 实验现象:在Proteus软件中,LED灯依次点亮,形成流水灯效果。
2. 实验分析:通过设置定时器,每隔一定时间改变I/O口的输出状态,实现LED 灯的流水灯效果。
实验过程中,可以调整定时器的定时时间,改变流水灯的速度。
六、实验总结1. 本实验使我们对单片机的基本原理和组成有了更深入的了解。
2. 通过编写程序,掌握了51单片机的编程方法,提高了编程能力。
3. 实验过程中,我们学会了利用单片机控制LED灯,实现了流水灯效果。
单片机流水灯实验总结引言流水灯是单片机实验中最基础的实验之一,通过控制单片机的IO口,让灯泡按照一定的顺序或方式依次点亮和熄灭,从而形成灯光的流动效果。
本篇文档将总结单片机流水灯实验的原理、实验步骤和实验结果,并对其中的关键点进行说明和分析。
实验原理单片机流水灯实验的原理主要涉及到两方面:单片机的IO口和时序控制。
单片机的IO口单片机的IO口是其与外部设备进行数据交换和控制的接口,通过设置IO口的电平状态,可以控制外部设备的操作。
在流水灯实验中,我们将使用单片机的多个IO口分别控制多个灯泡的点亮和熄灭。
时序控制流水灯的效果是通过按照一定的时序来依次点亮和熄灭灯泡。
在单片机中,我们可以通过控制程序中的延时和循环来实现灯泡的时序控制。
实验步骤以下将详细介绍单片机流水灯实验的步骤:1.准备材料和工具:单片机、灯泡、电阻、面包板、导线等。
2.连接电路:将单片机和灯泡通过导线连接起来,同时将电阻与灯泡串联,用以限流。
3.编写程序:使用相应的编程软件,编写控制流水灯的程序。
程序主要包括初始化IO口、控制时序、循环控制灯泡的点亮和熄灭等。
4.烧录程序:将编写好的程序烧录到单片机中。
5.调试和测试:将单片机连接到电源,观察灯泡是否按照预定的流水灯效果点亮和熄灭。
如果效果不符合预期,可以通过修改程序和调整电路进行调试。
实验结果经过以上步骤,我们成功搭建了单片机流水灯的实验电路,并编写了控制流水灯的程序。
经过测试,实验效果良好,灯泡按照预定的顺序和方式点亮和熄灭。
实验中的关键点分析在单片机流水灯实验中,有几个关键点需要特别注意:1.IO口的选择:根据需要控制的灯泡个数,选择合适数量的IO口。
如果使用的IO口数量较多,可以考虑使用扩展芯片或IO口拓展模块。
2.电路的设计:在电路设计中,需要合理选择电阻的阻值,以确保灯泡正常工作,并保护单片机和其他电路。
3.程序的编写:程序的编写需要注意控制流水灯的循序和时序,以及延时和循环的设置。
实验一单片机并口简单应用(流水灯、数码管)实验目的1、了解简单单片机应用系统的设计方法。
2、了解单片机汇编语言程序的基本结构3、了解单片机汇编语言程序的设计和调试方法4、掌握应用PROTEUS仿真软件的操作方法。
5、掌握应用KEIL软件编辑、编译源汇编程序的操作方法。
6、培养良好的实验习惯。
实验内容1、AT89S51为主控芯片,用PROTEUS仿真设计简单单片机应用系统。
2、编程实现8个发光LED“流水”的现象,用一个按键控制灯的上、下、开花三种状态,先用查询。
3、用四个数码管开始现实185,做二个按键,加5,减4,最多加到210,最多减到150。
发辉部分:修改程序,用中断完成以上功能,用六位数码管显示学号后六位。
实验原理1、流水灯(1)实验原理图(可打印)(2)实验程序(必须手写)流水灯中断ORG 0000HAJMP MAINORG 0003HAJMP KEYMAIN:CALL INITLOOP:CALL MOVECALL DELAYAJMP LOOPINIT:MOV R3,#0FEHMOV R4,#0MOV P2,#0FFHMOV R0,#00HSETB IT0SETB EX0SETB EARETMOVE:CJNE R0,#00H,MOV2 MOV A,R3RL AMOV R3,AMOV P2,R3MOV2:CJNE R0,#01H,MOV3 MOV A,R3RR AMOV R3,AMOV P2,R3MOV3:CJNE R0,#02H,LEND MOV DPTR,#TABMOV R7,#0MOV R6,#4LOP: MOV A,R7MOVC A,@A+DPTRMOV P2,ALCALL DELAYINC R7DJNZ R6,LOP LEND: RETKEY: PUSH PSWPUSH ACCMOV A,R0INC ACJNE A,#03H,HU1MOV A,#00HHU1: MOV R0,APOP ACCPOP PSWRETIDELAY:MOV R2,#150DE1: MOV R5,#200DJNZ R5,$DJNZ R2,DE1RETTAB: DB 0e7H,0dbH,0bdH,07eH END;OK查询ORG 0000HAJMP STARTSTART:MOV R3,#0FEHMOV R4,#0MOV P2,#0FFHMOV R0,#00HMAIN:CALL DETCALL MOVEAJMP MAINDET:JB P3.2,DENDJNB P3.2,$MOV A,R0INC AMOV R0,ACJNE A,#03H,DENDMOV R0,#00HDEND:RETMOVE:CJNE R0,#00H,MOV2MOV A,R3RL AMOV R3,AMOV P2,R3MOV2:CJNE R0,#01H,MOV3MOV A,R3RR AMOV R3,AMOV P2,R3MOV3:CJNE R0,#02H,LENDMOV DPTR,#TABMOV R7,#0MOV R6,#4LOP: MOV A,R7MOVC A,@A+DPTRMOV P2,ALCALL DELAYINC R7DJNZ R6,LOPLEND: RETDELAY: MOV R4,#250DE1: MOV R5,#200DJNZ R5,$DJNZ R4,DE1RETTAB: DB 0e7H,0dbH,0bdH,07eH END;OK2、数码管显示(1)实验原理图(可打印)(2)实验程序(可打印)(3)数码管查询(4) ORG 0000H(5) AJMP MAIN(6)(7) MAIN:(8)MOV R2,#000(9)MOV R3,#185(10)(11)MANAGE:(12)LCALL COMPUTING(13)LCALL BCD(14)LCALL DISPLAY(15)AJMP MANAGE(16)(17)(18)COMPUTING:(19)JB P3.1,SU(20)JNB P3.1,$(21)INC R3(22)INC R3(23)INC R3(24)INC R3(25)INC R3(26)CJNE R3,#210,PD1(27)PD1: JC LEND(28)MOV R3,#210(29)SU: JB P3.2,LEND(30)JNB P3.2,$(31)DEC R3(32)DEC R3(33)DEC R3(34)DEC R3(35)CJNE R3,#150,PD2 (36)PD2: JNC LEND (37)MOV R3,#150 (38)LEND:RET(39)(40)(41)BCD:(42)MOV A,R2(43)MOV B,#100 (44)DIV AB(45)MOV 30H,A(46)MOV A,B(47)MOV B,#10(48)DIV AB(49)MOV 31H,A(50)MOV 32H,B(51)(52)MOV A,R3(53)MOV B,#100 (54)DIV AB(55)MOV 33H,A(56)MOV A,B(57)MOV B,#10(58)DIV AB(59)MOV 34H,A(60)MOV 35H,B(61)(62)DISPLAY:(63)MOV R7,#7(64)MOV R0,#30H (65)MOV DPTR,#TAB (66)MOV R6,#0FEH (67)LOOP:(68)MOV A,@R0(69)MOVC A,@A+DPTR (70)MOV P1,R6(71)MOV P2,A(72)LCALL DELAY (73)MOV A,R6(74)RR A(75)MOV R6,A(76)LCALL DELAY(77)INC R0(78)DJNZ R7,LOOP(79)RET(80)(81)DELAY:(82)MOV R5,#50(83)DE1:MOV R4,#10(84)DJNZ R4,$(85)DJNZ R5,DE1(86)RET(87)(88)(89)TAB: DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090H (90)(91)END(92)(93);OK(94)(95)中断(96) ORG 0000H(97) AJMP MAIN(98) ORG 0003H(99) AJMP KEY(100) ORG 0013H(101) AJMP KEY2(102)(103)MAIN:(104)LCALL INIT(105)MOV R2,#000(106)MOV R3,#185(107)(108)MANAGE:(109)LCALL BCD(110)LCALL DISPLAY(111)AJMP MANAGE(112)(113)INIT:(114) SETB IT0(115) SETB IT1(116) SETB EX0(117) SETB EX1(118) SETB EA(119) RET(120)(121)KEY: MOV A,R3 (122)ADD A,#5 (123)MOV R3,A (124)CJNE R3,#210,M1 (125)M1: JC KEND(126)MOV R3,#210 (127)AJMP KEND (128)KEY2: MOV A,R3 (129)SUBB A,#4 (130)MOV R3,A (131)CJNE R3,#150,M2 (132)M2: JNC KEND (133)MOV R3,#150 (134)KEND: RETI(135)(136)(137)BCD:(138)MOV A,R2(139)MOV B,#100(140)DIV AB(141)MOV 30H,A(142)MOV A,B(143)MOV B,#10(144)DIV AB(145)MOV 31H,A(146)MOV 32H,B(147)(148)MOV A,R3(149)MOV B,#100(150)DIV AB(151)MOV 33H,A(152)MOV A,B(153)MOV B,#10(154)DIV AB(155)MOV 34H,A(156)MOV 35H,B(157)(158)DISPLAY:(159)MOV R7,#7(160)MOV R0,#30H (161)MOV DPTR,#TAB (162)MOV R6,#0FEH (163)LOOP:(164)MOV A,@R0(165)MOVC A,@A+DPTR(166)MOV P1,R6(167)MOV P2,A(168)LCALL DELAY(169)MOV A,R6(170)RR A(171)MOV R6,A(172)LCALL DELAY(173)INC R0(174)DJNZ R7,LOOP(175)RET(176)(177)DELAY:(178)MOV R5,#50(179)DE1:MOV R4,#10(180)DJNZ R4,$(181)DJNZ R5,DE1(182)RET(183)(184)(185)TAB: DB0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090H (186)(187)END(188)(189);OK3、显示学号后六位(1)实验原理图(可打印)(2)实验程序(可打印)学号ORG 0000HAJMP MAINMAIN:MOV R2,#071MOV R3,#082MANAGE:LCALL BCDLCALL DISPLAYAJMP MANAGEBCD:MOV A,R2MOV B,#100DIV ABMOV 30H,AMOV A,BMOV B,#10DIV ABMOV 31H,AMOV 32H,BMOV A,R3MOV B,#100DIV ABMOV 33H,AMOV A,BMOV B,#10DIV ABMOV 34H,AMOV 35H,BDISPLAY:MOV R7,#7MOV R0,#30HMOV DPTR,#TABMOV R6,#0FEHLOOP:MOV A,@R0MOVC A,@A+DPTRMOV P1,R6MOV P2,ALCALL DELAYMOV A,R6RR AMOV R6,ALCALL DELAYINC R0DJNZ R7,LOOPRETDELAY:MOV R5,#50DE1:MOV R4,#10DJNZ R4,$DJNZ R5,DE1RETTAB: DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090H END实验总结1、实验中出现的问题,如何解决2、心得体会。
单片机设计—流水灯
流水灯是电子技术领域里最常见的发光元件,它的排列有许多模式,它的动态效果也会令人惊叹。
通常,它都是使用LED闪烁和循环表现出来,而且动态效果相当好,令人喜欢。
实现流水灯效果也可以使用单片机,使用单片机在模式比较简单,也可以实现很好的流水灯效果。
首先,我们需要用到单片机,一般可以选用51系列、增强型单片机,硬件环境的搭建包括单片机、晶振、外部存储器(如ROM、常数RAM)、I/O端口、看门狗、周边外设包括显示、AD、电源供电等等。
总的来说实现流水灯的工作的要点有:(1)将控制信号输入芯片;(2)编写程序给芯片,并调试主板电路;(3)控制LED闪烁,LED只能在程序中配置;(4)程序来驱动LED,按照要求实现流水灯特效。
在程序实现流水灯特效时,首先可以设置一个标量,即灯泡显示模式,该标量决定控制灯泡亮暗,以及显示延时。
接着,可以使用for循环结构语句来使LED闪烁,将用户自定义的标量赋给灯泡的控制位,将其输出到特定的端口,以实现要求的流水灯特效,以达到实现流水灯特效的目的。
流水灯的模式要根据使用场景设计,通过单片机控制LED,可以实现各种形式的流水灯,并且可以自行调整控制灯泡的频率、强度等参数,从而达到所需要的形式和效果。
通过使用单片机,我们可以更好地控制各种发光元件,实现各种美观的流水灯特效。
用单片机实现流水灯的控制设计1.引言当今时代是一个新技术层出不穷的时代,在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未见的速度被智能控制系统所取代。
单片机具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。
目前,一个学习与应用单片机的高潮正在工厂、学校及企事业单位大规模地兴起。
学习单片机的最有效方法就是理论与实践并重,本设计课题是流水灯的控制设计,流水灯是一串按一定的规律像流水一样连续闪亮。
流水灯控制是可编程控制器的一个应用,其控制思想在工业控制技术领域也同样适用。
2.硬件组成2.1 总体方案设计分析要求用8255的A口和B口做为输出,接16个发光二极管,从而实现16位流水灯的显示效果,基本的界限可如下图A所示,在C口的地两位接两个开关,实现两个扩展功能的控制。
i:基本流水灯显示电路A口和B口两个端口不能同时复制,从而在试验中可以用BX进行需要复制的数据的存储,因为BX可以分从BH BL两个部分进行独立的操作,在本次试验中用BH对A口进行赋值,用BL对B口进行赋值,通过演示一段时间再对BH BL 进行移位和输出,实现流水灯的效果。
ii:正反方向选择把PC.0口接在开关上,编写程序对C端口的数据进行读取,并进行判断,使得当PC.0为高电平的时候则灯进行左移,同时B口与A口相反。
iii:快慢速度控制把PC.1口接在开关上,编写程序对C端口的数据进行读取,并进行判断,使得当PC.1为高电平的时候则延时的时间缩短,使得流水灯的流水速度加快,低电平的时候则进行延时的时间变长,使得流水灯的流水速度加快。
3硬件原理设计A该模块的WR.RD分别练到PC总线接口模块的XIOW和XIORB该模块的数据(AD0~AD7)、地址线(A0~A7)分别连到PC总线接口模块的数据(D0~D7)、地址线(A0~A7)C 8255模块选通线CA连到PC总线接口模块的IOY3D 8255的PA0~PA7连到发光二极管的L1~L8;8255的PB0~PB7连到发光二极管的L9~L16E 8255的PC0 PC1分别练到开关K0 K1F 软件流程框图及程序清单按照单片机系统扩展与系统配置状况,单片机应用系统可分为最小系统、最小功耗系统及典型系统等。
实验一单片机并口简单应用(流水灯)7509 电气陈毅斌 32号实验目的1、了解单片机汇编语言程序的基本结构2、了解单片机汇编语言程序的设计和调试方法3、掌握顺序控制程序的简单编程实验仪器单片机开发板、万利仿真机、稳压电源、计算机实验原理1、流水灯硬件电路如图4-1所示,流水灯硬件电路由移位寄存器74LS164、功能选择开关J502、二极管、三极管、单片机并口(P0)、限流电阻等组成。
发光二极管连接成共阳极结构。
发光二极管点亮的条件是:阳极接高电平、各阴极接低电平。
因此,通过程序控制74LS164的Q0端。
Q0端输出0,公共端阳极就接成高电平,然后再按一定规则从P0口输出数据,发光二极管就会点亮。
图4-1 流水灯电路图2、单片机流水灯程序设计由上图可知,发光二极管要点亮,需要先把J502的2、3脚相连,三极管Q500导通,然后从P0口输出数据。
(1)控制三极管导通程序控制三极管有两种方法,第一种:在74LS164的第8脚产生一个正脉冲,此时1脚为0,三极管就导通;为1,三极管就截止。
第二种:在单片机IO模拟74LS164时序,一次输出一个字节,只要Q0=0即可控制三极管开通。
为1,三极管截止。
两种方法的程序流程如图4-2所示。
图4-2 流水灯位选信号控制(2)产生流水灯效果程序三极管导通后,就可以从P0口输出数据控制发光二极管。
P0口输出数据既可以编写程序逐个输出,也可以将输出数据序列定义在存储器中,然后用读程序存储器指令逐个取出并输出到P0口。
程序流程图如图4-3所示。
图4-3 流水灯程序流程图实验内容1、直接输出法输出数据序列LEDCLK bit P3.4LEDDIN bit P2.3ORG 0000HLJMP MAINORG 0030HMAIN: LCALL LedSequence ;调用LED此程序产生流水灯效果SJMP MAINLedSequence:CLR LEDCLK ;往74LS164的Q0端送一个0CLR LEDDIN ;CLK引脚产生一个正脉冲NOPSETB LEDCLKNOPCLR LEDCLKMOV P0,#0FEH ;为0的位对应的二极管亮,第一个灯亮MOV R7,#200 ;R7为延时量,N msLCALL DelayNms ;该程序延时时间由R7决定MOV P0,#0FDH ;第二个灯亮MOV R7,#200LCALL DelayNmsMOV P0,#0FBH ;第三个灯亮MOV R7,#200LCALL DelayNmsMOV P0,#0F7H ;第四个灯亮MOV R7,#200LCALL DelayNmsMOV P0, #11101111B ;第五个灯亮MOV R7,#200LCALL DelayNmsMOV P0, #11011111B ;第六个灯亮MOV R7,#200LCALL DelayNmsMOV P0, #10111111B ;第七个灯亮MOV R7,#200LCALL DelayNmsMOV P0,#01111111B ;第八个灯亮MOV R7,#200LCALL DelayNmsRETDelayNms:LCALL Delay1msDJNZ R7, $-3RETDelay1ms: ;延时1ms程序PUSH 07MOV R7,#250 ;1msNOPNOPDJNZ R7, $-2POP 07RETEND2、查表法输出数据序列LEDCLK bit P3.4LEDDIN bit P2.3ORG 0000HLJMP MAINORG 0030HMAIN: LCALL LedSequence ;调用LED此程序查表方法设置流水灯SJMP MAINLedSequence:LCALL LedLightMOV R6,#8 ;循环次数赋值MOV DPTR,#LedSequenceTab ;查表赋值首地址LedSequence1:MOV A,R6MOVC A,@A+DPTRCPL A ;取反使得只有一个位为0其余为1 MOV P0,AMOV R7,#200LCALL DelayNms ;调用延迟时间DJNZ R6,LedSequence1RETLedSequenceTab:DB 80H,40H,20H,10H,08H,04H,02H,01H,00HDelayNms:LCALL Delay1msDJNZ R7, $-3RETDelay1ms:MOV A,R7MOV R7,#250 ;1msNOPNOPDJNZ R7, $-2MOV R7,ARETLedLight:MOV B,#8MOV A,#0FEHCLR LEDCLKCLR LEDDINLedLight1:RLC AMOV LEDDIN,CSETB LEDCLKNOPCLR LEDCLKDJNZ B,LedLight1RET3.将学号后两位对应的二进制为1的灯点亮LEDCLK b it P3.4;LEDDIN bit P2.3;ORG 0000HSJMP MAINORG 0030HMAIN:MOV SP,#60H ;设置堆栈CLR LEDCLK ;开启三极管CLR LEDDINSETB LEDCLKMOV P0,#00010000B ;P0口送入值为0口灯亮MAIN1:AJMP MAIN1END运行结果:思考题1、请把学号后两位数进转换成二进制数,然后依次点亮其中为1对应的二极管,写出输出序列。
单片机实验报告流水灯单片机实验报告:流水灯引言:单片机是现代电子技术中非常重要的一部分,它广泛应用于各个领域,如家电、汽车、通信等。
单片机实验是学习单片机的基础,通过实际操作来理解单片机的原理和应用。
本报告将介绍一个常见的单片机实验项目——流水灯实验。
一、实验目的流水灯实验旨在通过控制单片机的IO口,实现多个LED灯按照顺序依次点亮和熄灭的效果。
通过这个实验,可以加深对单片机IO口的控制和编程的理解。
二、实验器材1. 单片机开发板:我们使用的是STC89C52开发板,它是一种基于8051内核的单片机开发板。
2. LED灯:我们使用了8个LED灯,分别连接到单片机开发板的8个IO口上。
3. 连接线:用于连接单片机开发板和LED灯。
三、实验原理流水灯实验的原理很简单,通过控制单片机的IO口输出高低电平来控制LED灯的亮灭。
当某个IO口输出高电平时,对应的LED灯点亮;当IO口输出低电平时,对应的LED灯熄灭。
四、实验步骤1. 连接电路:将8个LED灯分别连接到单片机开发板的8个IO口上,确保连接正确。
2. 编写程序:使用C语言编写单片机程序,控制IO口的高低电平变化。
程序的主要逻辑是通过一个循环,依次将某个IO口输出高电平,然后延时一段时间,再将该IO口输出低电平,再延时一段时间,以此循环实现流水灯的效果。
3. 烧录程序:将编写好的程序烧录到单片机开发板中,确保程序能够正确运行。
4. 调试实验:将单片机开发板连接到电源,观察LED灯是否按照预期的顺序点亮和熄灭。
如果有问题,可以通过调试程序或检查电路连接来解决。
五、实验结果经过调试和实验,我们成功地实现了流水灯的效果。
8个LED灯按照顺序依次点亮和熄灭,形成了一个流动的灯光效果。
这个实验不仅让我们学习了单片机的IO口控制,还提高了我们的动手能力和解决问题的能力。
六、实验总结通过这个实验,我们深入了解了单片机的原理和应用。
单片机作为一种微型计算机,具有体积小、功耗低、成本低等优点,广泛应用于各个领域。
试验1 单片机并口简单应用(流水灯)
实验目的
1、了解单片机C语言程序的基本结构
2、了解单片机C语言程序的设计和调试方法
3、掌握顺序控制程序的简单编程
4、熟悉51单片机的端口使用
实验仪器
单片机开发试验仪、稳压电源、计算机
实验原理
1、硬件电路
如图1所示,流水灯硬件电路由发光二极管、单片机并口(P0)、限流电阻等组成。
发光二极管连接成共阳极结构。
发光二极管点亮的条件是:阳极接高电平、各阴极接低电平。
因此,二极管公共端阳极就接成高电平,然后再按一定规则从P0口输出数据,发光二极管就会点亮。
图1 流水灯电路图
2、程序流程图如下。
实验内容:1、开发板接线图
延时
P0口初态循环右移1位
P0口状重新赋值0XFE
开始
P0口输出0XFE
P0是否等于0X00
Y
N
2、开发环境设置
打开keil软件,版本μ Vision2 ,μvision3,μvision4 都一样,在这里用μvision4版本演示,打开之后如下图,有的时候会默认打开上次使用的工程,单击Project 菜单,选择 Close Project 关闭了默认打开的工程,显示下图界面:
我们要建立新的工程,选择Project→ newμ vision projiect…
选择工程要保存的路径,输入工程文件名,如图
点击保存后会弹出一个对话框,要求用户选择单片机型号,可以根据用户使用的单片机来选择,我们使用的STC90单片机是兼容51内核的,Keil C51 几乎支持所有的51内核单片机,51内核具有通用型,如果程序用的资源不是太复杂,我们可以选择任意一款51单片机内核就行。
例程以添加Atmel 的AT89C51来说明。
如图,然后,单击确定(OK)。
功能描述
如果出现下面的界面:单击是就可以,意思是将单片机的启动代码添加到工程,我们不用修改。
到目前我们还没建立一个完整的工程,只是有工程的名字,框架,工程中还没有任何文件代码,(除了启动代码,有的keil 版本不显示启动代码),接下来我们添加文件及代码。
单击菜单File→New 选项,或者单击界面上的快捷图标,新建文件串口如下。
界面显示的Text1就是我们刚刚加入的文件,但是这个文件与我们的工程还没有直接联系起
来,单击图标,保存我们当前的text1文件,输入要保存的文件名,同时要输入文件扩展名,扩展名很关键,用C语言编写的程序,则必须为**.c,汇编语言必须为**.asm(**为文件名),文件名是用户自己取的。
填好文件名后单击保存。
回到编辑界面,单击Target1 前面的“+”号,然后在Source Group 1 上右键单击,选择
Add Files to Group Source Group1,选中我们刚才建立的.c文件,这里是led test.c,
单击add,只需单击一次。
之后单击Close就可以。
回到主界面后,单击Source Group 1前的“+”号,刚刚添加的文件显示在里面。
通过以上步骤我们就建立好了一个工程。
接下来就可以写代码了。
在写代码之前介绍介个常用的按钮:
按钮:用来编译我们正在操作的文件。
按钮:用来编译修改过的文件,并生成应用程序共单片机下载。
按钮:用来重新编译当前工程中所有的文件,并生成应用程序共单片机下载。
因为很多工程不止有一个文件,当有多个文件时,用它进行编译。
按钮:用来打开“Option for Target”对话框,对当前工程进行设置。
工程的各个参数都可以在这里设置,具体的设置方法用到的时候,再和大家详细讲述。
以上几个按钮是常用的,其他按钮在使用的时候再介绍。
3、编写程序
实验名: 流水灯实验
实验说明 : 延时实现LED流水灯效果P0口八个灯作跑马灯。
//--包含你要使用的头文件
#include <reg52.h> //此文件中定义了52的一些特殊功能寄存器
#include <intrins.h>
//--声明全局函数--//
void Delay10ms(unsigned int c); //延时10ms
/****************************************************************************** * 函数名 : main
* 函数功能 : 主函数
* 输入 : 无
* 输出 : 无
******************************************************************************/
void main()
{
unsigned char LED;
LED = 0xfe; //0xfe = 1111 1110
while (1)
{
P0 = LED;
Delay10ms(50);
LED = LED << 1; //循环右移1位,点亮下一个LED "<<"为左移位
if (P0 == 0xFF) //当它全灭的时候,重新赋值
{
LED = 0xfe; // 0xfe = 1111 1110
}
}
}
/****************************************************************************** * 函数名 : Delay10ms
* 函数功能 : 延时函数,延时10ms
* 输入 : 无
* 输出 : 无
******************************************************************************/
void Delay10ms(unsigned int c) //误差 0us
{
unsigned char a, b;
//--c已经在传递过来的时候已经赋值了,所以在for语句第一句就不用赋值了--// for (;c>0;c--)
{
for (b=38;b>0;b--)
{
for (a=130;a>0;a--);
}
}
}。