采用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);//右移,選擇下一行
- }
- }
- }
- }
- }
復制代碼 |