单片机跑马灯实验报告
- 格式:doc
- 大小:90.50 KB
- 文档页数:9
单片机跑马灯(流水灯)控制实验报告实验目的:本实验旨在通过使用单片机对LED灯进行控制,实现跑马灯(流水灯)的效果,同时熟悉单片机编程和IO口的使用。
实验器材:1)STC89C52单片机2)最基本的LED灯3)面包板4)若干跳线实验过程:1.硬件连接:将单片机的P2口与面包板上的相应位置连接,再将LED灯接入面包板中。
2.编写程序:按照题目要求编写所需程序。
3.单片机烧录:将程序烧录进单片机中,即可实现跑马灯效果。
程序详解:1. 由于LED灯是呈现亮灭效果,我们要编写程序来控制LED的亮灭状态。
2. 在程序中,我们通过P2口控制LED灯的亮灭状态。
例如,若要让LED1亮,我们就将P2口的第一个引脚设置为低电平(0),此时LED1就会发光。
同样地,若要LED2,LED3等依次点亮,则需要将P2口的第二个、第三个引脚设置为低电平,依此类推即可。
3. 接下来,我们要实现每个LED灯的亮灭时间间隔,并实现跑马灯的效果。
4. 在本实验中,我们采用了计时器中断的方式来实现灯光的控制,即在定时器中断函数中对P2口进行控制,这样可以方便地控制灯亮灭时间和亮度。
通过改变定时器中断的时间,可以改变LED灯的亮灭时间;通过改变P2口的控制顺序,可以实现跑马灯效果。
5. 整个程序比较简单,具体的代码实现可以参考以下程序:#include <REG52.H>#include <intrins.h>#define uint unsigned int #define uchar unsigned char void Delay1ms(uchar _ms); void InitTimer0();sbit led1=P2^0;sbit led2=P2^1;sbit led3=P2^3;sbit led4=P2^4;sbit led5=P2^5;sbit led6=P2^6;sbit led7=P2^7;void InitTimer0(){TMOD=0x01;TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1;ET0=1;TR0=1;}void Timer0() interrupt 1 {static uint i;TH0=(65536-50000)/256; TL0=(65536-50000)%256;i++;if(i%2==0){led1=~led1;}if(i%4==0){led2=~led2;}if(i%6==0){led3=~led3;}if(i%8==0){led4=~led4;}if(i%10==0){led5=~led5;}if(i%12==0){led6=~led6;}if(i%14==0){led7=~led7;}}void Delay1ms(uchar _ms){uchar i;while(_ms--){i=130;while(i--);}}实验总结:通过本次实验,我们掌握了单片机控制跑马灯(流水灯)的方法,对单片机编程和IO 口的使用有了更深入的了解。
一、实训目的本次实训旨在通过使用AT89C51单片机,结合中断技术实现对跑马灯的控制,加深对单片机中断系统、定时器/计数器以及程序设计方法的理解和掌握。
二、实训内容1. 硬件设计- 主控制器:AT89C51单片机- 驱动电路:ULN2003A驱动器- 显示电路:8个LED灯- 控制电路:按键开关2. 软件设计- 编写程序实现跑马灯的基本功能,包括:- 跑马灯模式:LED灯依次点亮,形成跑马灯效果。
- 定时控制:通过定时器实现LED灯点亮时间的控制。
- 中断控制:通过外部中断实现按键控制跑马灯模式的切换。
三、实训步骤1. 硬件连接- 将AT89C51单片机的P1.0至P1.7引脚连接至ULN2003A的输入端,用于驱动LED灯。
- 将按键开关连接至单片机的P3.2和P3.3引脚,用于控制跑马灯模式。
- 将ULN2003A的输出端连接至LED灯的正极,负极接地。
2. 程序设计- 初始化配置:- 初始化定时器T0,设置定时时间为50ms。
- 初始化外部中断0和外部中断1,配置中断触发方式为下降沿触发。
- 跑马灯控制:- 设置定时器T0中断,当定时器溢出时触发中断,实现LED灯的点亮和熄灭。
- 在中断服务程序中,通过移动LED灯的位置,实现跑马灯效果。
- 按键控制:- 当按下P3.2引脚对应的按键时,切换跑马灯模式。
- 当按下P3.3引脚对应的按键时,停止跑马灯运行。
3. 程序调试- 编译程序,将生成的HEX文件烧录至AT89C51单片机。
- 连接调试器,观察程序运行情况,确保跑马灯控制功能正常。
四、实训结果与分析1. 跑马灯效果通过实验,成功实现了跑马灯的基本功能,LED灯依次点亮,形成跑马灯效果。
定时器T0的设置保证了LED灯点亮时间的控制,中断技术实现了按键控制跑马灯模式的切换。
2. 中断控制外部中断0和外部中断1的配置保证了按键控制功能的实现。
当按下按键时,中断服务程序会根据按键的引脚和状态切换跑马灯模式或停止跑马灯运行。
单片机课程设计报告跑马灯武汉纺织大学单片机课程设计报告设计课题:跑马灯指导教师:刘丰姓名:颜珊曹坤班级:应电092一、设计任务利用单片机制作让LED灯依次闪烁时间间隔为0.5S二次后时间加快为0.2S并循环闪烁的跑马灯.二、设计要求(1)采用单片机STC89C52来控制,下载器由芯片MAX232来对程序的下载。
(2)LED灯的闪烁间隔时间为0.5S-0.25S-1S,每循环两圈更改闪烁速度。
(3)供电采用USB方口的方式。
三、方案设计与论证跑马灯电路的组成方框图为:四,主要元件介绍(1)单片机STC89C52引脚介绍stc89c52的内核和AT51系列单片机一样,故引脚也相同:1~8:I/OP1口(P1.0~P1.7);9:复位脚(RST/Vpd);10~17:I/OP3口(P3.0=RXD,P3.1=TXD,P3.2=-INT0,P3.3=-INT1,P3.4=T0,P3.5=T1,P3.6=-WR,P3.7=-RD)主要是此引脚;18、19:晶振(18=XTAL2,19=XTAL1);20:地(Vss);21~28:I/OP2口(P2.0~P2.7);29:-PSEN;30:ALE/-PROG;31:-EA/Vpp32~39:I/OP0口(P0.7~P0.0);40:+5V电源。
注:引脚功能前加“-”,说明其是低电平有效。
如P3.2=-INT0。
(2)MAX232介绍MAX232芯片是美信公司专门为电脑的RS-232标准串口设计的接口电路,使用+5v单电源供电。
内部结构基本可分三个部分:第一部分是电荷泵电路。
由1、2、3、4、5、6脚和4只电容构成。
功能是产生+12v和-12v两个电源,提供给RS-232串口电平的需要。
第二部分是数据转换通道。
由7、8、9、10、11、12、1 3、14脚构成两个数据通道。
其中13脚(R1IN)、12脚(R1OUT)、11脚(T1IN)、1 4脚(T1OUT)为第一数据通道8脚(R2IN)、9脚(R2OUT)、10脚(T2IN)、7脚(T2 OUT)为第二数据通道。
单片机试验三:跑马灯试验
前面做了二极管的点亮与熄灭和二极管闪烁试验,在这基础上再来做一个
跑马灯试验。
所用到的器件也是试验板上的八只二极管,要让它们一个个的轮
流循环点亮,需要该变P1 口的值,即先送入11111110B 给P1 口,让第一只二级管点亮,由于程序执行时间很短(微秒级),所以我们需要它亮一段时间,
就是所说的延时;然后再送入11111101B 给P1 口即第二只点亮,其它都是熄灭的,延时,再让第三只点亮。
就这样不断的循环,这就成跑马灯了。
程序如下:第一种:
ORG 1000H
LJMP BEGIN
BEGIN: MOV A,#11111110B ;低电平对应的发光二极管亮
MOV P1,A ;将值送到P1 口,第一只点亮
LCALL DL ;调用延时
MOV A,#11111101B
MOV P1,A ;第二只点亮
LCALL DL ;调用延时
MOV A,#11111011B
MOV P1,A ;第三只点亮
LCALL DL ;调用延时
MOV A,#11110111B
MOV P1,A ;第四只点亮
LCALL DL ;调用延时
MOV A,#11101111B。
单片机实验报告姓名: 学号:一、 实验实现功能:1:计数器功能2:流水灯二、 具体操作:1、计数器功能数码管的动态显示。
每按一次K2键计数器加1通过数码管显示出来,计数器可以实现从0计数到9999。
2、流水灯当在计数器模式下的时候按下K3键时程序进入跑马灯模式,8个小灯轮流点亮每次只点亮一个,间隔时间为50ms 。
三、 程序流程图开始 定时器T0 设置初值,启动定时器,打开中断复位 Key2按下 中断关闭 计数器模式 计数器加1 Key3按下 流水灯模式 数码管显示数字加1 跑马灯点亮间隔50ms Key1按下中断打开四、程序#include <reg51.h>typedef unsigned char uint8;typedef unsigned int uint16; //类型定义sbit P2_1 = P2^1;sbit P2_2 = P2^2;sbit P2_3 = P2^3;sbit P2_4 = P2^4; //位声明四个数码管开关sbit Key2 = P3^2;sbit Key3 = P3^3; //位声明2个按键K2和K3sbit Ledk = P2^0 ; //LED 开关void delay(uint16 i); //延时函数声明void refresh (); // 数码管刷新函数声明void liushuideng(); //流水灯函数声明uint8 number[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//数码管的真值表uint8 out[4] = {0}; // 数组变量uint16 counter=0; //用作计数器的变量uint16 Time_counter=0; //用作定时器的变量void main() //主函数{TMOD = 0x01; //定时器0,工作方式一TH0 = 0xFC;TL0 = 0x18; //定时器初值使每次循环为1msTR0 = 0; //定时器0开始作ET0 = 0; // 定时器中断关EA = 0; // 关中断while(1) //计数器模式{Ledk =1 ; //led开关关out[0]=number[counter%10]; //取个位out[1]=number[counter%100/10]; //十位out[2]=number[counter%1000/100]; //百位out[3]=number[counter/1000]; //千位if (!Key2) //计数器加1{++counter; //自加out[0]=number[counter%10]; //取个位out[1]=number[counter%100/10]; //十位out[2]=number[counter%1000/100]; //百位out[3]=number[counter/1000]; //千位while(!Key2) //等待键盘抬起refresh(); //刷新数码管}refresh(); //刷新数码管if (!Key3) // 进入跑马灯模式liushuideng();}} //主函数结束/*******************延时*************/void delay(uint16 i){uint8 j; // 定义局部变量for(i;i>0;i--) //循环i*240 次for(j=240;j>0;j--);}/************数码管刷新******************/void refresh (){uint8 j;for (j=0;j<4;j++) //四次循环刷新数码管{switch(j){case 0: P2_1=1;P2_2=1;P2_3=1;P2_4=0;break;case 1: P2_1=1;P2_2=1;P2_3=0;P2_4=1;break;case 2: P2_1=1;P2_2=0;P2_3=1;P2_4=1;break;case 3: P2_1=0;P2_2=1;P2_3=1;P2_4=1;break;//每次循环只选中一个数码管default:break;}P0 = out[j]; // 位选,给数码管送值delay (20); //延时消抖}}/*************定时器的中断服务函数**************/void Timer0_Overflow() interrupt 1 //定时器0溢出中断,这个语句1ms执行一次{TH0 = 0xFC;TL0 = 0x18; //每1ms重新赋定时器初值Time_counter++; //计数,看经过了几个1ms}/***********************流水灯子函数****************************/ void liushuideng(){uint8 j = 0 ; //定义局部变量P0 = 0xff; // 小灯全关TR0 = 1; //定时器1开始计时EA = 1; //中断开放ET0 = 1; //定时器0中断开while(1){Ledk = 0 ; //打开LED开关P2 = P2|0x1E; //关掉数码管if(50 == Time_counter) //50个毫秒{P0=~(1<<j++); //控制小灯Time_counter = 0; //清零开始下一次循环定时}if (8==j) //移完8次再重新移{j=0;}}}。
一、前言随着科技的不断发展,单片机技术在各个领域得到了广泛的应用。
为了提高我们的实践能力,加强理论知识与实际操作的结合,我们进行了单片机跑马灯实训。
通过本次实训,我们深入了解了单片机的基本原理,掌握了单片机的编程方法,并能够运用所学知识解决实际问题。
二、实训目的1. 熟悉单片机的硬件结构和工作原理。
2. 掌握单片机的编程方法,包括汇编语言和C语言。
3. 学会使用单片机进行简单的外设控制。
4. 提高动手能力和团队合作能力。
三、实训内容1. 实训设备(1)8051单片机开发板(2)LED灯(3)电阻(4)电源2. 实训步骤(1)搭建电路首先,我们需要搭建跑马灯的电路。
将LED灯串联,然后连接到单片机的P1口。
在LED灯的正极和负极之间串联一个电阻,用于限流。
(2)编写程序接下来,我们需要编写跑马灯的程序。
以下是用C语言编写的跑马灯程序:```c#include <reg51.h>#define LED P1void delay(unsigned int ms) {unsigned int i, j;for (i = 0; i < ms; i++)for (j = 0; j < 1275; j++);}void main() {while (1) {LED = 0x01; // 第一个LED灯亮 delay(500); // 延时LED = 0x02; // 第二个LED灯亮 delay(500); // 延时LED = 0x04; // 第三个LED灯亮 delay(500); // 延时LED = 0x08; // 第四个LED灯亮 delay(500); // 延时LED = 0x10; // 第五个LED灯亮 delay(500); // 延时LED = 0x20; // 第六个LED灯亮 delay(500); // 延时LED = 0x40; // 第七个LED灯亮 delay(500); // 延时LED = 0x80; // 第八个LED灯亮 delay(500); // 延时LED = 0x00; // 所有LED灯熄灭delay(500); // 延时}}```(3)编译程序将编写的程序导入到单片机开发板中,并下载到单片机中。
学号14142200277序号19单片机原理与接口技术实验报告实验项目序号一实验项目名称跑马灯实验姓名卢志雄专业电子信息工程班级电信14-2BF 完成时间2016年4月2日一、实验内容实验内容为3项,其中第1、2项必做。
1、基本的流水灯。
根据图1电路,编写一段程序,使8个发光二极管D1、D2、D3、D4、D5、D6、D7、D8顺序(正序)点亮:先点亮D1,再点亮D2、D3……D8、D1……,循环点亮。
每点亮一个LED,采用软件延时一段时间。
2、简单键控的流水灯。
不按键,按正序点亮流水灯;按下K1不松手,按倒序点亮流水灯,即先点亮D8,再顺序点亮D7、D6……D1、D8……。
松手后,又按正序点亮流水灯。
3、键控的流水灯。
上电,不点亮LED,按一下K1键,按正序点亮流水灯。
按一下K2键,按倒序点亮流水灯,按一下K3键,全部关闭LED。
二、电路原理图图1 跑马灯实验电路原理图三、程序流程图开始检测P2键值完成对应键值的功能判断P2键值是否改变图2 简单键控的流水灯程序流程图四、源程序1、基本的流水灯#include<reg51.h>#define uint unsigned int#define uchar unsigned charvoid delay( j ) //延时函数data uint j;{ data uint i;while(j--)for(i=0;i<250;i++);}void main( ) //主函数{ data uchar a;a=1; //保证只有一个点亮while(1) //不断循环{ P2=~a; //低电平点亮a=a<<1; //左移一位,右补0 if(a==0)a=1; //全0delay(2250);} //流动点亮延时}2、简单键控的流水灯#include<reg51.h>#define uchar unsigned char#define uint unsigned intvoid delay(uint i){ uchar t;while(i--){for(t=0;t<120;t++);}}void main(){ data uchar a;a=1;while(P2==0xff){ P0=~a;a=a<<1;if(a==0)a=1;delay(250);}while(P2==0xfe){ P0=~a;a=a>>1;if(a==0)a=128;delay(250);}}3、键控的流水灯#include<reg51.h>#define uchar unsigned char #define uint unsigned int void delay(uint i){ uchar t;data uchar b=0xfb;while(i--){ if(P2==0xfe) b=0xfe;if(P2==0xfd) b=0xfd;if(P2==0xfb) b=0xfb;for(t=0;t<120;t++);}}void main(){ data uchar a;a=1;while(P2==0xfe){ P0=~a;a=a<<1;if(a==0)a=1;delay(250);while(P2==0xff){P0=~a;a=a<<1;if(a==0)a=1;delay(250);}}while(P2==0xfd){ P0=~a;a=a>>1;if(a==0)a=128;delay(250);while(P2==0xff){ P0=~a;a=a>>1;if(a==0)a=128;delay(250);}}while(P2==0xfb){ P0=0xff;}}五、实验结果1、基本的流水灯基本流水灯仿真图2、简单键控的流水灯简单键控的流水灯仿真图3、键控的流水灯键控的流水灯仿真图六、思考题回答1、采用I/O口作为输出口时要考虑哪些因素?为什么实验装置中LED要串联一个电阻?答:电压的大小(包括它能感知的最小电压作为高电平),电流的驱动能力等,同时也要要考虑它是否要加上拉电阻。
一、实验目的1. 熟悉嵌入式系统硬件电路的搭建与调试;2. 掌握C语言编程,实现跑马灯功能;3. 理解并掌握GPIO口操作,学习定时器中断的使用。
二、实验环境1. 开发板:STM32F103C8T6开发板2. 编译器:Keil uVision53. 软件库:STM32标准外设库三、实验原理跑马灯实验是通过控制LED灯的亮灭,实现LED灯依次点亮的效果。
实验原理如下:1. GPIO口控制:将LED灯连接到开发板的GPIO口,通过控制GPIO口的输出电平,实现LED灯的点亮与熄灭;2. 定时器中断:定时器产生中断,实现LED灯点亮与熄灭的时间间隔;3. 循环控制:通过循环控制LED灯的点亮顺序,实现跑马灯效果。
四、实验步骤1. 硬件电路搭建(1)将LED灯的正极连接到开发板的GPIO口,负极接地;(2)将开发板的电源和地线连接到电源模块。
2. 软件编程(1)在Keil uVision5中创建项目,并导入STM32标准外设库;(2)编写程序,实现以下功能:a. 初始化GPIO口,将LED灯连接的GPIO口配置为输出模式;b. 初始化定时器,设置定时器中断周期,使LED灯点亮与熄灭的时间间隔为1ms;c. 编写定时器中断服务程序,控制LED灯的点亮与熄灭;d. 编写主函数,实现LED灯依次点亮的效果。
3. 编译与下载(1)编译程序,生成可执行文件;(2)将开发板连接到计算机,通过串口下载程序到开发板。
4. 实验调试(1)打开串口调试助手,观察LED灯的点亮与熄灭效果;(2)调整程序参数,优化跑马灯效果。
五、实验结果与分析1. 实验结果(1)LED灯依次点亮,实现跑马灯效果;(2)LED灯点亮与熄灭的时间间隔可调。
2. 实验分析(1)通过控制GPIO口的输出电平,实现LED灯的点亮与熄灭;(2)定时器中断实现LED灯点亮与熄灭的时间间隔控制;(3)循环控制实现LED灯依次点亮的效果。
六、实验总结本次实验成功实现了跑马灯功能,加深了对嵌入式系统硬件电路、C语言编程和GPIO口操作的理解。
可编辑修改精选全文完整版实验一跑马灯实验一、实验内容1、基本的流水灯根据图1电路,编写一段程序,使8个发光二极管D1、D2、D3、D4、D5、D6、D7、D8顺序(正序)点亮:先点亮D1,再点亮D2、D3……D8、D1……,循环点亮。
每点亮一个LED,采用软件延时一段时间。
2、简单键控的流水灯不按键,按正序点亮流水灯;按下K1不松手,按倒序点亮流水灯,即先点亮D8,再顺序点亮D7、D6……D1、D8……。
松手后,又按正序点亮流水灯。
3、键控的流水灯上电,不点亮LED,按一下K1键,按正序点亮流水灯。
按一下K2键,按倒序点亮流水灯,按一下K3键,全部关闭LED。
二、实验方案1、总体方案设计考虑到K4键未被使用,所以将实验内容中的三项合并到一个主函数中:K4键代替实验内容第二项中的K1键;单片机一开机即执行实验内容第一项;K1、K2、K3键实现实验内容第三项。
所用硬件:AT89C52、BUTTON、LED-BLUE、电源输入:P2.0-K1;P2.1-K2;P2.2-K3;P2.3-K4。
低电平有效输出:P0.0~P0.7-D0~D7。
LED组连线采用共阳极,低电平有效软件设计:软件延时采用延时函数delay(t),可调整延迟时间:void delay(uint t){uint i;while(t--)for(i=0;i<1000;i++){if(P2!=oldK&&P2!=K[0])break;//按下了其他键退出循环}}由于涉及到按键变化所以要设置一个变量oldK保留按键键值,要在延时程序中检测是否按键,当按键后立即设置oldK的值。
按键判断采用在while循环中利用条件语句判断P2的值然后执行该键对应的代码段,达到相应的响应。
为了让K4键的效果优化,即状态变化从当前已亮灯开始顺序点亮或逆序点亮,利用全局变量n来记录灯号,利用算法即可实现。
主要算法:1、全局变量的定义:uchar D[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0X7f};//单个LED亮uchar AllOff=0xff;//LED全灭uchar AllOn=0x00;//LED全亮uchar K[]={0xff,0xfe,0xfd,0xfb,0xf7};//按键开关uchar oldK;//记录已按键int n;2、顺序、逆序点亮流水灯:void forward(){for(n=0;n<=7;n++){out=D[n];delay(15);if(P2!=oldK&&P2!=K[0])break;}out=AllOff;}void backward(){for(n=7;n>=0;n--){out=D[n];delay(15);if(P2!=oldK&&P2!=K[0])break;}out=AllOff;}3、实验内容第二项流水灯灯亮顺序变换:void hold(){n=8;while(1){if(P2==K[4]){//一直按着K4键,逆序点亮跑马灯oldK=K[4];if(n==-1)n=7; //D0灯亮后点亮D7while(n>=0){out=D[n];n--;if(delay4(15))break;}}if(P2==K[0]){//未按下K4键,一直正序点亮跑马灯oldK=K[0];if(n==8)n=0;//D7灯亮后点亮D0while(n<=7){out=D[n];n++;if(delay4(15))break;}}if(P2!=K[4]&&P2!=K[0]){//按下了其他键,退出hold函数break;}}}4、对应实验内容第一项,开机顺序点亮流水灯:while(1){//开机即正序点亮流水灯forward();if(P2!=K[0]){break;}}2、实验原理图图2-1 实验原理图3、程序流程图图2-2 程序流程图三、源程序#include"reg51.h"#define uchar unsigned char#define uint unsigned int#define out P0uchar D[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0X7f};//单个LED亮uchar AllOff=0xff;//LED全灭uchar AllOn=0x00;//LED全亮uchar K[]={0xff,0xfe,0xfd,0xfb,0xf7};//按键开关uchar oldK;//记录已按键int n;//记录当前亮的灯号void delay(uint t){uint i;while(t--)for(i=0;i<1000;i++){if(P2!=oldK&&P2!=K[0])break;//按下了其他键退出循环}}void delay10ms(){uint i;for(i=0;i<10000;i++);}void forward(){for(n=0;n<=7;n++){out=D[n];delay(15);if(P2!=oldK&&P2!=K[0])break;}out=AllOff;}void backward(){for(n=7;n>=0;n--){out=D[n];delay(15);if(P2!=oldK&&P2!=K[0])break;}out=AllOff;}int delay4(uint t){uint i;while(t--)for(i=0;i<1000;i++){if(P2!=oldK){ //按键变化退出循环return 1;}}return 0;}void hold(){n=8;while(1){if(P2==K[4]){//一直按着K4键,逆序点亮跑马灯oldK=K[4];if(n==-1)n=7; //D0灯亮后点亮D7while(n>=0){n--;if(delay4(15))break;}}if(P2==K[0]){//未按下K4键,一直正序点亮跑马灯oldK=K[0];if(n==8)n=0;//D7灯亮后点亮D0while(n<=7){out=D[n];n++;if(delay4(15))break;}}if(P2!=K[4]&&P2!=K[0]){//按下了其他键,退出hold函数break;}}}void main(){oldK=K[0];while(1){//开机即正序点亮流水灯forward();if(P2!=K[0]){break;}}while(1){out=AllOff;if((P2&0x0f)!=0x0f){//检测有键按下delay10ms();//延时10ms再去检测//P2.0_K1键按下正序点亮流水灯if(P2==K[1]){oldK=K[1];while(1){forward();if(P2!=K[1]&&P2!=K[0]){//按下了其他键,退出break;}}}//P2.1_K2键按下逆序点亮流水灯if(P2==K[2]){while(1){backward();if(P2!=K[2]&&P2!=K[0]){//按下了其他键,退出break;}}}//P2.2_K3键按下关闭全部LEDif(P2==K[3]){oldK=K[3];out=AllOff;}//P2.3_K4键按下长按逆序点亮流水灯,不按正序点亮流水灯,直到其他键按下停止if(P2==K[4]){hold();}}}}四、实验结果1、基本的流水灯:开机后即重复顺序点亮流水灯,等待其他按键。
摘要:AT89C51是美国ATMEL公司生产的AT89系列单片机中的一种,该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器。
AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
关键字:AT89C51 兼容高效微控制器目录一、实训目的 (2)二、电路设计与生成 (2)1、设计跑马灯 (2)2、生成PCB板 (2)三、程序设计 (3)1、程序设计 (3)2、运行结果 (4)四、实训总结 (4)一、实训目的了解AT89C51管脚的基本功能,学会运用Protel 99 se设计电路,并生成PCB 板,印刷线路板。
使用KEIL C51设计单片机程序,生成HEX文件,将程序下载到单片机内并运行。
从而达到初步掌握简单单片机小程序的设计,制作,调试的目的。
二、电路设计与生成1、设计跑马灯利用单片机最小系统,使P1口八个发光二极管做跑马灯和流水灯显示。
设计的电路图如下:2、生成PCB板(1)保存电路图,单击菜单栏DESIGN项,选择其中的更新PCB;(2)在弹出的对话框中,单击preview change;(3)校对弹出界面中的相关元件的信息,再单击Execute,生成元器件;(4)最后对生成的元器件进行排版,生成如下图所示:三、程序设计1、程序设计#include"reg51.h"unsigned char tab[]={1,2,4,8,0x10,0x20,0x40,0x80,0x80,0x40,0x20,0x10,8,4,2,1};void delay(unsigned char n){ unsigned int d;unsigned char i;for(i=0;i<n;i++)for(d=0;d<30000;d++);}void main(){ unsigned char i,j;while(1){ for(j=0;j<5;j++){for(i=0;i<8;i++){P1=~tab[i];delay(10);}}for(j=0;j<5;j++){for(i=0;i<8;i++){ P1=~tab[8+i];delay(10);}}for(j=0;j<5;j++){for(i=0;i<8;i++){ P1=~tab[i];delay(20);P1=~tab[i+1];delay(20);P1=~tab[i+2];delay(20);}}for(j=0;j<3;j++){for(i=0;i<8;i++){ P1=~tab[i];delay(20);P1=~tab[i+2];delay(30);}}}}2、运行结果八个发光二级管顺时针依次发光,连续五次,再返向五次,完成基本的跑马灯显示,然后再依次亮三个,退一个再亮三个,逐个发光。
基于AT89S52单片机的多模式带音乐跑马灯设计实训报告一、实训目的和要求本次实训的目的是通过设计一个基于AT89S52单片机的多模式带音乐跑马灯,加深对单片机、音乐、跑马灯等知识的理解,提高实际动手能力和创新能力。
要求通过实训设计实现以下功能:1.实现多种跑马灯效果,包括顺序、逆序、左移、右移等;2.实现音乐播放功能,增加趣味性;3.设计合理的电路布局和编程结构,提高系统的稳定性和可靠性。
二、实训内容和方案设计1.系统硬件设计:(1)主控单板:采用AT89S52单片机作为主控制器;(2)驱动器:使用ULN2003芯片驱动数码管和LED灯;(3)时钟电路:使用晶振频率为11.0592MHz的电路;(4)音频输出电路:使用LM386音频放大器作为音频输出电路。
2.程序设计:(1)主程序框架设计:主程序采用无限循环方式,根据按键输入选择跑马灯模式;(2)跑马灯模式设计:根据不同模式选择,使用对应的跑马灯效果函数进行控制;(3)音乐播放设计:通过PWM脉冲宽度调制方式,实现音乐播放功能。
三、实训步骤和实施过程1.硬件部分:(1)按照设计方案进行电路布线和焊接;(3)连接数码管、LED灯和音频输出电路,进行功能测试。
2.软件部分:(1) 在Keil C中建立项目并编写主程序的框架;(2)编写跑马灯效果函数,实现不同的跑马灯模式;(3)编写音乐播放函数,通过PWM方式产生不同频率的方波实现音乐播放;(4)完善主程序框架,添加按键输入和模式选择功能。
四、实训结果和实验分析经过实际测试,多模式带音乐跑马灯设计实现了预期的功能,能够根据用户的选择进行不同的跑马灯模式和音乐播放。
实训过程中,需要注意以下问题:1.硬件部分需要精确连接,尤其是音频输出电路的设计,需要注意电路布线,以防止杂音和干扰。
2.在软件编程过程中,需要合理利用中断和定时器等功能,确保跑马灯的流畅切换和音乐的正常播放。
3.在调试过程中,可以逐步调试并测试每个模块的功能,确保整个系统的稳定性和可靠性。
了解跑马灯AT89C52单片机识别与检测元器件四、电路设计1.单片机最小应用系统2.复位电路图3.彩灯原理图4.彩灯仿真图5.彩灯布局图五、焊接电路八、程序流程七、跑马灯程序八、下载调试程序九、实训总结目录.2.3.5101011、微控制器应用技术实训评价表12、了解跑马灯在生活和生产的各领域中,凡是有自动控制要求的地方都会有单片机的身影出现;从简单到复杂,从空中、地面带地下,凡是能想象到的地方几乎都有使用单片机的需求。
现在尽管单片机的应用已经很普遍了,但仍有许多可以用单片机控制而没有实现的项目,因此,单片机的应用大有想象和拓展空间。
单片机的应用有利于产品的小型化、多功能化和智能化,有助于提高劳动效率,减轻劳动强度,提高产品质量,改善劳动环境, 减少能源和材料消耗,保真安全等。
但是单片机应用的意义绝不仅限于它的广阔范围以及所带来的经济效益上,更重要的意义还在于单片机的应用正从根本上改变者传统的控制系统设计思想和设计方法。
从前必须有模拟电路或数字电路实现的大部分功能,现在已能使用单片机通过软件方法来实现了。
这种以软件取代硬件并提高系统系能的控制系统是一种全新的概念,是对传统控制技术的一次革命。
随着单片机应用的推广普及,微控制技术必将不断发展、日益完善和更加充实。
在众多的微控技术实验中,老师为我们选择了用单片机制作8个灯的跑马机这一较为基本的科目,单片机使用我们熟悉的AT89C52型单片机,采用覆铜板手工焊制的方法来制作电路板,使用Proteus进行仿真。
本设计选择采用AT89C51单片机为核心。
AT89C51是一个低电压、高性能CMOS8位单片机带有K字节的可反复擦写的程序存储器。
和128字节的存取数据存储器RAM这种器件采用ATMEL公司的高密度、不容易丢失存储技术生产,并且能够与MCS-51系列的单片机兼容。
片内含有8位中央处理器和闪烁存储单位,有较强的功能的AT89C51单片机能够被应用到控制领域中AT89C51提供以下的功能标准:4K字节闪烁存储器,128字节随机存取数据存储器,32个I/O 口,2个16位定时/计数器,1个5向量两级中断结构,1个串行通信口,片内振荡器和时钟电路。
单片机内部结构测试报告姓名:苏汉生班别:09机械1班学号:0915020045指导老师:庞志目录1.跑马灯实验12.跑马灯实验23.跑马灯实验34.按键实验、蜂鸣器5.定时器数码管显示6.看门狗实验7.AD数模转换实验程序运行分析一、跑马灯实验11.测试程序名称:跑马灯实验12.程序功能介绍:跑马灯1的程序功能主要是控制LED灯闪亮的顺序,使八个LED灯按照程序设定闪亮。
但对按键和其他元件不起任何控制作用。
3.程序相关的电路图:8位流水灯电路4.程序总体(主函数)流程图:5(1)(3)1ms延时函数:(4)N ms掩饰函数:6.程序涉及的技术解析:unsigned charLED_table[]={0xFE,0x00,0xFF,0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF ,0x7F,0xFF,0x00,0xFF,0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,0 xFF,0x00,0xFF,0x7E,0xBD,0xDB,0xE7,0xFF,0x00,0xE7,0xDB,0xBD,0x7 E,0xFF,0x00};上述这个语句用到了一维数组,命名为LED_table,该数组一共有37个元素,每一个元素是一个十六进制的数,这些十六进制的数代表着开发板上的LED灯闪亮的规律(输出1为不亮,输出0为亮)。
PORTA = 0xFF;DDRA = 0xFF;DDRE=0XFF;PORTE=0XFF;上述语句是I/O口(端口A寄存器)的初始化,A口的8个脚控制开发板上的8个LED灯。
初始化A口设置为输出,8个引脚分别为1111 1111,LED等为全灭的状态。
单片机与LED灯之间连接了一个74HC573八进制3态非反转透明锁存器,E口2脚接在74HC573锁存器的使能端。
当锁存使能端为高电平1时,锁存对于数据是透明的(也就是说输出同步);当锁存使能端为低电平0时,符合建立时间和保持时间的数据会被锁存。
单片机跑马灯实验报告摘要:本实验通过使用单片机来控制LED灯进行跑马灯效果的展示。
通过简单的电路连接和编程,我们成功实现了单片机跑马灯的功能。
实验结果表明,单片机跑马灯是一种简单而有效的显示系统,可广泛应用于娱乐和装饰等领域。
引言:跑马灯效果是一种常见且受欢迎的LED显示效果,它可以不断地循环显示LED灯的亮灭轮廓,给人们带来视觉上的愉悦。
单片机是一种可编程的微控制器,广泛应用于电子系统的控制和管理。
在本实验中,我们将利用单片机来实现跑马灯效果,通过编程控制LED灯的亮灭来模拟跑马灯的效果。
材料和方法:本实验所需材料如下:1. 单片机开发板2. LED灯3. 面包板4. 连接线实验步骤:1. 将单片机开发板放置在面包板上,确保连接稳固。
2. 将LED灯连接到面包板上,按照电路图正确连接。
3. 接通电源,将USB线连接到单片机开发板上。
4. 在计算机上打开开发板的编程软件。
5. 编写程序代码,实现跑马灯的效果。
6. 将程序代码下载到单片机开发板中。
7. 观察LED灯的亮灭情况,检查是否实现了跑马灯效果。
结果和讨论:经过实验,我们成功实现了单片机跑马灯的效果。
LED灯按照指定的顺序循环亮灭,产生出跑马灯的效果。
通过调整程序代码,我们可以控制跑马灯的速度和亮灭顺序,使其更加多样化和有趣。
单片机跑马灯是一种简单而有效的LED显示系统。
它可以应用于各种场景,包括室内和室外的装饰灯,新闻标语显示,广告牌等。
跑马灯效果不仅能够吸引人们的目光,还可以起到一定的宣传和广告效果。
总结:通过本次实验,我们了解了单片机的基本原理和应用,并成功实现了单片机跑马灯的效果。
单片机跑马灯具有简单、低成本、可编程等优点,适用于各种需要循环显示效果的场景。
未来,我们可以探索更多有趣的跑马灯效果,并将其应用于实际项目中。
在这个数字化时代,单片机跑马灯有着广阔的应用前景,希望能够为人们的生活和工作带来更多的灵感和乐趣。
一、实训背景随着科技的发展,单片机作为一种重要的嵌入式系统控制单元,在工业控制、智能家居、物联网等领域得到了广泛的应用。
为了提高学生对单片机程序设计的理解和实践能力,本次实训选择了跑马灯程序设计作为实训项目。
二、实训目的1. 熟悉单片机的基本结构和编程方法。
2. 掌握Keil C51集成开发环境的使用。
3. 学习跑马灯程序的设计与实现。
4. 培养动手实践能力和团队协作精神。
三、实训内容本次实训主要分为以下几个部分:1. 电路设计:设计跑马灯的电路,包括单片机、LED灯、电阻、按键等元件。
2. 程序设计:编写跑马灯的程序,实现LED灯的正序、倒序、闪烁等功能。
3. 程序调试:在Keil C51集成开发环境中进行程序调试,确保程序正常运行。
4. 实验报告撰写:总结实训过程中的经验和收获,撰写实验报告。
四、电路设计跑马灯电路主要包括以下元件:1. 单片机:选用AT89C51单片机作为控制核心。
2. LED灯:使用8个LED灯作为显示元件。
3. 电阻:用于限流,防止LED灯烧毁。
4. 按键:用于控制跑马灯的运行模式。
电路连接方式如下:1. 将8个LED灯的正极依次连接到单片机的P1口。
2. 将8个LED灯的负极依次连接到地线。
3. 将按键的一端连接到单片机的P3.0口,另一端连接到地线。
五、程序设计跑马灯的程序采用C语言编写,主要功能包括:1. 正序跑马灯:LED灯依次点亮,从D1到D8。
2. 倒序跑马灯:LED灯依次点亮,从D8到D1。
3. 闪烁跑马灯:LED灯快速闪烁。
程序流程如下:1. 初始化单片机P1口为输出模式。
2. 根据按键输入选择跑马灯的运行模式。
3. 根据选择的模式,依次点亮LED灯。
4. 延时一段时间,然后继续点亮下一个LED灯。
5. 重复步骤3和4,直到所有LED灯点亮完毕。
程序代码如下:```c#include <reg51.h>#define LED P1void delay(unsigned int t) {unsigned int i, j;for (i = 0; i < t; i++)for (j = 0; j < 120; j++);}void main() {unsigned char i;LED = 0x01; // 正序跑马灯while (1) {for (i = 0; i < 8; i++) {delay(500); // 延时LED = (0x01 << i); // 点亮下一个LED灯}}}```六、程序调试在Keil C51集成开发环境中,将程序代码编译生成HEX文件,然后将HEX文件烧录到单片机中。
单片机跑马灯实验报告单片机跑马灯实验报告引言:单片机是一种集成电路,具有微处理器核心、存储器、输入输出接口和定时计数器等功能,广泛应用于各个领域。
而跑马灯实验是单片机学习中的基础实验之一,通过控制LED灯的亮灭顺序,实现类似跑马灯效果。
本报告将详细介绍单片机跑马灯实验的设计原理、实验步骤以及实验结果。
一、设计原理:单片机跑马灯实验的设计原理基于单片机的IO口控制和定时器的应用。
在单片机中,IO口可以通过设置高低电平来控制外部设备的工作状态,而定时器可以实现对时间的精确控制。
通过将多个LED灯连接到单片机的不同IO口上,并利用定时器控制LED灯的亮灭顺序和时间间隔,就可以实现跑马灯效果。
二、实验步骤:1. 准备工作:a. 准备单片机开发板、杜邦线、LED灯等实验器材;b. 连接电路:将多个LED灯通过杜邦线连接到单片机的不同IO口上;c. 上电测试:将开发板连接到电源,确认电路连接无误。
2. 编写程序:a. 打开单片机开发环境,选择合适的单片机型号;b. 编写程序代码:根据实验要求,编写控制LED灯亮灭顺序的程序代码;c. 调试程序:通过编译、下载和运行,检查程序是否可以正常工作。
3. 实验操作:a. 将已编写好的程序下载到单片机开发板中;b. 上电运行:通过上电启动单片机,程序开始运行;c. 观察实验现象:观察LED灯的亮灭顺序和时间间隔,验证跑马灯效果。
三、实验结果:经过实验操作,我们成功实现了单片机跑马灯效果。
LED灯按照预先设定的顺序依次亮起,并在一定时间后熄灭,随后下一个LED灯亮起,如此循环往复,形成了跑马灯效果。
通过调整程序代码中的参数,我们还可以改变跑马灯的亮灭顺序和时间间隔,实现不同的效果。
四、实验总结:通过这次单片机跑马灯实验,我们深入了解了单片机的IO口控制和定时器的应用。
通过编写程序代码,我们成功实现了跑马灯效果,并通过调试参数,改变了跑马灯的亮灭顺序和时间间隔。
这次实验不仅巩固了我们对单片机的基础知识的理解,还培养了我们的实际操作能力。
stm32跑马灯实验报告《STM32跑马灯实验报告》实验目的:本实验旨在通过使用STM32单片机,实现一个简单的跑马灯效果,以加深对STM32单片机的理解和掌握。
实验器材:1. STM32单片机开发板2. USB数据线3. LED灯4. 电阻5. 连线实验原理:STM32单片机是一款功能强大的微控制器,具有丰富的外设和强大的处理能力。
在本实验中,我们利用STM32单片机的GPIO(通用输入输出)功能,控制LED灯的亮灭,从而实现跑马灯效果。
实验步骤:1. 连接STM32单片机开发板和电脑,使用Keil或者其他编程软件进行程序编写。
2. 编写程序,通过控制GPIO口的高低电平,实现LED灯的跑马灯效果。
3. 将编写好的程序下载到STM32单片机开发板中。
4. 连接LED灯和STM32单片机的GPIO口,确保连接正确。
5. 通过电脑或者外部电源给STM32单片机供电,观察LED灯的跑马灯效果。
实验结果:经过实验,我们成功实现了STM32单片机的跑马灯效果。
LED灯在不同的GPIO口控制下,能够呈现出流畅的跑马灯效果,整个实验过程非常顺利。
实验总结:通过本次实验,我们进一步了解了STM32单片机的GPIO控制功能,掌握了如何通过编程实现LED灯的控制。
同时也加深了对STM32单片机的理解和应用能力。
在今后的学习和工作中,我们将进一步深入研究STM32单片机的应用,为实际项目的开发和应用打下坚实的基础。
通过这次实验,我们不仅掌握了STM32单片机的基本应用,还增强了对微控制器的理解和应用能力。
希望通过不断的实验和学习,我们能够更加熟练地运用STM32单片机,为未来的工程项目做出更大的贡献。
微机原理及单片机应用实验实验报告实验跑马灯一、实验内容开关控制输出方式,共四种,开关拨到k1时奇数灯亮,开关拨到k2时偶数灯亮,开关k3时奇数偶数灯轮流亮,开关拨到k4时从左到右依次亮,开关拨到k5时从右到左依次亮。
二、实验步骤①依次L1-L8接入P1.0-P1,7,将P3接入高低电平开关②编程③实现三、实验原理图四.实验程序清单ORG 0000HPX00: MOV P1,#0FFH KEY : MOV A,#0FEHPO00: JB P3.0,PO01JNB P3.0,PO02PO01: MOV A,#055HMOV P1,ALJMP PO00PO02: JB P3.1,PO03JNB P3.1,PO04PO03: MOV A,#0AAHMOV P1,ALJMP PO00PO04: JB P3.2,PO05JNB P3.2,PO06PO05:MOV A,#0FEHK1:MOV P1,AJNB P3.2,LASTAJMP W1W1:RL ASJMP K1C1:MOV R6,#0A0HMOV R7,#0FFHK2:MOV R7,#0FFHK3:DJNZ R7,K3DJNZ R6,K2LJMP W1PO06:JB P3.3,PO07JNB P3.3,PO08PO07:MOV A,#7FHK4:MOV P1,AJNB P3.3, LASTAJMP W2W2: RR ASJMP K4C2: MOV R6,#0A0HMOV R7,#0FFHK5:MOV R7,#0FFHK6:DJNZ R7,K6DJNZ R6,K5LJMP W2PO08:JB P3.4,PO09JNB P3.4,LASTPO09:MOV A,#55HMOV P1,AMOV R6,#0A0HMOV R7,#0FFHK7:MOV R7,#0FFHK8:DJNZ R7,K8DJNZ R6,K7MOV A,#0AAHMOV P1,AMOV R6,#0A0HMOV R7 ,#0FFHK9:MOV R7,#0FFHK10:DJNZ R7,K10DJNZ R6,K9LJMP PO08LAST:MOV P1,#0FFHLJMP PO00END五、实验总结参考8255交通灯实验,加上延时程序以及查询式的跳转方法实现跑马灯。
单片机跑马灯实验报告(二)引言概述:单片机跑马灯实验是一种常见的数字电路实验,也是学习单片机基础应用的重要内容。
本实验旨在通过控制单片机的IO口输出来实现多个LED灯的顺序闪烁,从而模拟跑马灯的效果。
本报告将从硬件组成、电路连接、程序设计、实验步骤和实验结果等方面进行详细阐述。
正文:1. 硬件组成:- 单片机 (例如STC89C52)- 电源 (5V 直流电源)- 电阻 (用于限流)- LED灯 (多个,不同颜色)- 连接线等2. 电路连接:- 连接单片机的引脚与LED灯、电阻等。
一般使用IO口输出来控制LED灯的开关状态,通过改变输出电平来控制灯的亮灭。
具体的连接方式可以根据单片机的datasheet或者开发板的示意图来确定。
3. 程序设计:- 使用C语言编写程序,通过编写程序控制单片机的IO口输出来实现LED灯的顺序闪烁。
基本的程序框架包括引入头文件、定义引脚、设置IO口状态、延时函数和主函数等。
4. 实验步骤:- 硬件连接完毕后,将程序通过编译、烧录等操作下载到单片机中。
- 运行程序,观察LED灯按照设定的顺序是否闪烁,是否达到跑马灯的效果。
- 可以通过改变程序中的一些参数,如延时时间、顺序等,来观察结果的变化。
5. 实验结果:- 根据实验步骤操作后,观察实验效果是否与预期相符。
- 分析实验结果,检查是否有异常情况,如LED灯不亮、顺序错误等,进行排查和修改。
- 还可进行一些扩展实验,如控制节奏变化、增加LED灯数量等。
总结:通过本次实验,我们成功实现了单片机跑马灯的效果,掌握了基本的硬件连接和程序设计方法。
在实验过程中,我们深入了解了单片机的IO口控制和LED灯驱动原理等知识。
通过不断练习和实验,我们能够熟练掌握单片机应用开发的基础技能,为日后深入学习和应用打下了良好的基础。
学号14142200277序号19
单片机原理与接口技术
实验报告
实验项目序号一
实验项目名称跑马灯实验
姓名卢志雄专业电子信息工程班级电信14-2BF 完成时间2016年4月2日
一、实验内容
实验内容为3项,其中第1、2项必做。
1、基本的流水灯。
根据图1电路,编写一段程序,使8个发光二极管D1、D2、D3、D4、D5、D6、D7、D8顺序(正序)点亮:先点亮D1,再点亮D2、D3……D8、D1……,循环点亮。
每点亮一个LED,采用软件延时一段时间。
2、简单键控的流水灯。
不按键,按正序点亮流水灯;按下K1不松手,按倒序点亮流水灯,即先点亮D8,再顺序点亮D7、D6……D1、D8……。
松手后,又按正序点亮流水灯。
3、键控的流水灯。
上电,不点亮LED,按一下K1键,按正序点亮流水灯。
按一下K2键,按倒序点亮流水灯,按一下K3键,全部关闭LED。
二、电路原理图
图1 跑马灯实验电路原理图
三、程序流程图
图2 简单键控的流水灯程序流程图
四、源程序
1、基本的流水灯
#include<reg51、h>
#define uint unsigned int
#define uchar unsigned char
void delay( j ) //延时函数
data uint j;
{ data uint i;
while(j--)
for(i=0;i<250;i++);
}
void main( ) //主函数
{ data uchar a;
a=1; //保证只有一个点亮
while(1) //不断循环
{ P2=~a; //低电平点亮
a=a<<1; //左移一位,右补0 if(a==0)a=1; //全0
delay(2250);} //流动点亮延时 }
2、简单键控的流水灯
#include<reg51、h>
#define uchar unsigned char
#define uint unsigned int
void delay(uint i)
{ uchar t;
while(i--)
{
for(t=0;t<120;t++);
}
}
void main()
{ data uchar a;
a=1;
while(P2==0xff)
{ P0=~a;
a=a<<1;
if(a==0)
a=1;
delay(250);
}
while(P2==0xfe)
{ P0=~a;
a=a>>1;
if(a==0)
a=128;
delay(250);
}
}
3、键控的流水灯
#include<reg51、h>
#define uchar unsigned char #define uint unsigned int void delay(uint i)
{ uchar t;
data uchar b=0xfb;
while(i--)
{ if(P2==0xfe) b=0xfe;
if(P2==0xfd) b=0xfd;
if(P2==0xfb) b=0xfb;
for(t=0;t<120;t++);
}
}
void main()
{ data uchar a;
a=1;
while(P2==0xfe)
{ P0=~a;
a=a<<1;
if(a==0)
a=1;
delay(250);
while(P2==0xff)
{
P0=~a;
a=a<<1;
if(a==0)
a=1;
delay(250);
}
}
while(P2==0xfd)
{ P0=~a;
a=a>>1;
if(a==0)a=128;
delay(250);
while(P2==0xff)
{ P0=~a;
a=a>>1;
if(a==0)a=128;
delay(250);
}
}
while(P2==0xfb)
{ P0=0xff;}
}
五、实验结果
1、基本的流水灯
基本流水灯仿真图2、简单键控的流水灯
简单键控的流水灯仿真图
3、键控的流水灯
键控的流水灯仿真图
六、思考题回答
1、采用I/O口作为输出口时要考虑哪些因素?为什么实验装置中LED要串联一个电阻?
答:电压的大小(包括它能感知的最小电压作为高电平),电流的驱动能力等,同时也要要考虑它就是否要加上拉电阻。
实验装置中LED串联一个电阻就是为了防止电流过大而对LED灯有损坏。
2、采用I/O口作为输入口时要注意什么?键控的流水灯时为什么要在延时程序中检测就是否按键?
答:在进行读操作时,必须要先向Px口的锁存器写1;本程序未采用例程所说的方法,但就是在延时函数中进行按键检测就是为了防止在延时程序中间有键按
下却检测不到的情况,即放在延时函数中检测间隔时间短,反应快。
3、为什么延时程序要做一个函数?
答:可以具体事情具体处理,方便调用。
比如交通信号灯的控制,红灯绿灯黄灯都有时间控制,亮的长短就要由延时程序控制等等。
七、实验心得体会
学习单片机这门课程,要掌握单片机指令系统中汇编语言各种基本语句的意义及汇编语言程序设计的基本知识与方法,以及单片机与其她设备相连接的输入输出中断等接口技术。
跑马灯实验虽然就是第一个单片机实验,却让我深有体会,首先要熟悉单片机指令,上课时跟着老师走,认真对待,每次只要跟上老师上课所讲的内容以及按要求完成老师布置的课堂习题,掌握程序的编写以及完成实际上机操作就是不成问题的,然后就就是必须熟练运用一些基本语句,运用proteus 与uVision4等仿真软件,最后就是上机操作,根据教程了解单片机与其她设备相连接的输入输出中断等接口技术,运用实际,就可以完成简单有趣的跑马灯实验了!。