这是一块64*16的点阵LED屏,STC11系列驱动74HC245
245的五个输出控制2颗hc138d来驱动上-》下2行8*8点阵模块的行显示,高电平点亮。
245的三个输出控制8颗hc595d来驱动左-》右8列模块的列显示。
我程序直接行显示固定死的情况下,列显示给值0x55,对应屏幕模块应该显示:亮灭亮灭 亮灭亮灭的,但是为什么是图中的样子,只有第一个亮灭实现了,后边全是灭的。求指教-------------
制作出来的实物图如下:
单片机源程序如下:- #include<reg52.h> //EN=HC138D的E1,E2必须置于低电平。D=HC138D的E3置于低电平上八行工作,置于高电平下八行工作。
- #include<intrins.h>
- typedef unsigned char u8;
- sbit A=P2^4;
- sbit Bb=P2^5;
- sbit C=P2^6;
- sbit D=P2^7;
- sbit EN=P0^7;
- sbit ST=P0^6;
- sbit CK=P1^7;
- sbit DATA=P1^6;
- void sendlie(dat) //发送列数据函数
- {
- u8 a;
- for(a=0;a<8;a++) //发送8位数
- {
-
- DATA = dat >> 7; //从最高位开始发送
- dat <<= 1;
- CK = 0;
- _nop_();
- _nop_();
- CK = 1; //发送时序
- _nop_();
- _nop_();
- CK = 0;
- }
-
- }
- void lieout()
- {
- ST = 0;
- _nop_();
- _nop_();
- ST = 1;
- _nop_();
- _nop_();
- ST = 0;
- }
- /*******************************************************************************
- * 函 数 名 : main
- * 函数功能 : 主函数
- * 输 入 : 无
- * 输 出 : 无
- *******************************************************************************/
- void main()
- {
-
- EN = 0; //使HC138d的E1,E2置低位
- D = 0; //HC138D的E3置高位下八行工作,置低位上八行工作。
- A = 0; //ABC发送行数据
- Bb = 0;
- C = 1;
- while(1)
- {
-
-
- sendlie(0xff);
- sendlie(0xff);
- sendlie(0x55);
- sendlie(0xff);
- sendlie(0xff);
- sendlie(0x55);
- sendlie(0xff);
- sendlie(0xff);
- lieout();
-
-
- }
- }
复制代码
|