1 功能:
(1)静态显示:显示一个笑脸;
(2)动态显示:a,移动显示“HELLO!”,b,显示笑脸哭脸的变化;
2 原理
3 框图
4 硬件原理图


5 软件设计
5.1 静态显示源程序
(1)主函数
#include #include 'delay100ms.h' sbit SER = P3^4; //74HC595的串行数据输入DS sbit RCK = P3^5; //74HC595的移位寄存器SH_CP sbit SCK = P3^6; //74HC595的锁存寄存器ST_CP #define matrixled_col P0 //笑脸的数据,列向取模 unsigned char code disp[]={0x3C,0x42,0xA9,0x85,0x85,0xA9,0x42,0x3C}; /** * @brief:74HC595写入一个字节 * @param:需要写入的字节 * @retval:无 */ void hc74595_wrbyte(unsigned char byte) { unsigned char i; for(i=0;i<8;i++) { SER = byte & (0x80>>i); SCK = 1; SCK = 0; } RCK = 1; RCK = 0; } /** * @brief:LED点阵显示屏显示1列数据 * @param: column 选择要显示的列,范围0-7,0在最左边 * @param: dat 选择列显示的数据,高位在上,1为亮,0为灭 * @retval:无 */ void matrixled_showcol(unsigned char column,dat) { hc74595_wrbyte(dat); matrixled_col = ~(0x80>>column); delay100ms(1); matrixled_col = 0xff; } void main() { unsigned char i; SCK = 0; RCK = 0; while(1) { for(i=0;i<8;i++) { matrixled_showcol(i,disp[i]); } } } (2)延时函数及头文件 #include #include void delay100ms(unsigned int x) //@11.0592MHz { unsigned char i; while(x--) { _nop_(); i = 43; while (--i); } } #ifndef _delay100ms_h_ #define _delay100ms_h_ void delay100ms(unsigned int x); #endif 5.2 动态显示 5.2.1 移动显示HELLO!! (1)主函数 #include #include 'matrix_8x8led.h' unsigned char code disp[]={ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //0-7,空白区域 0x00,0x7F,0x08,0x08,0x7F,0x00,0x7F,0x49, //8-39,HELLO!! 0x49,0x49,0x00,0x7F,0x49,0x49,0x49,0x00, 0x7F,0x01,0x01,0x01,0x00,0x7F,0x41,0x41, 0x7F,0x00,0x00,0x7B,0x7B,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 //40-47,空白区域 }; void main() { unsigned char i; unsigned char offset=0; //偏移量 unsigned char count=0; //延时计数 matrix_8x8led_init(); //LED点阵初始化 while(1) { for(i=0;i<8;i++) //循环8次,显示8列数据,即一帧数据 { matrix_8x8led_showcol(i,disp[i+offset]); count++; //计数延时,影响数据移动快慢 if(count>20) { count = 0; offset++; if(offset>40) offset=0; } } } } (2)LED点阵驱动函数 #include #include 'delay100ms.h' #define matrixled_col P0 sbit SER = P3^4; //74HC595的串行数据输入DS sbit RCK = P3^5; //74HC595的移位寄存器SH_CP sbit SCK = P3^6; //74HC595的锁存寄存器ST_CP /** * @brief:74HC595写入一个字节 * @param:需要写入的字节 * @retval:无 */ void hc74595_wrbyte(unsigned char byte) { unsigned char i; for(i=0;i<8;i++) { SER = byte & (0x80>>i); SCK = 1; SCK = 0; } RCK = 1; RCK = 0; } /** * @brief: LED点阵显示屏初始化 * @param: 无 * @retval:无 */ void matrix_8x8led_init() { SCK = 0; RCK = 0; } /** * @brief:LED点阵显示屏显示1列数据 * @param: column 选择要显示的列,范围0-7,0在最左边 * @param: dat 选择列显示的数据,高位在上,1为亮,0为灭 * @retval:无 */ void matrix_8x8led_showcol(unsigned char column,dat) { hc74595_wrbyte(dat); matrixled_col = ~(0x80>>column); delay100ms(10); matrixled_col = 0xff; } #ifndef _matrix_8x8led_h_ #define _matrix_8x8led_h_ void matrix_8x8led_init(); void matrix_8x8led_showcol(unsigned char column,dat); #endif (3)延时函数:略 5.2.2 笑脸哭脸变化 (1)主函数 #include #include 'matrix_8x8led.h' unsigned char code disp[]={ 0x3C,0x42,0xA9,0x85,0x85,0xA9,0x42,0x3C, //笑脸 0x3C,0x42,0xA1,0x85,0x85,0xA1,0x42,0x3C, //一般 0x3C,0x42,0xA5,0x89,0x89,0xA5,0x42,0x3C //哭脸 }; void main() { unsigned char i; unsigned char offset=0; //偏移量 unsigned char count=0; //延时计数 matrix_8x8led_init(); //LED点阵初始化 while(1) { for(i=0;i<8;i++) //循环8次,显示8列数据,即一帧数据 { matrix_8x8led_showcol(i,disp[i+offset]); count++; //计数延时,影响数据移动快慢 if(count>20) { count = 0; offset+=8; //偏移+8,切换下一帧画面 if(offset>16) offset=0; } } } }
上一篇:LCD1602+单片机+普中+江科大自化协
下一篇:intrins.h 简介
推荐阅读最新更新时间:2026-03-25 12:01
- 用于 7VIN 至 16VIN、1.5V 和 1.2V 输出的 LTM4628EV DC/DC 模块稳压器的典型应用电路
- 使用 Analog Devices 的 LTC3728LIGN 的参考设计
- DER-406 - 适用于 A19 灯的 5.76 W 高 PF 非隔离降压-升压型 TRIAC 调光 LED 驱动器
- ADR5045B 5V 输出精密微功率并联模式电压基准的典型应用
- LT3970EDDB-3.42 2.5V 降压转换器的典型应用
- MC78M08BDTG 8V 电流调节器的典型应用
- LT1021DCN8-5 精密电压基准的典型应用
- DER-282 - 100W, 扁平(11 mm), LLC DC-DC转换器
- REF193 低压差开尔文连接电压基准的典型应用电路
- LT3088EM 线性稳压器用于添加软启动的典型应用

STC8H全系列单片机应用手册
使用PIC单片机控制心电前端ADS1192的实现单导心电测量
Follow me第三季第4期任务
现代雷达系统的信号设计
BFR340T






京公网安备 11010802033920号