本人是單片機小白,在學習驅動max7219做個小時鐘;請教下面圖片中一個字符拆分開,在兩塊點陣屏上顯示怎么做的,目前只會一個屏顯示一個字符;
另外,中間那個冒號怎么顯示?
QQ截圖20180402153436.png (150.91 KB, 下載次數: 53)
下載附件
2018-4-2 15:40 上傳
QQ截圖20180402153451.png (62.8 KB, 下載次數: 72)
下載附件
2018-4-2 15:40 上傳
這是網上找來的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);
}
}
}
|