|
想問一下為什么動態(tài)掃描點(diǎn)陣顯示漢字的時(shí)候,為什么會整個(gè)點(diǎn)陣都亮了?而且閃爍的沒有規(guī)律
單片機(jī)源程序如下:
- #include <reg51.h>
- #include "intrins.h"
- typedef unsigned int uint;
- typedef unsigned char uchar;
- sbit SRCLK = P3^6; // 移位寄存器時(shí)鐘
- sbit RCLK = P3^5; // 控制存儲寄存器的時(shí)鐘
- sbit SER = P3^4; //串行數(shù)據(jù)輸入
- uchar code ledduan[] = {
- /*-- 文字: 普 --*/
- /*-- 宋體12; 此字體下對應(yīng)的點(diǎn)陣為:寬x高=16x16 --*/
- 0x40,0x44,0x54,0x64,0x45,0x7E,0x44,0x44,0x44,0x7E,0x45,0x64,0x54,0x44,0x40,0x00, //從左往右從上往下依次掃描
- 0x00,0x00,0x00,0xFF,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0xFF,0x00,0x00,0x00,0x00,
- };
- uchar code ledwei[] = {
- 0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80
- };
- void delay(uint z){
- while (z--);
- }
- void hc595SendByte(uchar dat1,uchar dat2,uchar dat3,uchar dat4){
- uint i;
- SRCLK = 1;
- RCLK = 1;
- for (i = 0; i < 8; i++){
- SER = dat1 >> 7;
- dat1 <<= 1;
- SRCLK = 0;
- _nop_();
- // _nop_();
- SRCLK = 1;
- }
- for (i = 0; i < 8; i++){
- SER = dat2 >> 7;
- dat2 <<= 1;
- SRCLK = 0;
- _nop_();
- // _nop_();
- SRCLK = 1;
- }
- for (i = 0; i < 8; i++){
- SER = dat3 >> 7;
- dat3 <<= 1;
- SRCLK = 0;
- _nop_();
- // _nop_();
- SRCLK = 1;
- }
- for (i = 0; i < 8; i++){
- SER = dat4 >> 7;
- dat4 <<= 1;
- SRCLK = 0;
- _nop_();
- // _nop_();
- SRCLK = 1;
- }
- RCLK = 0;
- _nop_();
- //_nop_();
- RCLK = 1;
- }
- void main() {
- uchar i;
- while(1){
- for (i = 0; i < 16; i++){
- hc595SendByte(~ledwei[i+16],~ledwei[i],ledduan[i + 16],ledduan[i]); //前兩個(gè)控制列 后兩個(gè)控制行 從右下角的點(diǎn)往左往上讀 行連接了三極管的入口 列連接了三極管的出口
- delay(100); //例i=0;表示選中第一列,通過ledduan來選擇哪幾行亮
- }
- }
- }
復(fù)制代碼
|
|