单片机流水灯实验
一、任务
让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
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灯灭。
相关推荐: