本程序来自http://www.51hei.com/bbs/dpj-205333-1.html更改,驱动P3.75单红64X16。测试了下驱动9块板,sta8a选RC22.018MHz,刷新整屏都在98HZ
实物图如下:
单片机源程序如下:
- //LED屏控制程序 本程序驱动32*64LED彩色屏
- #include <stc15f2k60s2.H>
- #include<uart.h>
- //#include "common.h"
- #include <intrins.h>
- #define u8 unsigned char
- #define u16 unsigned int
- #define NOP _nop_()
- char Key_Read();
- //第1组
- //LED端口 共16根,其中3根为GND
- sbit XOE = P1^0; //传数允许
- sbit XSHCP=P1^1; //S 时钟
- sbit XSTCP=P1^2; //L 锁存输出
- sbit XA1 = P1^3; //A 由138控制的扫描行 共16行
- sbit XB1 = P1^4; //B
- sbit XC1 = P1^5; //C
- sbit XD1 = P1^6; //D
- sbit SR1DATA=P1^7; //数据1 红色
- //大字体
- u8 code dz1[4][128]={
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x3C,
- ***********
- u8 code kuaile[]={
-
- 0x18,0x06,0x18,0x06,0x18,0x06,0xD8,0x3F,0x38,0x36,0x7E,0x36,0x1E,0x36,0x1E,0x36,
- 0xFB,0xFF,0x18,0x06,0x18,0x0F,0x18,0x0F,0x98,0x19,0x98,0x19,0xD8,0x30,0x78,0xE0, //快0
- 0x00,0x0C,0x00,0x1F,0xF8,0x01,0x18,0x00,0x98,0x01,0x8C,0x01,0x8C,0x01,0xFC,0x7F,
- 0x80,0x01,0xB0,0x0D,0xB0,0x19,0x98,0x31,0x8C,0x61,0x86,0x61,0xE0,0x01,0xC0,0x00 //乐1
- };
-
-
-
-
- //第1组上下半部分数据传送 红 1 绿 2 蓝
- void shuju_input1(u8 sdat1) //参数为上半部数据 下半部数据 显示颜色
- {
- u8 m;
- sdat1=~sdat1;
- for(m=0;m<8;m++) //8位数据传送
- {
- if(sdat1 & 0x80) //判断最高位 上半部数据
- {
-
- SR1DATA=1;
- }
- else
- {
-
-
- SR1DATA=0;
-
-
- }
-
-
- XSHCP=0;
- XSHCP=1;
- NOP;
- NOP;
- XSHCP=0;
- NOP;
- NOP;
- sdat1=sdat1<<1;
- }
- }
- /*******************************************************************************************/
- void serial_output()
- {
- XSTCP=1;
- NOP;
- XSTCP=0;
- }
- void HC138_scan(u8 temp)
- {
- XOE=0;
- XA1=0x01 & temp;
- XB1=0x01 &(temp>>1);
- XC1=0x01 &(temp>>2);
- XD1=0x01 &(temp>>3);
- }
- //显示 每一单元板为32*64,能够显示二行汉字,每行四字(字模为顺向,逐行式,阴码的算法)
- void display(u8 *p) //4字的首地址
- {
- u8 qx=0,qxdata=0,qd=1;//奇数倍
- u16 j=0,k;
- for(k=0;k<16;k++) //16行 控制扫描行
- {
- for(j=1;j<5;j++) //共取8个字符高16X8,4个大字一个字是16X16
- {
- shuju_input1(*(p+(j-1)*32+k)); //取上下半汉字的第1个字节
- ////////////////////////////////////////////////////////////////////////////////
- qxdata=0;
- qx=0;
- while(qd)
- {
- qxdata++;
- if(qxdata%2){qx++;}
- if(qx==j)qd=0;
- }
- qd=1;
- ////////////////////////////////////////////////////////////////生成1 3 5 7 9 11
- shuju_input1(*(p+(qxdata*16)+k)); //取上下半汉字的第2个字节
- }
- XOE=1;
- serial_output(); //允许输出控制
- HC138_scan(k); //对应行
- }
- }
- void main()
- {
- UartInit(); //串口1初始化 //9600bps@11.0592MHz
- UART1_fs(0x88);
- while(1)
- {
- if(dyjs_1){
- dyjs_1=0;
- UART1_fs(0x99);
- }
- display(dzx4); //1个单元控制
- // display1(dzx1,dzx2); //1个单元控制
- // display2(dz2);
- // display3(dz1);
- }
- }
复制代码
Keil代码下载:
p3.75单红半板.zip
(58.04 KB, 下载次数: 32)
|