- 单片机C语言程序设计实训100例
- 彭伟编著
- 442字
- 2025-02-19 23:22:33
3.4 花样流水灯
在上一案例中,LED只能按某种单调的规律显示,无法实现复杂多变的花样显示。本例中两组LED连接在P0和P2端口,它们按预先设定的花样变换显示。
本例电路如图3-4所示。
程序设计调试与实训:
本例将设计的花样预设在两个数组中,它们分别与两组LED对应,各数组中的每个字节对应一种显示组合,程序循环读取数组中的显示组合并送往端口,实现自定义花样的自由显示。
本例P0、P2端口对应的花样数组所占空间较大,且预设后相对固定,因此Pattern_P0,Pattern_P2的存储类型均设为code,由于电路中LED共阳连接,初始时将P0、P2均设为0xFF,在开始时将它们全部关闭。
读者可以自行调整数组内容,改变数组大小,实现自定义的花样显示。

图3-4 花样流水灯电路
源程序代码:
//----------------------------------------------------------------- // 名称: 花样流水灯 //----------------------------------------------------------------- // 说明: 16只LED分两组按预设的多种花样变换显示。 //----------------------------------------------------------------- #include <reg51.h> #define uchar unsigned char #define uint unsigned int uchar code Pattern_P0[] = { 0xFC,0xF9,0xF3,0xE7,0xCF,0x9F,0x3F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xE7,0xDB,0xBD,0x7E,0xBD,0xDB,0xE7,0xFF,0xE7,0xC3,0x81,0x00,0x81,0xC3,0xE7,0xFF, 0xAA,0x55,0x18,0xFF,0xF0,0x0F,0x00,0xFF,0xF8,0xF1,0xE3,0xC7,0x8F,0x1F,0x3F,0x7F, 0x7F,0x3F,0x1F,0x8F,0xC7,0xE3,0xF1,0xF8,0xFF,0x00,0x00,0xFF,0xFF,0x0F,0xF0,0xFF, 0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE, 0xFE,0xFC,0xF8,0xF0,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE, 0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF }; uchar code Pattern_P2[] = { 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFC,0xF9,0xF3,0xE7,0xCF,0x9F,0x3F,0xFF, 0xE7,0xDB,0xBD,0x7E,0xBD,0xDB,0xE7,0xFF,0xE7,0xC3,0x81,0x00,0x81,0xC3,0xE7,0xFF, 0xAA,0x55,0x18,0xFF,0xF0,0x0F,0x00,0xFF,0xF8,0xF1,0xE3,0xC7,0x8F,0x1F,0x3F,0x7F, 0x7F,0x3F,0x1F,0x8F,0xC7,0xE3,0xF1,0xF8,0xFF,0x00,0x00,0xFF,0xFF,0x0F,0xF0,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F, 0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFC,0xF8,0xF0,0xE0,0xC0,0x80,0x00, 0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF }; //----------------------------------------------------------------- // 延时 //----------------------------------------------------------------- void DelayMS(uint x) { uchar t; while(x--) for(t = 0; t < 120; t++); } //----------------------------------------------------------------- // 主程序 //----------------------------------------------------------------- void main() { uchar i; while(1) { //从数组中读取数据送至P0端口和P2端口显示 for(i = 0; i < 136; i++) { P0 = Pattern_P0[i]; P2 = Pattern_P2[i]; DelayMS(100); } } }