流水灯实验报告

时间:2024.4.29

单片机流水灯实验

一、任务

让8个LED灯轮流亮起来,实现流水灯的功能。

二、思路

让接在P0.0口的LED灯亮起来,那么只要把P0.0口的电平变为低电平就可以了;相反,如果要接在P0.0口的LED灯熄灭,就要把P0.0口的电平变为高电平就可以了。要实现流水灯功能,只要将8个LED灯依次点亮、熄灭,8只LED灯便会一亮一暗的做流水灯了。

我们应该注意一点,由于单片机执行每条指令的时间很短,我们在控制二极管亮灭的时候应该延时一段时间,否则我们就看不到“流水”效果了。

三、步骤

1、用proteus画电路图。如下图:

2、用keil建工程。

1)        运行keil C51软件,点击Project菜单新建项目,选择为AT89C52的单片机型号。然后单击File选择New新建程序文件,保存成 .c 文件,右击Source Group1添加入程序文件。

2)        用C语言编写程序代码如下:

#include <reg52.h>

void delay (unsigned char tmp);

code unsigned char tmpled[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

void main(void)

{

unsigned char i;

while (1)

{

          for(i=0;i<8;i++)

          {

                    P0=tmpled[i];

                    delay(50);

          }

}

}

void delay(unsigned char tmp)

{

unsigned char i,j;

i=tmp;

while(i)

{

          i--;

          j=255;

          {

                    j--;

          }

}

}

3)        右击Target 1打开设置,Output菜单下勾选上create hex file。

4)         调试运行程序后,在proteus中双击单片机,添加hex文件,运行看到流水的的效果。

              

四、  实验中遇到的问题。

1、  用proteus仿真时候,发现错误:

error variable not found parsing property resistance of RN1-Rnvalue expected for RN1-R(n=1~8)而且led灯亮度十分微弱。可能是接入的电阻太大了。

检查电路图发现排阻的值为RX8,修改为220(自己选择)后。错误便没有了,同时,led灯的亮度也增强了。

2、  关于延时函数。

延时的时间计算不太明白。

3、P0=0xfe;是对单片机P0口的8个I/O口同时进行操作,0x后的数使用十六进制表示,fe转换为二进制是1111 1110,则P0.0为低电平,对应的led灯亮,其他7个led灯灭。


第二篇:流水灯控制实验报告及程序


实验三 流水灯控制实验

姓名 专业 通信工程 学号 成绩

一、实验目的

1. 掌握Keil C51 软件与protues软件联合仿真调试的方法;

2. 掌握如何使用程序与查表等方法实现流水效果;

3. 掌握按键去抖原理及处理方法。

二、实验仪器与设备

1. 微机1台 2. Keil C51集成开发环境 3. Proteus仿真软件

三、实验内容

1. 用Proteus设计一流水灯控制电路。利用P1口控制8个发光二级管L1—L8。P3.3口接一按键K1。参考电路如下图所示。其中74LS240为八反响三态缓冲器/线驱动器。

2. 用中断或查询方式编写程序,每按动一次K1键,演示不同的流水效果。若用KEY表示按键的次数,则其对应的流水效果如下:

① KEY=0: L1-L8全亮;

② KEY=1: L1-L8先全灭,然后自右向左单管点亮,如此循环;

③ KEY=2: L1-L8先全灭,然后自右向左依次点亮,如此循环;

④ KEY=3: L1-L8先全亮,然后自左向右依次熄灭,如此循环;

⑤ KEY=4: L1-L8先全灭,然后整体闪烁,如此循环;

⑥ KEY=5: 自行设计效果。

以上移位及闪烁时间间隔均设置为0.3秒,按动5次按键后,再按键时,流水效果从头开始循环。

四、实验原理

1. 按键去抖原理:通常按键所用的开关为机械弹性开关,当机械触点断开、闭合时,电压信号波形如下图所示。由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定的接通,在断开时也不会一下子断开。因而在闭合及断开的瞬间均伴随有一连串的抖动。抖动时间的长短由按键的机械特性决定,一般为5~10ms。按键抖动会引起一次按键被误读多次。为了确保CPU对键的一次闭合仅做一次处理,必须去除按键抖动。在键闭合稳定时,读取键的状态,并且必须判别;在键释放稳定后,再作处理。按键的抖动,可用硬件或软件两种方法消除。常用软件方法去抖动,即检测到按键闭合后执行一个5~10ms延时程序;让前沿抖动消失后,再一次检测键的状态,如果仍保持闭合状态电平,则确认为真正有按键按下。当检测到按键释放后,也要给5~10ms的延时,待后延抖动消失后,才能转入该键的处理程序。

2. 74LS240:八反相三态缓冲器/线驱动器

引脚排列图:

流水灯控制实验报告及程序

1

3. 中断原理:当某种内部或外部事件发生时,单片机的中断系统将迫使CPU暂停正在执行的程

序,转而去进行中断事件的处理,中断处理完毕后,又返回被中断的程序处,继续执行下去。每次按键是一次外部中断,按下按键后,CPU利用switch case语句跳转到相应语句执行。

五、实验步骤

1. 用Proteus设计流水灯控制电路;

2. 在Keil C51中编写流水灯控制程序,编译通过后,与Proteus联合调试;

3. 按动K1键,观察是否达到演示效果;

4. 试用中断和查询两种方式编写程序,比较二者区别。

六、电路设计及调试

1. 实验电路

流水灯控制实验报告及程序

流水灯控制实验报告及程序

2

2.程序设计与调试 #include<reg51.h>

#define uchar unsigned char #define uint unsigned int uchar i=0,j,k,m,n;

uchar code table1[]={0x00,0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};//自右向左单个点亮二极管的代码

uchar code table2[]={0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff};//自右向左依次点亮二极管的代码

uchar code table3[]={0xff,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00};//自左向右依次熄灭二极管的代码

uchar code table4[]={0x00,0x03,0x06,0x0c,0x18,0x30,0x60,0xc0};//双灯循环右移 void delay(uint a);

void INT_1() interrupt 2 {

EX1=0;

delay(20); EX1=1; i++;

if(i==6) i=0;

流水灯控制实验报告及程序

3

}

void main()

{

EA=1; //打开总中断

EX1=1; //打开外部中断1

IT1=1; //设置中断触发方式为下降沿触发方式

while(1)

{

switch(i)

{

case 0:P1=0xff;

break;

case 1:P1=table1[j];delay(500);j++; if(j==10) j=0;

break;

case 2:P1=table2[k];delay(500);k++; if(k==10) k=0;

break;

case 3:P1=table3[m];delay(500);m++; if(m==10) m=0;

break;

case 4:P1=0x00;delay(300);P1=~P1;delay(300);

break;

case 5:P1=table4[n];delay(500);n++; if(n==10) n=0;

break;

default:break;

}

}

}

void delay( uint a)

{

uchar b;

for(a; a > 0; a--) //循环600*255次 机器在这里执行需要一段时间 也就达到了延时效果

for(b = 255; b > 0; b--);

}

在“Options for target”的“debug”里选中“Proteus VSM Simulator”并选择输出“hex”文件进行联合调试。分别进行全速调试与单步调试,看是否出现编程所想要实现的效果。

3. 实验结果

按下不同的按键次数,执行不同的流水效果,自行设计效果为双灯循环右移。

七、实验总结及问题

通过本次流水灯控制实验,进一步掌握了Keil C51软件与proteus联合仿真调试的方法,逐步熟练了单步调试的方法。自己用中断方法完成了本次实验,也尝试用查询方法编写程序,知道中断方法是在有中断请求时CPU再去处理,之前可一直忙于其他事情,而查询方法需一直查询标志位,CPU不能做其他事情,中断方法效率要比查询方式高而且较简单。第一次用按键控制电路,学习了按键的去抖原理及使用方法。

在实验中,会出现未知效果,总体看来原因不明,只要进行单步调试就可找到问题所在。

思考:如果不进行去抖处理,CPU可能会误判,按下后认为按键松开,多次执行相应程序,得不到想要的控制效果。

4

5

更多相关推荐:
单片机实验报告——流水灯

电子信息工程学系实验报告课程名称:单片机原理及接口实验项目名称:实验2流水灯实验时间:20xx-10-21班级:电信092姓名:蔡**学号:*********一、实验目的:进一步熟悉keil仿真软件、prote…

流水灯实验报告

实验报告课程名称单片机实习专业班级姓名戴秀锋学号1104451216电气与信息学院和谐勤奋求是创新1234实验教学考核和成绩评定办法课内实验考核成绩严格按照该课程教学大纲中明确规定的比重执行实验成绩不合格者不能...

单片机流水灯实验报告

单片机流水灯实验报告一实验目的1熟练掌握AT89S52型开发板的使用方法和注意事项2了解简单单片机应用系统的设计方法3掌握应用KEIL软件编辑编译源汇编程序的操作方法4掌握应用USBISP烧录软件的操作方法5帮...

51单片机流水灯实验报告

51单片机流水灯试验一实验目的1了解51单片机的引脚结构2根据所学汇编语言编写代码实现LED灯的流水功能3利用开发板下载hex文件后验证功能二实验器材个人电脑80c51单片机开发板三实验原理单片机流水的实质是单...

流水灯实验报告

扬州大学广陵学院课程设计报告设计题目流水灯设计姓名学号100036137班级时间20xx年7月4日目录一设计任务与要求3二实验目的3三实验思路31系统逻辑设计32源程序代码3LED流水灯控制模块4分频器5四位选...

单片机并口简单应用(流水灯)实验报告

实验一单片机并口简单应用流水灯一实验目的1了解单片机汇编语言程序的基本结构2了解单片机汇编语言程序的设计和调试方法3掌握顺序控制程序的简单编程二实验仪器单片机开发板万利仿真机稳压电源计算机三实验原理1流水灯硬件...

LED流水灯实验报告-0802薛红锋(06)

LED流水灯实验报告实验一系别:电子工程学院专业:微电子学班级:微电子0802姓名:实验时间:20XX年05月18日实验一基于51单片机的LED流水灯设计一、实验目的:1、了解基于51单片机的汇编语言程序设计2…

流水灯实验报告

实验一流水灯实验一实验目的1简单IO引脚的输出2掌握软件延时编程方法3简单按键输入捕获判断二实验实现的功能1开机时点亮12发光二极管闪烁三下2按照顺时针循环依次点亮发光二极管3通过按键将发光二极管的显示由顺时针...

流水灯单片机课程设计报告

井冈山大学机电工程学院单片机课程设计报告课程名称单片机设计题目流水灯姓名覃家应陈东阳专业生物医学工程班级10级医工本一班学号100615062指导教师王佑湖20xx年11月10日目录1引言211设计任务212设...

流水灯实验报告

实验报告实验课程51单片机C语言教程实验内容8孔流水灯院系计算机学院专业通信工程20xx年10月29日单片机原理实验一实验目的1熟练掌握AT89S52型开发板的使用方法和注意事项2了解简单单片机应用系统的设计方...

单片机流水灯实验报告 (2)

流水灯实验报告一实验目的1熟练掌握AT89S52开发板的使用方法和注意事项2了解简单单片机应用系统的设计方法3掌握应用KEIL软件编辑编译源汇编程序的操作方法4掌握应用AVRFIGHT烧录软件的操作方法二实验内...

流水灯实验报告

单片机流水灯试验一实验目的1进一步熟悉KeilC51集成开发环境调试功能的使用2学会自己编写程序进行编译仿真调试3学会使用单片机的P0口作为IO口去控制外围电路实现LED灯以固定的频率进行闪烁二实验设备1PC机...

流水灯实验报告(28篇)