《例说单片机流水灯》由会员分享,可在线阅读,更多相关《例说单片机流水灯(6页珍藏版)》请在金锄头文库上搜索。
1、Spark 嵌入式工作室嵌入式工作室 www.sparkcn.co.cc QQ : 1 / 6 第三章第三章 流水灯流水灯实验实验 3.1 简介简介 在第一章介绍开发环境时,我们写了一个简单的例子,点亮一个 LED,这一章, 我们介绍如何让 LED 动态流水显示, 并且学习使用 C51 编译器的 sfr、 sbit和 code 关键字。 3.2 硬件设计硬件设计 从原理图可以看到,单片机通过 74HC138 译码器控制 LED 的电源端,通过缓冲器 74HC245 输出高低控制 LED 亮灭。 图 3.1 Spark 嵌入式工作室嵌入式工作室 www.sparkcn.co.cc QQ :
2、2 / 6 3.3 软件设计软件设计 3.3.1 简易流水灯 实现 8 个独立 LED 循环亮,代码如下: 程序清单L3.1 简易流水灯 1 #include 2 3 /函数声明函数声明 4 void delayms(unsigned char count); 5 6 /定义译码器控制端定义译码器控制端 7 sbit ADDR0 = P10; 8 sbit ADDR1 = P11; 9 sbit ADDR2 = P12; 10 sbit ADDR3 = P13; 11 sbit LEDEN = P14; 12 13 void main(void) 14 15 unsigned char i;
3、16 17 /使能独立使能独立LED的供电,即的供电,即LEDS6输出低电平输出低电平 18 LEDEN = 0; 19 ADDR0 = 0; 20 ADDR1 = 1; 21 ADDR2 = 1; 22 23 while(1) 24 25 for(i=0; i 2 3 /函数声明函数声明 4 void delayms(unsigned char count); 5 6 /流水灯花样表流水灯花样表 7 code unsigned char LedTab8 = 8 9 0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F, /单个灯循环亮单个灯循环亮 10 0xFE,0
4、xFC,0xF8,0xF0,0xE0,0xC0,0x80,0x00, /8个灯逐个亮个灯逐个亮 11 0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF, /8个灯逐个灭从个灯逐个灭从 12 0x7E,0x3C,0x18,0x00,0x00,0x81,0xC3,0xE7, /从两端亮,从中间灭从两端亮,从中间灭 13 0x7E,0xBD,0xDB,0xE7,0xE7,0xDB,0xBD,0x7E, /从两端循环亮从两端循环亮 14 ; 15 16 /定义译码器控制端定义译码器控制端 17 sbit ADDR0 = P10; 18 sbit ADDR1 = P11;
5、19 sbit ADDR2 = P12; 20 sbit ADDR3 = P13; 21 sbit LEDEN = P14; 22 void main(void) 23 24 unsigned char i; 25 unsigned char j; 26 27 /使能独立使能独立LED的供电,即的供电,即LEDS6输出低电平输出低电平 28 LEDEN = 0; 29 ADDR0 = 0; 30 ADDR1 = 1; 31 ADDR2 = 1; 32 33 while(1) 34 Spark 嵌入式工作室嵌入式工作室 www.sparkcn.co.cc QQ : 5 / 6 35 for(i
6、=0; i5; i+) 36 37 for(j=0; j8; j+) 38 39 P0 = LedTabij; 40 delayms(100); 41 42 43 44 L3.2(7):code 是 C51 编译器的关键字,用 code 声明的变量存储在程序空间。这里用 code 声明了流水灯花样表, 这个表格存储在单片机的 Flash 里。 大家在编程时可以注意一下, 加 code 和不加 code, 编译链接后的结果, 代码量和使用的 RAM量是不一样的。 L3.2(37-44):外层 for 循环实现循环执行 5 个流水花样,内层 for 循环将花样表中的数据逐个送出。 思考:思考: 1
7、 改动第一个例子,实现循环灭 2 编写一个流水灯的花样表 3 code 关键字和 const 关键字的用法区别 作者简介作者简介 Spark 嵌入式工作室,成立于 2010 年,致力于嵌入式方面的软、硬件开发和研究,团队成员都是有经验的开发工程师,擅长使用 51 单片机、STM32。 联系方式 QQ: QQ 技术交流群:186232047 验证码:spark 因群加入成员很快,如遇群满,请到 www.sparkcn.co.cc 获取最新交流群号,加入交流 Spark 嵌入式工作室嵌入式工作室 www.sparkcn.co.cc QQ : 6 / 6 代码包下载地址:www.sparkcn.co.cc 或直接到群里共享下载