采用2片74HC595驱动,只需接单片机3路IO口,不会浪费IO使用率,根据点阵管动态扫描原理进行显示
兼容LCD1602液晶显示屏接口,直接插在开发板上就可以使用。
- /*
- 8×8点阵屏循环显示 “电”“子”“1”“2”“3”。
- */
- #include <reg52.h>
- #include <intrins.h> //循环右移头文件
- sbit DIO = P3^4; //串行数据口
- sbit S_CLK = P3^5;//移位寄存器时钟
- sbit R_CLK = P3^6;//输出锁存器时钟
- /*点阵字形码*/
- unsigned char code tabel[5][8]={
- 0xE0,0xEE,0x01,0x6D,0x01,0x6D,0x01,0xEF,//点
- 0xE7,0xF7,0xF7,0xF7,0x80,0xF7,0xFB,0xC3,//子
- 0x81,0xE7,0xE7,0xE7,0xE7,0xE7,0xC7,0xE7,//1
- 0x81,0x81,0xCF,0xE7,0xF3,0xB9,0x81,0xC3,//2
- 0xC3,0xB9,0xF9,0xFB,0xE7,0xFB,0xB9,0xC3,//3
- };
- /*595发送一字节*/
- void Send_Byte(unsigned char dat)
- {
- unsigned char i; //循环次数变量
- S_CLK = 0;//拉低移位寄存器时钟
- R_CLK = 0;//拉低输出锁存器时钟
- for(i=0; i<8; i++) //循环8次
- {
- if(dat & 0x01)//发送1
- DIO = 1;
- else //发送0
- DIO = 0;
- dat >>= 1;//数据右移
- S_CLK = 1;//拉高移位寄存器时钟,数据移位
- S_CLK = 0;//拉低移位寄存器时钟
- }
- }
- void main()
- {
- unsigned char j, k, ROW;//j发送8列和8行字形码,k字符数量,ROW行值
- unsigned int z; //动态扫描延时变量
- while(1)
- {
- for(k=0; k<5; k++)//k 需要显示的字符数量
- {
- for(z=0; z<500; z++)//z刷新次数
- {
- ROW = 0x80;//行选初值
- for(j=0; j<8; j++) //循环8次发送行和列值
- {
- Send_Byte(tabel[k][j]);//发送列选值
- Send_Byte(ROW); //发送行选值
- R_CLK = 1; //拉高输出锁存器,把移位寄存器中数据输出
- R_CLK = 0; //拉低输出锁存器
- ROW = _cror_(ROW, 1);//右移,选择下一行
- }
- }
- }
- }
- }
复制代码 |