河南理工大学微机原理与单片机实验报告、课程设计 流水灯
单片机流水灯实验报告
实验一流水灯实验报告一、实验目的1、熟练掌握JC-51A型开发板的使用方法和注意事项。
2、了解简单单片机应用系统的设计方法。
3、掌握应用KEIL软件编辑、编译源汇编程序的操作方法。
4、掌握应用USBISP烧录软件STC-ISP的操作方法。
5、掌握89C52RC单片机的流水灯操作过程。
二、实验内容在JC-51A开发板上实现8个发光LED“流水”的现象,并通过编写程序控制流水现象。
三、实验主要仪器及软件1,JC-51A开发板2,一台电脑3,STC-ISP-V479软件4,KEIL软件四、实验说明当8255 的PA口有低电平输出时,相应的发光二极管就会点亮。
应用这一原理我们可以容易的点亮一个数码管,例如令PA口输出0111 1111时D1就会点亮。
若再把0111 1111向右循环一位,利用PA口输出,就会点亮D2。
在发光二极管两次点亮的间隔中加延时程序,让每次点亮停留一段时间,像这样人眼就可以看到“流水”的现象。
五、实验步骤步骤一:把学习板连接到电脑上,把光盘安装到电脑里,注意电脑右下方显示的是COM几端口;步骤二:打开光盘看到“4.程序烧写软件”字样并打开,安装PL-232驱动这个软件,并打开STC手动下载,找到STC_ISP_V479.exe并打开;步骤三:打开看到一个界面,MCU type选择STC89C52RC,COM端口选择刚刚看到的几端口;步骤四:点击open file,选择光盘里5.MINI-V22实例源程序,打开汇编参考样例,打开流水灯2,选择hex格式的文件,点击确定;步骤五:点击download,如果连接不成功,重置下学习板的开关,这时就看到学习板的流水灯的滚动了。
六、广告流水灯程序ORG 00HMOV P2,#80HSTART:MOV A,#0FFH ;赋初值CLR CMOV R2,#8LOOP:RRC A ; 带进位右移MOV P1,ACALL DELAYDJNZ R2,LOOPMOV R2,#7LOOP1:RLC A ; 带进位左移MOV P1,ACALL DELAYDJNZ R2,LOOP1JMP STARTDELAY:MOV R3,#20 ; 延时0.2秒D1: MOV R4,#20 D2: MOV R5,#248DJNZ R5,$DJNZ R4,D2DJNZ R3,D1RETEND七、实验原理图更改此处可以使流水灯速度发生变化八、总结:通过本实验,懂得如何安装kell软件以及实验板,懂得单片机的调试,初步了解并熟悉实验板上单片机I/O口和LED 灯的电路结构,能通过修改程序实现仿真板上不同灯的亮灭情况,并希望通过多次试验对它有更多的了解。
单片机实训报告——花样流水灯的制作
单片机实训报告——花样流水灯的制作班级:电气一班学号:110101127姓名:李亚龙一、花样流水灯的设计方案流水灯实际上就是一个带有八个发光二级管的单片机最小应用系统,即为由发光二极管、晶振、复位、电源等电路和必要的软件组成的单个单片机。
如果要让P0.0口的LED2亮起来,那么只要把P0.0口的电平变为低电平就可以了;相反,如果要接在P0.0口的LED1熄灭,就要把P0.0口的电平变为高电平;同理,接在P0.0~P0.7口的其他7个LED的电亮和熄灭的方法同LED2。
因此,要实现流水灯功能我们只要将发光二极管LED2~LED9依次点亮、熄灭,8只LED灯便会一亮一暗的做流水灯了。
对8段LED数码管显示器的控制,包括“显示段”和“公共端”两个地方的控制。
其中显示段用来控制字符的形状,公共端用来控制若干个LED中的那一只被选中,前者称为“段选”,后者称为”位选”。
只有二者结合起来,才能在指定的LED上显示指定的字形。
显然,要显示某种字形就应该使此字形的相应字段点亮,按照dp、g、e、f、e、d、c、b、a的顺序,dp为最高位,a为最低位,引脚输入不同的8位二进制编码,可显示不同的数字或字符。
二、花样流水灯的硬件电路设计时钟电路是计算机的心脏,它控制着计算机的工作节奏,CPU 就是通过复杂的时序电路完成不同的指令功能的,89C52的时钟信号可以由两种方式产生:一种是内部方式,利用芯片内部的振荡电路,产生时钟信号;另一种为外部方式,时钟信号由外部引入。
单片机有多种复位电路,本系统采用电平式复位与上电复位方式,如下图所示当上电时C1相当于短路时,使单片机复位,在正常工作时,按下复位键是单片机复位。
显示部分主要是由八个LED和四个七段数码管组成,八个LED 由限流电阻限流后接入89C52的P0口。
三、花样流水灯的软件设计#include <reg52.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned intsbit key3=P3^1;sbit key2=P3^2;sbit key1=P3^3;uchar code table[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09}; uchar code moshi1[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};uchar code moshi2[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};uchar code moshi3[]={0x00,0x00,0xff,0x00,0x00,0xff,0x00,0x00};uchar code moshi4[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00};uchar code moshi5[]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00};uchar code moshi6[]={0x7e,0x3c,0x18,0x00,0x81,0xc3,0xe7,0xff};uchar moshi,dingshi; //模式,定时uchar shijian,k1; //时间控制uchar num0,num;void delay(uint x) //延时程序{uchar i;while(x--);for(i=0;i<120;i++);}void keyscan() //键盘扫描{if(key1==0){delay(10);if(key1==0) //按键1,模式循环{moshi++;if(moshi==7)moshi=1;TR0=1;k1=1;while(!key1);}}if(key2==0) //按键2,时间调整{delay(10);if(key2==0){shijian++;if(shijian==15)shijian=15;while(!key2);}}if(key3==0) //按键3,时间复位{delay(10);if(key3==0){shijian--;if(shijian==1)shijian=1;while(!key3);}}}void display() //数码管显示{P1=table[moshi];P2=0xfe; //从左向右显示delay(2);P1=0XFF;P2=0XFF; //数码管不显示delay(2);P1=table[dingshi/10]; //十位显示P2=0xfd;delay(2);P1=table[dingshi%10]; //个位显示P2=0xfe;delay(2);}void liushuideng() //流水灯显示{switch(moshi) //模式选择{case 1:P0=moshi1[num];break;case 2:P0=moshi2[num];break;case 3:P0=moshi3[num];break;case 4:P0=moshi4[num];break;case 5:P0=moshi5[num];break;case 6:P0=moshi6[num];break;}}void disp() //显示器{num++;if(num==8){num=0;dingshi--;if(dingshi==0){dingshi=shijian;moshi++;if(moshi==7)moshi=1;}}}void init() //初始化{TMOD=0X01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=0;shijian=5;dingshi=5;moshi=0;P3=P0=0xff;num=num0=0;}void main(){init();while(1){keyscan(); //键盘扫描display(); //数码管显示if(k1==1) //模式选择liushuideng(); //流水灯显示}}void t0_time() interrupt 1 //中断{TH0=(65536-50000)/256;TL0=(65536-50000)%256;num0++;if(num0==6){num0=0;disp();}}四、总结实训中我发现主要问题是在焊接电路板的时候有虚焊,导致电路接触不良,还有多焊导致电路板损坏或短路。
微机原理与接口技术课程设计报告音乐流水灯
微机原理与接口技术课程设计论文题目:音乐流水灯姓名:鞠强学号:201330020228班级:1330202专业:自动化2015年6月一、实验任务及要求任务:1、掌握综合使用基本输入输出设备、通用接口芯片、专用接口芯片的方法;2、掌握实时处理程序的编制和调试方法。
要求:用8255、8253、8259配合8086使蜂鸣器发出唱歌声同时还能够使用数码管进行边跳舞边唱歌实验。
二、硬件连线键盘的控制、LED显示模块:采用74系列模块控制键盘的行信号Q_0、Q_1、Q_2、Q_3分别与开放的输入信号Q0、Q1、Q2、Q3相连,键盘的列信号P_0、P_1、P_2和开放的输出信号P0、P1、P2相连。
74芯片的片选信号CS1接地址译码信号340H, CS2接地址译码信号360H。
蜂鸣器发声控制:由8255模块控制;PC0直接与蜂鸣器相连,CS_4连接到实验仪中部的地址输出端CS_4中断处理模块:由8259控制8259的片选CS-1连地址输出300H,INT1连总线输入INTR,8259模块的INT-A连总线的INTA,8259的SP/1连+5V, 8259的IRQ0连接到8253的OUT0。
三、程序流程图主程序初始化各阶段寄存器及相关变量初始化8253、8255芯片设置中断向量、开放8253中断屏蔽开放处理器中断中断服务程序保护现场判断时间是否不小于59分55秒报时扫描键盘G 键?调用启停子程序S COUNT COUNT=40? ADDONE 子程序COUNT 清0显示时间,调用显示时间子程序结束中断(发EOI 命令)恢复现场中断返回Y YN Y四、实验源代码DATA SEGMENT AT 0 USE16ORG 1000HHOUR DW ?MIN DW ?SEC DW ?SLL DB ?COUNT DB ?DATA ENDSCODE SEGMENT USE16ASSUME CS:CODE,DS:DATAORG 1500HBEG:JMP STARTTAB DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,00H ;0~F 的共阴极七段译码表00H表示不显示任何东西KEYCOD DB 0EEH,0DEH,0BEH,0EDH,0DDH,0BDH,0EBH,0DBH,0BBH,0E7H,0D7H,0B7H ;行列编码值KEYV AL DB 0,1,2,3,4,5,6,7,8,9,0AH,0BH ;所有键的键面值PORT1 EQU 340H ;数码管段选端口PORT2 EQU 360H ;数码管位选端口,键盘矩阵的行列端口START: MOV EAX,60000000HMOV CR0,EAXMOV AX,DATAMOV DS,AXMOV HOUR,0203H ;小时分钟以及秒的初始化MOV MIN,0509HMOV SEC,0502HLEA BX,TABMOV SLL,0 ;开始暂停标志位置0MOV COUNT ,0 ;中断次数计数初始值为0;8255初始化,用于产生报时的脉冲MOV EAX,80808080H;控制字MOV DX,20CH ;后面的是4个8255的控制端口20C-20F (这个地址由实验台决定)OUT DX,EAX ;初始化8255,A、B、C口均为方式0输出MOV DX,20BHMOV AL,0FFHOUT DX,AL;8253初始化,用于产生周期为25ms的中断MOV AL,00110110B ;计数器0,先低后高,方式三,二进制MOV DX,32cH ;写往控制口OUT DX,ALMOV DX,320H ;计数器0写初值:47KHz*25msMOV AX,1175OUT DX,ALMOV AL,AHOUT DX,ALMOV AL,0FEH ;IR0开屏蔽OUT DX,ALXOR AX,AX ;装载中断向量MOV ES,AXMOV DI,08H*4MOV AX,OFFSET INTSRMOV ES:[DI],AXMOV AX,SEG INTSRMOV ES:[DI+2],AXSTI ;开中断JMP $INTSR PROC ;中断服务程序CMP MIN,0509H ;比较当前时间是否在59分55秒~00分00秒之间JL NEXT1CMP SEC,0505HJL NEXT1MOV DX,20BHMOV AL,00H ;蜂鸣器低有效,报时OUT DX,ALJMP NEXT2NEXT1: CMP MIN,0JNE NEXT3CMP SEC,0JNE NEXT3MOV DX,20BHMOV AL,00H ;蜂鸣器低有效,报时OUT DX,ALJMP NEXT2NEXT3: MOV DX,20BHMOV AL,0FFHOUT DX,ALNEXT2: CMP COUNT,20 ;用8255产生0.5ms的蜂鸣JLE NEXT4MOV DX,20BHMOV AL,0FFHOUT DX,ALNEXT4:CMP SLL,0JZ LOBCALL TSTARTLOB: CALL KEYCHECK ;检测有无键按下CMP AL,0AH ;启停键按下,调用启停程序JNZ NEXT5CALL TSTARTJMP NEXT6NEXT5: CMP AL,0BH ;设置键按下,调用设置时间程序JNZ NEXT6CALL SETTIMEINTSR ENDPTSTART PROC ;控制时间暂停和开始。
左右来回循环的流水灯实验报告
青 岛 科 技 大 学微机原理与接口技术综合课程设计(报告)题 目 __________________________________指导教师__________________________ 学生姓名__________________________ 学生学号_________________________________________________________院(部)____________________________专业________________班______年 ___月 ___日直流电机控制综合实验 周艳平宋雪英 01 信息科学技术学院计算机科学与技术0961 2012 12 27摘要 (2)1、单片机概述 (2)2、仿真软件介绍 (2)3、需求分析 (3)一、课程设计目的 (3)二、课程设计要求 (4)三、实验内容 (4)1、设计任务与要求 (4)2、系统分析 (4)1).硬件电路设计(画出原理图、接线图) (5)2)软件框图 (7)3、用keil建项目流程 (8)4、程序清单 (9)4、系统调试 (11)四、设计总结(结论) (12)摘要近年来,随着电子技术和微型计算机的发展,单片机的档次不断提高,起应用领域也在不断的扩大,已在工业控制、尖端科学、智能仪器仪表、日用家电、汽车电子系统、办公自动化设备、个人信息终端及通信产品中得到广泛的应用、成为现代电子系统中最重要的智能化的核心部件。
而AT89C51就是其中一种,它是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMO8位微处理器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
本课程设计介绍一种LED小灯控制系统的设计方法,以单片机作为主控核心,与按键、排阻、电阻、电容等较少的辅助硬件电路相结合,利用软件实现对LED灯进行控制。
能够通过按键控制8个LED小灯从左到右依次点亮。
关键字:单片机、LED流水灯1、单片机概述单片机微型计算机是微型计算机的一个重要分支,也是颇具生命力的机种。
实验一51单片机流水灯实验实验报告
实验一 51单片机流水灯实验实验报告
“流水灯”实验报告 一、实验目的 1.了解单片机I/O口的工作原理。 2.掌握51单片机的汇编指令。 3.熟悉汇编程序开发,调试以及仿真环境。 二、实验内容 通过汇编指令对单片机I/O进行编程(本实验使用P0口),以控制八个发光二极管以一定顺序亮灭。(即流水灯效果) 三、实验原理 通过更改P0口8位的高低电平,分别控制8个发光二极管的亮灭。具体的亮灭情况如下表:
要实现“流水灯”效果,也就是需要将P0口的输出值发生以下变化: FE→FD→FB→F7→EF→DF→BF→7F→BF→DF→EF→F7→FB→FD→FE→...... 可以使用一个循环,不断对数据进行移位运算实现。这里的移位指令采用RL和RR,即不带进位的位移运算指令。如果使用带 进位的位移运算指令(RLC和RRC),则需要定期把CY置0,否则会出现同时亮起两个发光二极管的情况。 四、实验过程 1.在仿真系统中绘制RG 0000H Delay: MOV R0, #0FFH SJMP Start Delay1: MOV R1, #0FFH Start: MOV A, #0FEH Delay2: NOP MOV P0, A DJNZ R1, Delay2 CLR P2.7 DJNZ R0, Delay1 CLR P3.7 RET Move: MOV R2, #7H END MOV R3, #7H RMove: RL A MOV P0, A CALL Delay DJNZ R2, RMove LMove: RR A MOV P0, A CALL Delay DJNZ R3, LMove SJMP Move 五、实验结果 为了便于实验结果的描述,下面分别把P0.0, P0.1…, P0.7对应的发光二极管编号为1, 2, …, 8号二极管。 在仿真系统中,先从1号二极管下面是在仿真系统中的实验结果:
单片机课程设计报告流水灯(WORD档)
XX工程学院单片机课程设计报告题目:流水灯学生姓名:学号:系部名称:职业技术学院班级:机电一体化Z11-1 指导教师:目录摘要 (3)一、课程设计题目 (4)二、设计任务及要求 (4)三、实验方案 (4)四、流程图 (4)五、硬件电路 (6)六、软件设计 (6)1 主体程序 (6)2 键扫描子程序 (6)3 闪烁控制程序 (6)4 延时子程序 (6)5 源程序设计 (7)七、功能调试 (12)八、设计总结 (12)九、参考文献 (13)【摘要】单片机课程设计主要是为了让我们增进对单片机芯片电路的感性认识,加深对理论方面的理解。
了解软硬件的有关知识,并掌握软件设计过程、方法及实现,为以后设计和实现应用系统打下良好基础。
另外,通过简单课题的设计练习,使我们了解必须提交的各项工程文件,达到巩固、充实和综合运用所学知识解决实际问题的目的。
一、课程设计题目:流水灯二、设计任务及要求:任务:完成对接在P1,P3口的发光二极管闪亮控制程序的设计1.用程序延时方法让P1的一个LED小灯每隔1S交替闪亮2.用程序延时方法让P1的8个LED小灯循环(每个亮50MS)闪亮3.用程序延时方法让P1的8个LED小灯追逐闪亮(50MS间隔变化)4.用程序延时方法让P1、P3的16个LED小灯循环(每个亮50MS)闪亮要求:1. 根据硬件电路原理,画出接线2. 设计出相应的软件程序三、实验方案:方案:单片机采用40脚的89C52标准双列直插系列,有4个标准输入/输出端口共32位控制端口。
本次设计采用并行口低电平(吸电流)直接驱动LED发光管发光形式,选择了P1和P3口的16个端口进行模拟LED小灯控制,如要多些小灯单元可再将P2口、P0口及其他空余端口用LED小灯驱动控制。
因系统功能要求能控制灯亮的方式,在P0.0—P0.3端口接了4个按键小开关,每个小开关可控制一种亮灯方式。
在端口较紧张的情况下,LED小灯驱动也可用串入/并出移位寄存器(如74HC595),单片机用并行移位方式进行驱动。
单片机课程设计-流水灯
单片机课程设计报告题目:自制流水灯专业班级机械111班姓名学号 201110824126一课程设计简介单片机课程设计的目的主要是让生活在信息时代的我们,将所学知识应用于生产生活当中,熟悉单片机的使用方法和技巧,掌握具有综合功能的小系统的设计和编程,方案的论证,选择,实施与完善。
通过对各种系统的设计、制作、了解信息采集测试、控制的全过程,提高在电子工程设计和实际操作方面的综合能力,初步培养在完成项目过程中所应具备的基本素质和要求。
培养研发能力,通过对电子电路以及面对硬件对象,利用所学知识进行相应程序的设计,初步掌握在给定条件和要求的情况下,掌握如何巧妙合理地去设计系统中的各部分电路,并将它们有序的连接起来。
提高查阅资料、语言表达能力和将理论转化为实际的能力,以此巩固所学的知识,并将之有效地运用到实际生产生活中。
学生通过单片机的硬件和软件设计、安装、调试、整理资料等环节,初步掌握工程设计方案和组织实践的基本技能,逐步熟悉开展科学实践的程序和方法。
1.课程设计目的(1)课程设计功能描述:这个小设计是运用51单片机自制了一种简单的流水灯,利用4个开关来控制4种不同的状态。
采用循环程序结构编程,每一位接收一个数据可令到该位变成低电平,其他位都是高电位,延时一段时间,让这个数据再移向高位,实现流水的效果。
(2)效果描述:流水灯根据不同的开关控制会有4种不同的状态效果。
①开关1闭合,LED灯从左到右依次点亮;②开关2闭合,LED灯从右到左依次点亮;③开关3闭合,LED灯1、3点亮,灯2、4熄灭;④开关4闭合,全部LED 灯亮灭闪烁。
二课程设计硬件系统1.硬件总电路图:图(1)2.子系统描述:(1)CPU:(电路图如图2)AT89C51单片机是美国ATMEL公司生产的低电压、高性能CMOS8位单片机,具有丰富的内部资源:4kB闪存、128BRAM、32根I/O口线、2个16位定时/计数器、5个向量两级中断结构、2个全双工的串行口,具有4.25~5.50V的电压工作范围和0~24MHz工作频率,使用AT89C51单片机时无须外扩存储器。
单片机流水灯实验报告
单片机流水灯实验报告:实验一:用C51实现流水灯实验实验要求:完成亮流水,即LED从低位流向高位流动,每次流动一位,且每次只亮一个LED灯,其它LED灭。
实验原理:单片机流水的实质是单片机各引脚在规定的时间逐个上电,使LED灯能逐个亮起来但过了该引脚通电的时间后便灭灯的过程,实验中使用了单片机的P2端口,对8个LED灯进行控制,要实现逐个亮灯即将P2的各端口逐一置零,中间使用时间间隔隔开各灯的亮灭。
使用r1或rr a实现位的转换。
实验内容:通过仿真来实现实验电路图代码如下;for(x=0;x<8;x++){P0=num[x];delay();}for(x=6;x>0;x--){P0=num[x];delay();}P0=0xfe;实验结果:实验程序:#include<REG51.H>void delay();//延时函数声明void main()//主函数{unsigned charx,num[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};while(1){for(x=0;x<8;x++){P0=num[x];delay();}for(x=6;x>0;x--){P0=num[x];delay();}P0=0xfe;}}void delay()//延时函数,无符号字符型变量i为形式参数{unsigned int j,k;//定义无符号字符型变量j和kfor(k=0;k<500;k++)//双重for循环语句实现软件延时for(j=0;j<100;j++);}实验总结:这次试验通过仿真实验软件实现流水灯实验,充分学会了keil 软件和Proteus电路仿真的联合调试,为后期的实验做足了功课。
也认识到仿真实用性。
单片机(Single-Chip Microcomputer)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。
河南理工大学单片机实验报告
单片机验收报告姓名:学号:班级:学院:实验一流水灯实验一、实验目的1)简单 I/O 引脚的输出2)掌握软件延时编程方法3)简单按键输入捕获判断二、实验实现的功能1)开机是点亮 12 发光二极管,闪烁三下2)按照顺时针循环依次点亮发光二极管3)通过按键将发光二极管的显示改为顺逆时针方式三、系统硬件设计四、系统软件设计/********程序名:流水灯实验******************程序功能:按键控制流水灯的顺逆旋转*************完成时间: 2015年12月29号下午**********完成人:电科1303班何海坤*//****头文件,注:如果没有添加stc10.h文件到keil安装路径里,则需要添加,否则请将头文件改成reg51.h*****/#include<stc10.h>/****宏定义****/#define uchar unsigned char#define uint unsigned int/***定义按键端口***/sbit key = P3^6;sbit keyl = P0^5;/****led控制数组******/uchar table[] ={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xfb,0xf7,0xef,0xdf};//当引脚电平为时,引脚对应的led亮/******子函数定义*******/void delay1ms(); //延时函数1ms时间void delaynms(uint); //延时函数自定义毫秒数void delay(); //定义延时函数100ms时间void led_init(); //初始化led全体同时亮灭三次/**主函数**/void main(){uchar m = 0;uchar k = 0;keyl = 0 ;led_init(); //led初始化为全体led同时闪灭三次while(1){if(!key){delaynms(5);if(!key){m++;if(m == 2){m = 0;}while(!key);}}if(m == 0){k++;if(k == 13)k=1;}else k--;if(k == 0)k = 12;switch(k-1){case 0 : P2 = table[0];P3 = 0xff;delay(); break;case 1 : P2 = table[1];delay(); break;case 2 : P2 = table[2];delay(); break;case 3 : P2 = table[3];delay(); break;case 4 : P2 = table[4];delay(); break;case 5 : P2 = table[5];delay(); break;case 6 : P2 = table[6];delay(); break;case 7 : P2 = table[7];P3 = 0xff;delay(); break;case 8 : P3 = table[8];P2 = 0xff;delay(); break;case 9 : P3 = table[9];delay(); break;case 10 : P3 = table[10];delay(); break;case 11 : P3 = table[11];P2 = 0xff;delay(); break;}}}/******子函数体********/void delay1ms(void) //误差 0us {unsigned char a,b,c;for(c=1;c>0;c--)for(b=222;b>0;b--)for(a=12;a>0;a--); }void delaynms(uint z){while(z--){delay1ms();}}void delay(){ uchar z = 100;while(z--){delay1ms();}}void led_init(){uchar i ;for(i = 0; i<3;i++){P2 = 0x00;P3 = 0x00;delaynms(500);P2 = 0xff;P3 = 0xff;delaynms(500);}}五、实验过程中遇到的问题及解决方法实验中的问题:一开始是用左移和for循环控制led灯,这样的话不能及时的检测按键信息,总是在八个灯循环完之后才检测到按键。
单片机流水灯实验报告
实验目的:实现单片机流水 灯功能
实验结果:LED灯按照预设 顺序依次点亮,实现流水灯
效果
分析与讨论:实验结果与预 期相符,验证了单片机流水
灯功能的实现。
实验结果分析
实验目的:验证单片 机流水灯控制电路的
设计与实现
实验设备:单片机、 LED灯、电阻、电源
等
实验步骤:编写程序、 连接电路、运行程序、
观察现象
实验过程中,对实验结果 的分析不够全面,容易导 致实验结论不准确。
实验过程中,对实验数据 的记录不够详细,容易导 致实验数据丢失。
实验过程中,对实验设备 的维护不够重视,容易导 致实验设备损坏。
实验过程中,对实验环境 的控制不够严格,容易导 致实验结果不准确。
对未来实验的展望
创新实验方法:尝试新的实 验方法,提高实验效果
掌握流水灯电路 的搭建方法
学习单片机的编 程和调试方法
掌握流水灯电路 的调试方法
添加标题
添加标题
添加标题
添加标题
培养实践操作和问题解决能力
通过实验操作, 提高动手能力
学习单片机的基 本原理和编程方
法
培养发现问题、 分析问题和解 决问题的能力
提高团队合作和 沟通能力
02
实验设备
单片机开发板
添加标题 添加标题 添加标题 添加标题 添加标题 添加标题
编写流水灯程序
确定流水灯的 硬件连接方式
编写流水灯控 制程序
编译并下载程 序到单片机
调试程序,确 保流水灯正常 工作
0
0
0
0
1
2
3
4
烧录程序到单片机
准备烧录器:选择合适的烧录器,如USB烧录器 连接单片机:将烧录器连接到单片机的烧录接口 打开烧录软件:启动烧录软件,选择要烧录的程序文件 开始烧录:点击烧录按钮,开始烧录程序到单片机 检查烧录结果:烧录完成后,检查单片机的运行情况,确保程序正常运行
单片机实验流水灯报告
本实验主要是采用延时程序来控制“流水”的功能,同时采用中断进行亮与暗闪烁的效果,使用C52的P0口进行对LED的控制。过程的主要分析如下:
#include<reg52.h>
#include<intrins.h>
unsigned int i=0;//定义变量i;
unsigned char data x=0xfe; //定义初值;
#include<intrins.h>
unsigned int i;
unsigned char data x=0xfe;
void main()
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
while(1)
{
P0=x;
}
}
void time0() interrupt 1
1写完代码后单击project菜单再在下拉菜单中单击builttarget选项或者使用快捷键f7编译成功后再单击debug菜单在下拉菜单中单击startstopdebugsession或者使用快捷键ctrlf5点击run进行运行或者按f11进行单步运行
实验七LED流水灯程序
姓名
XXXX
学号
106032010128
void delay()//延时函数;
{
int a,j;
for(a=0;a<1000;a++)
{
for(j=0;j<100;j++)
;
}
}//主函数;
void main()
{
P0=x;
单片机流水灯实验报告
单片机流水灯实验报告电子信息工程学系实验报告课程名称:单片机原理及接口实验项目名称:实验2 流水灯实验时间: xx-10-21 班级:电信092 姓名:蔡松亮学号: 910706247一、实验目的:进一步熟悉keil仿真软件、proteus仿真软件的使用。
了解并熟悉单片机I/O口和LED灯的电路结构,学会构建简单的流水灯电路。
掌握C51中单片机I/O口的编程方法和使用I/O口进行输入输出的注意事项。
二、实验原理:MCS-51系列单片机有四组8位并行I/O口,记作P0、P1、P2和P3。
每组I/O口内部都有8位数据输入缓冲器、8位数据输出锁存器及数据输出驱动等电路。
四组并行I/O端口即可以按字节操作,又可以按位操作。
当系统没有扩展外部器件时,I/O端口用作双向输入输出口;当系统作外部扩展时,使用P0、P2口作系统地址和数据总线、P3口有第二功能,与MCS-51的内部功能器件配合使用。
以P1口为例,内部结构如下图所示:图 P1口的位结构作输出时:输出0时,将0输出到内部总线上,在写锁存器信号控制下写入锁存器,锁存器的反向输出端输出1,下面的场效应管导通,输出引脚成低电平。
输出1时,下面的场效应管截止,上面的上拉电阻使输出为1。
作输入时:P1端口引脚信号通过一个输入三态缓冲器接入内部总线,再读引脚信号控制下,引脚电平出现在内部总线上。
I/O口的注意事项,如果单片机内部有程序存贮器,不需要扩展外部存贮器和I/O接口,单片机的四个口均可作I/O口使用;四个口在作输入口使用时,均应先对其写“1”,以避免误读;P0口作I/O 口使用时应外接10K的上拉电阻,其它口则可不必;P2可某几根线作地址使用时,剩下的线不能作I/O口线使用;P3口的某些口线作第二功能时,剩下的口线可以单独作I/O口线使用。
三、实验环境:硬件:PC机,基本配置CPU PII以上,内存2G 软件:keil 2, Proteus 7.5四、实验内容及过程:1、用Proteus画流水灯电路图流程:1)、运行Proteus仿真软件,单击pick from libraries,打开搜索元器件窗口,如图 1 所示:图 1 打开搜索元器件窗口2)、搜索添加元器件,如图 2 所示:图2 搜索添加元器件窗口3)、添加元器件,修改元器件的参数,绘制流水灯原理图,元器件参数为c1=c2=20pf、c3=10uf;R1=R2=R3=R4=R5=R6=R7=R8=470欧姆、R9=10k欧姆;晶振=12M;VCC=5V。
微机原理与单片机接口技术实验报告
}}
Led1=0x00;
Led2=0x00;
delay(65530);
delay(65530);
Led1=0xff;
//闪
Led2=0xff;
delay(65530);
delay(65530);
} } */
//定时器初始化子程序
void Init_Timer0(void)
四、系统软件设计 #include<reg51.h> #define L1 P2 #define L2 P3 bit UpdateTimeFlag; //定义读时间标志 void Init_Timer0(void);//定时器初始化
sbit h1=P3^6; sbit key=P0^5; unsigned char code Led_1[9]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x 7f,0xff} ; void delay(unsigned int t); void Key(); void shun(); void ni(); void delay_shun(); void delay_ni(); void delay(unsigned int t) { while(t--); } void delay_shun(unsigned int t) { while(t--);{ h1=0; key=1; if(key==0)
delay(65530);
}L2=0xff; }
if(UpdateTimeFlag==1) {UpdateTimeFlag=0;}
}
//定时器初始化子程序 void Init_Timer0(void)
最新单片机实验流水灯报告
最新单片机实验流水灯报告在本次实验中,我们设计并实现了一个基于单片机的流水灯系统。
该系统的主要功能是通过编程控制LED灯按照一定的顺序和时间间隔依次点亮和熄灭,从而形成流水灯效果。
以下是实验的详细报告:实验目的:1. 熟悉单片机的基本操作和编程。
2. 掌握GPIO(通用输入输出)的配置和使用。
3. 提高编程能力,理解时间控制的概念。
实验材料:- 单片机开发板- LED灯若干- 杜邦线若干- 电源适配器- 计算机及相应的编程软件实验步骤:1. 首先,将LED灯通过杜邦线连接到单片机的GPIO端口上。
确保每个LED连接正确,并且限流电阻已经安装以保护LED不被烧毁。
2. 使用编程软件编写单片机程序。
程序的主要逻辑是通过循环结构控制每个GPIO端口的高低电平,从而控制LED的亮灭。
3. 在程序中设置适当的延时函数,以控制LED点亮和熄灭的时间间隔,实现流水灯的效果。
4. 将编写好的程序通过编程软件下载到单片机中。
5. 连接电源,观察LED灯是否按照预期进行流水式点亮。
实验结果:通过实验,我们成功实现了流水灯效果。
LED灯按照预定的顺序依次点亮和熄灭,形成了流畅的动态效果。
通过调整延时参数,我们还可以改变流水的速度,从而观察不同设置下的灯光变化。
实验分析:在实验过程中,我们发现GPIO端口的配置对于LED的亮灭至关重要。
同时,延时函数的精确度直接影响了流水灯效果的平滑度。
通过对程序的不断调试和优化,我们加深了对单片机编程和硬件控制的理解。
结论:本次单片机实验不仅锻炼了我们的编程技能,而且增强了我们对电子硬件的认识和操作能力。
通过实际操作,我们更加深刻地理解了理论知识,为未来的电子设计和创新打下了坚实的基础。
单片机流水灯实验报告
流水灯实习报告一、实验原理单片机通过P0口连接锁存器74ls273,P0同时作为低八位地址,实验板内P2口连接74ls138,任意一个输出连接74ls273片选,再将74ls273接八个LED灯,通过软件控制对74ls273送入显示数据就可以按要求显示了。
二、硬件原理图三、实验程序ORG 0000HAJMP STARTORG 001BHAJMP INTORG 0100H START:MOV SP,#60H MOV TMOD,#10H MOV TL1,#00H MOV TH1,#4CH MOV R0,#00HMOV R1,#20SETB TR1SETB ET1SETB EASJMP $INT:PUSH ACC PUSH PSWPUSH DPLPUSH DPHCLR TR1MOV TL1,#B0H MOV TH1,#3CH SETB TR1DJNZ R1,EXITMOV R1,#20MOV DPTR,#DATAMOV A,R0MOVC A,@A+DPTRMOV DPTR,#8000HMovx @DPTR,AINC R0ANL 00,#07HEXIT:POP DPHPOP DPLPOP PSWPOP ACCRETIDATA:DB 05H,0AH,50H,0A0H,55H,0AAH,0FFH,0HEND四、实验功能以实验机上74LS273做输出口,接八只发光二极管,编写程序,使开机后第一秒钟L1,L3亮,第二秒钟L2,L4亮,第三秒钟L5,L7亮,第四秒钟L6,L8亮,第五秒钟L1,L3,L5,L7亮,第六秒钟L2,L4,L6,L8亮,第七秒钟八个二极管全亮,第八秒钟全灭,以后又从头开始,L1,L3亮,然后L2,L4亮……一直循环下去.五、实验总结在做本次实验时,首先要注意实验要求是用74LS273做输出口,所以不要用P1口作输出口。
在引入中断前,要注意保护现场。
微机原理与接口技术控制流水灯
微机原理与接口技术控制流水灯一、实验目的:掌握汇编语言设计和调试方法。
二、实验要求:利用8253、8255、8259三块芯片相接实现流水灯。
三、芯片介绍:1、intel8253是NMOS工艺制成的可编程计数器/定时器,有几种芯片型号,外形引脚及功能都是兼容的,只是工作的最高计数速率有所差异,例如8253(2.6MHz),8253-5(5MHz) 8253内部有三个计数器,分别成为计数器0、计数器1和计数器2,他们的机构完全相同。
每个计数器的输入和输出都决定于设置在控制寄存器中的控制字,互相之间工作完全独立。
每个计数器通过三个引脚和外部联系,一个为时钟输入端CLK,一个为门控信号输入端GATE,另一个为输出端OUT。
每个计数器内部有一个8位的控制寄存器,还有一个16位的计数初值寄存器CR、一个计数执行部件CE和一个输出锁存器OL。
执行部件实际上是一个16位的减法计数器,它的起始值就是初值寄存器的值,而初始值寄存器的值是通过程序设置的。
输出锁存器的值是通过程序设置的。
输出锁存器OL用来锁存计数执行部件CE的内容,从而使CPU可以对此进行读操作。
顺便提一下,CR、CE和OL都是16位寄存器,但是也可以作8位寄存器来用。
2、8255作为主机与外设的连接芯片,必须提供与主机相连的3个总线接口,即数据线、地址线、控制线接口。
同时必须具有与外设连接的接口A、B、C口。
由于8255可编程,所以必须具有逻辑控制部分,因而8255内部结构分为3个部分:与CPU 连接部分、与外设连接部分、控制部分。
1)与CPU连接部分根据定义,8255能并行传送8位数据,所以其数据线为8根D0~D7。
由于8255具有3个通道A、B、C,所以只要两根地址线就能寻址A、B、C口及控制寄存器,故地址线为两根A0~A1。
此外CPU要对8255进行读、写与片选操作,所以控制线为片选、复位、读、写信号。
各信号的引脚编号如下:(1)数据总线DB:编号为D0~D7,用于8255与CPU传送8位数据。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一流水灯实验一、实验目的
⑴简单I/O引脚的输出
⑵掌握软件延时编程方法
⑶简单按键输入捕获判断
二、实验实现的功能
⑴开机是点亮12发光二极管,闪烁三下
⑵按照顺时针循环依次点亮发光二极管
⑶通过任意按键将发光二极管的显示改为顺逆时针方式
三、系统硬件设计
四、系统软件设计
#include<reg51.h>
sbit L1=P0^5;
sbit L2=P0^6;
sbit L3=P0^7;
void Delay(void)
{
unsigned char i,j,k;
for(i=10;i>0;i--)
for(j=132;j>0;j--)
for(k=150;k>0;k--);
}
Scan_Key()
{
unsigned char FLAG=0;
unsigned char n;
n=(L1==0)||(L2==0)||(L3==0);
if(n)
{ FLAG=1;}
return FLAG;
}
main()
{
unsigned char y,n,s=0,b=1,m=0;
unsigned char c=1;
unsigned char a[]={0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; unsigned char h[]={0xff,0x38,0x34,0x2f,0x1f};
n=Scan_Key();
for(y=0;y<3;y++) //闪烁三次
{
P2=0;
P3=0;
Delay();
Delay();
Delay();
P2=0xff;
P3=0xff;
Delay();
Delay();
Delay();
}
while(1)
{
while(1)
{
m=m+n;
P3=0x3f;
while(1) //顺时针
{
for(;b<9;b++)
{ n=Scan_Key();
m=m+n;
if((P3==0x3f)&&(m%2==0))
{P2=a[b];Delay();}
else
{ P2=0xff;break; }
if(m%2==0)
c=1;
P2=0xff;
}
for(;c<5;c++)
{n=Scan_Key();
m=m+n;
if((P2==0xff)&&(m%2==0))
{ P3=h[c];Delay();}
else
{ P3=0x3f;break;}
}
if(m%2==0)
b=1;
break;
}
if(m%2==1)
break;
}
while(1) //逆时针 {
for(;b>0;b--)
{n=Scan_Key();
m=m+n;
if((P3==0x3f)&&(m%2==1))
{P2=a[b];Delay(); }
else
{P2=0xff;break;}
P2=0xff;
}
if(m%2==1)
c=4;
for(;c>0;c--)
{
n=Scan_Key();
m=m+n;
if((P2==0xff)&&(m%2==1))
{ P3=h[c]; Delay();}
else
{ P3=0x3f;break;}
P3=0x3f;
}
if(m%2==0)
break;
if(m%2==1)
b=8;
}
}
}
五、实验过程中遇到的问题及解决方法
1、用for循环执行顺逆时针循环按下开关后无法原地返回。
解决:在程序开始处为循环变量赋初值,不在for循环之中赋值。
2、检测按键的方式有:H1、H2置0,检测L1、L2、L3;L1、L2、L3置0,检测H1、H2。
哪种方式更好?
解决:H1、H2置0更好,因为P3口其他端口用于控制流水灯发光,处于输出状态,若要H1、H2做按键扫描端,容易引起混淆。
3、按键按一下就松手,有时扫描不到。
解决:由于程序每执行一次for循环对按键扫描一次,而执行for循环需要一定时间,故按键时间大于执行一次for循环的时间即可,或者缩短每个灯亮的时间。
4、12个灯分别有P2、P3口控制,如何能实现灯的不间断依次点亮?
解决:以顺时针时为例,当P2口的8个灯亮过后,为其赋值0xff使其全部熄灭,同时将其作为条件使P3口开始点亮二极管。
5、keil不能识别端口名称。
解决:没有包含reg51.h头文件。
6、在main函数中间定义的变量无法识别。
解决:在main函数开头定义即可。
指导老师签字:
日期:。