单片机跑马灯实验报告

单片机跑马灯实验报告 Document serial number【UU89WT-UU98YT-UU8CB-UUUT-UUT108】
学号序号 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<>
#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<>
#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<>
#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等仿真软件,最后是上机操作,根据教程了解单片机与其他设备相连接的输入输出中断等接口技术,运用实际,就可以完成简单有趣的跑马灯实验了!。

合集下载

单片机跑马灯(流水灯)控制实验报告

单片机跑马灯(流水灯)控制实验报告

单片机跑马灯(流水灯)控制实验报告实验目的:本实验旨在通过使用单片机对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)为第二数据通道。

跑马灯单片机实训报告

跑马灯单片机实训报告

一、前言随着科技的不断发展,单片机技术在各个领域得到了广泛的应用。

为了提高我们的实践能力,加强理论知识与实际操作的结合,我们进行了单片机跑马灯实训。

通过本次实训,我们深入了解了单片机的基本原理,掌握了单片机的编程方法,并能够运用所学知识解决实际问题。

二、实训目的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、基本的流水灯根据图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单片机的多模式带音乐跑马灯设计实训报告一、实训目的和要求本次实训的目的是通过设计一个基于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.在调试过程中,可以逐步调试并测试每个模块的功能,确保整个系统的稳定性和可靠性。

单片机实验报告

单片机实验报告班级:姓名:学号:日期:实验一:跑马灯实验实验目的:1.通过实验,掌握汇编语言程序的基本格式及其编写;2.通过实验,熟悉指令系统,掌握查表指令及其应用;3.通过实验,掌握子程序及延时子程序的编写;4.通过实验,掌握中断的概念及其定时器的应用实验内容:1.键入跑马灯的代码:#include<iom16v.h>void delay_ms(unsigned int time){unsigned int k,l;for(k=0;k<time;k++)for(l=0;l<1141;l++);}void main(void){ unsigned char i,j;PORTC=0x00;DDRC=0xFF;while(1){ j=0x02;for(i=0;i<7;i++) //8个流水灯逐个闪动{PORTC=j;delay_ms(25); //调用延时函数j<<=1;}j=0x40;for(i=0;i<7;i++) //8个流水灯反向逐个闪动{PORTC=j;delay_ms(25); //调用延时函数j>>=1;}}}2.通过ISIS7 模拟单片机3..将代码通过ATMEGA16 实现跑马灯的运行。

4.在ISIS7中运行。

实验结果:8个灯能够一次从右到左,再从左到右间隔100ms亮起。

实验问题:一开始代码正确但是当键入到ATMEGA16时8个灯不能亮起,1)电阻太大而模拟的电流太小;2)delay_ms的子代码设定的时间太短。

但是可以通过修改时钟频率可以对硬件进行时间脉冲修改。

实验二:键盘扫描实验目的:1.熟悉键盘与显示器的接口连接方法。

1.掌握键盘扫描的实现过程。

实验内容:1.键入代码:#include<iom16v.h>void delay_ms(int x){int i,j;for(i=0;i<=x;i++)for(j=0;j<=5000;j++){}}char cycle(){char jianzhi;PORTA=0xf0; //行输出低电平,列带上拉电阻输入DDRA=0x0F;delay_ms(15);if(PINA==0xf0) //检查有无键按下,无键按下返回0XFF return(0xff);if(PINA==0x70) //获取按下键的行编码jianzhi=1;else if(PINA==0xb0) //四行三列jianzhi=2;else if(PINA==0xd0)jianzhi=3;else if(PINA==0xe0)jianzhi=4;PORTA=0x0f; //反转DDRA=0xf0;delay_ms(15);if(PINA==0x0D)jianzhi=jianzhi+0;else if(PINA==0x0B)jianzhi=jianzhi+4;else if(PINA==0x07)jianzhi=jianzhi+8;return(jianzhi);}void main(){DDRD=0XFF;PORTD=0X00;DDRB=0XFF;PORTB=0X00;while(1){int jianzhi=cycle();switch(jianzhi){case 1:PORTB=0X00;PORTD=0X01;break;case 2:PORTB=0X00;PORTD=0X02;break;case 3:PORTB=0X00;PORTD=0X04;break;case 4:PORTB=0X00;PORTD=0X08;break;case 5:PORTB=0X00;PORTD=0X10;break;case 6:PORTB=0X00;PORTD=0X20;break;case 7:PORTB=0X00;PORTD=0X40;break;case 8:PORTB=0X00;PORTD=0X80;break;case 9:PORTD=0X00;PORTB=0X01;break;case 10:PORTD=0X00;PORTB=0X02;break;case 11:PORTD=0X00;PORTB=0X04;break;case 12:PORTD=0X00;PORTB=0X08;break;}}}2.通过ISIS7模拟连接电路:3.带入代码,运行程序,点击每个键盘按钮在右边的LED灯处显示所按得键盘号。

单片机跑马灯实训报告

了解跑马灯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个串行通信口,片内振荡器和时钟电路。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档