本人是单片机小白,在学习驱动max7219做个小时钟;请教下面图片中一个字符拆分开,在两块点阵屏上显示怎么做的,目前只会一个屏显示一个字符;
另外,中间那个冒号怎么显示?
这是网上找来的7219驱动程序,要怎么修改才能实现自己的需求
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
//定义Max7219端口
sbit Max7219_pinCLK = P2^2;
sbit Max7219_pinCS = P2^1;
sbit Max7219_pinDIN = P2^0;
uchar code disp1[3][8]={
{0x7E,0x2,0x2,0x7E,0x40,0x40,0x40,0x7E}, //2
{0x3E,0x2,0x2,0x3E,0x2,0x2,0x3E,0x0}, //3
{0x8,0x18,0x28,0x48,0xFE,0x8,0x8,0x8}, //4
};
/*n毫秒的延时程序*/
void Delay_xms(uint x)
{
uint i,j;
for(i=0;i<x;i++)
for(j=0;j<112;j++);
}
//--------------------------------------------
//向MAX7219(U3)写入字节
void Write_Max7219_byte(uchar DATA)
{
uchar i;
Max7219_pinCS=0; //CS=0有效,CS=1锁存
for(i=8;i>=1;i--)
{
Max7219_pinCLK=0;
Max7219_pinDIN=DATA&0x80; //&10000000, 编译器对位操作的理解:非0即为1
DATA=DATA<<1;
Max7219_pinCLK=1; //上升沿把数据送出去
}
}
//-------------------------------------------
/*向M第一片MAX7219写入数据*/
void Write_Max7219_1(uchar add1,uchar dat1)
{
Max7219_pinCS=0;
Write_Max7219_byte(add1); //写入地址,即数码管编号
Write_Max7219_byte(dat1); //写入数据,即数码管显示数字
Max7219_pinCS=1;
}
/*第二片MAX7219的写入数据*/
void Write_Max7219_2(uchar add2,uchar dat2)
{
Max7219_pinCS=0;
Write_Max7219_byte(add2);
Write_Max7219_byte(dat2);
Max7219_pinCLK=1;
Write_Max7219_byte(0x00); //片1写入空
Write_Max7219_byte(0x00);
Max7219_pinCS=1;
}
/*第三片MAX7219的写入数据*/
void Write_Max7219_3(uchar add3,uchar dat3)
{
Max7219_pinCS=0;
Write_Max7219_byte(add3);
Write_Max7219_byte(dat3);
Max7219_pinCLK=1;
Write_Max7219_byte(0x00); //片1写入空
Write_Max7219_byte(0x00);
Write_Max7219_byte(0x00); //片2写入空
Write_Max7219_byte(0x00);
Max7219_pinCS=1;
}
/*初始化芯片*/
void Init_MAX7219(void)
{
Write_Max7219_1(0x09, 0x00); //译码方式:BCD码
Write_Max7219_1(0x0a, 0x03); //亮度
Write_Max7219_1(0x0b, 0x07); //扫描界限;8个数码管显示
Write_Max7219_1(0x0c, 0x01); //掉电模式:0,普通模式:1
Write_Max7219_1(0x0f, 0x00); //显示测试:1;测试结束,正常显示:0
Write_Max7219_2(0x09, 0x00); //译码方式:BCD码
Write_Max7219_2(0x0a, 0x03); //亮度
Write_Max7219_2(0x0b, 0x07); //扫描界限;8个数码管显示
Write_Max7219_2(0x0c, 0x01); //掉电模式:0,普通模式:1
Write_Max7219_2(0x0f, 0x00); //显示测试:1;测试结束,正常显示:0
Write_Max7219_3(0x09, 0x00); //译码方式:BCD码
Write_Max7219_3(0x0a, 0x03); //亮度
Write_Max7219_3(0x0b, 0x07); //扫描界限;8个数码管显示
Write_Max7219_3(0x0c, 0x01); //掉电模式:0,普通模式:1
Write_Max7219_3(0x0f, 0x00); //显示测试:1;测试结束,正常显示:0
}
/**********************主程序**************************/
void main(void)
{
uchar i,j;
Delay_xms(50);
Init_MAX7219();
while(1)
{
for(j=0;j<3;j++)
{
for(i=1;i<9;i++)
{
Write_Max7219_1(i,disp1[2][i-1]);
Write_Max7219_2(i,disp1[3][i-1]);
Write_Max7219_3(i,disp1[4][i-1]);
}
Delay_xms(1000);
}
}
}
|