阙正仁 发表于 2024-2-20 21:39:56

51 单片机 8x8 点阵 为啥显示不了 ‘ 正’ 字

#include "reg52.h"
typedef unsigned char u8 ;
typedef unsigned int u16 ;

sbit SRCLK = P3^6;
sbit rCLK = P3^5;
sbit SER = P3^4;
#define LEDZ_COL_PORT P0

void delay_10us (u16 ten_us)
{
while(ten_us--);
}
u8 g_row ={0x00,0x7E,0x08,0x08,0x2E,0x28,0x7E,0x00};
u8 g_col ={0x00,0x42,0x4E,0x42,0x7E,0x4A,0x4A,0x00};
void delay_ms (u16 jms)
{
u8 i, j;
for( i= jms; i>0; i--)
    for(j = 110; j>0; j--);
}   


void hc595_write_data(u8 dat)
{
   u8 i =0;
   for(i=0;i<8;i++)
   {
    SER = dat >> 7;
dat = dat<<1;
SRCLK = 0;
delay_10us(1);
SRCLK = 1;
delay_10us(1);
   }
   rCLK = 0;
   delay_10us(1);
   rCLK = 1;
}   

void main()
{
u8 i = 0;   
while(1)
{
   for(i=0; i<8; i++)
{
LEDZ_COL_PORT =g_row;
hc595_write_data(g_col) ;
    delay_10us (100);
    hc595_write_data(0x00) ;
}
}

}

HC6800-ES-V2.0 发表于 2024-3-3 16:07:40

#include "reg51.h"

typedef unsigned char u8 ;
typedef unsigned int u16 ;

sbit SRCLK = P3^6;
sbit RCLK=P3^5;
sbit SER = P3^4;

#define LEDZ_COL_PORT P0

void delay_10us (u16 ten_us)
{
while(ten_us--);
}

//u8 g_row ={0x00,0x7E,0x08,0x08,0x2E,0x28,0x7E,0x00};
//u8 g_col ={0x00,0x42,0x4E,0x42,0x7E,0x4A,0x4A,0x00};
u8 g_row= {0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
u8 g_col ={0x00,0x42,0x4E,0x42,0x7E,0x4A,0x4A,0x00};

//void delay_ms (u16 jms)
//{
//u8 i, j;
//for( i= jms; i>0; i--)
//    for(j = 110; j>0; j--);
//}   


void hc595_write_data(u8 dat)
{
   u8 i =0;
   for(i=0;i<8;i++)
   {
    SER = dat >> 7;
dat = dat<<1;
SRCLK = 0;
delay_10us(1);
SRCLK = 1;
delay_10us(1);
   }
   RCLK = 0;
   delay_10us(1);
   RCLK = 1;
}   

void main()
{
u8 i = 0;   
while(1)
{
   for(i=0; i<8; i++)
{
LEDZ_COL_PORT =g_row;
hc595_write_data(g_col) ;
    delay_10us (100);
    hc595_write_data(0x00) ;
}
}

}


你的程序基本是正确的,我只是改了你的第一组数据:lol


页: [1]
查看完整版本: 51 单片机 8x8 点阵 为啥显示不了 ‘ 正’ 字