|
#include
typedef unsigned char uchar;
#define DIGIT0 0x01
#define DIGIT1 0x02
#define DIGIT2 0x03
#define DECODE_MODE 0x09
#define INTENSITY 0x0a
#define SCAN_LIMIT 0x0b
#define SHUTDOWN 0x0c
#define DIS_TEST 0x0f
uchar bdata byte;
sbit byte_7=byte^7;
sbit DIN=P2^5;
sbit LD=P2^4;
sbit CLK=P2^3;
uchar code led_code[]={0x7e,0x30,0x6d,0x79,0x33,0x5b,0x50,0x70,0x7f,0x7b,0x77,0x1f,0x4e,0x3d,0x4f,0x47};
void max7219_reset(void);
void write_reg(uchar,uchar);
void write_digit(uchar,uchar);
void send_data(uchar);
void main(void)
{
max7219_reset();
write_digit(DIGIT0,0);
write_digit(DIGIT1,1);
write_digit(DIGIT2,2);
while(1)
{}
}
void max7219_reset(void) //初始化MAX7219
{
write_reg(DIS_TEST,0x0); //正常操作,不进行显示测试
write_reg(SHUTDOWN,0x01); //正常显示
write_reg(DECODE_MODE,0x0); // 不用自动编码
write_reg(SCAN_LIMIT,0x02); //
write_reg(INTENSITY,0x08); //亮度为17/32
}
void write_reg(uchar reg,uchar sdata) //写入命令
{
LD=0; //拉低LOAD
byte=reg; //将寄存器地址串行送入
send_data(byte);
byte=sdata; //将控制字节串行送入
send_data(byte);
LD=1; //置高LOAD,输入的数据生效
}
void write_digit(uchar digit,uchar number) //显示[url=https://bbs.eeworld.com.cn/viewthread.php?tid=59282&extra=&page=1]数字[/url]
{
LD=0; //拉低LOAD
byte=digit; //将寄存器地址串行送入
send_data(byte);
byte=led_code[number]; //查表,取出对应的字型编码
send_data(byte); //将字型编码送入MAX7219
LD=1; //置高LOAD,输入的数据生效
}
void send_data(uchar byte) //MAX7219的[url=https://bbs.eeworld.com.cn/viewthread.php?tid=59282&extra=&page=1]驱动[/url]程序
{
uchar i;
CLK=0; //拉低CLK,为产生上升沿作准备
for(i=0;i<=7;i++) //发送8bit的数据
{
DIN=byte_7;
CLK=1; //产生CLK的上升沿将1bit数据送入
byte<<=1;
CLK=0;
}
}
我用8051 来实现 MAX7219[url=https://bbs.eeworld.com.cn/viewthread.php?tid=59282]驱动[/url] 数码管显示0 1 2 三个数字
程序编译没有错但是MAX7219 引脚一直没有反应 数码管也不能亮的
请高手赐教啊,不甚感激
|
|