//單片機(jī)晶振12M
//顯示0-9中國(guó)
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define count 16 //級(jí)聯(lián)個(gè)數(shù)
unsigned char s, f,j,k,c5,c4,c3,c2,c1,c0,m,n=1;
unsigned char pp;
//定義Max7219端口
sbit Max7219_pinCLK = P2^2;
sbit Max7219_pinCS = P2^1;
sbit Max7219_pinDIN = P2^0;
sbit k1=P3^4;
sbit k2=P3^5;
sbit k3=P3^6;
sbit k4=P3^7;
uchar code disp1[10][8]=
{
{0x18,0x24,0x24,0x24,0x24,0x24,0x24,0x18},//0
{0x10,0x30,0x50,0x10,0x10,0x10,0x10,0x38},//1
{0x0,0x1C,0x24,0x4,0x8,0x10,0x20,0x3C},//2
{ 0x18,0x24,0x4,0x8,0x18,0x4,0x24,0x18},//3
//{0x0,0x3e,0x2,0x2,0x3e,0x2,0x02,0x3e},//3
//{0x8,0x18,0x28,0x48,0xFE,0x8,0x8,0x00},//4
{ 0x0,0x4,0xC,0x14,0x24,0x3E,0x4,0x4 },//4
{ 0x0,0x3C,0x20,0x38,0x4,0x4,0x24,0x38},//5
//{0x0,0x3C,0x20,0x20,0x3C,0x4,0x4,0x3C},//5
{ 0x18,0x24,0x20 ,0x38,0x24,0x24,0x24,0x18},//6
//{0x0,0x3C,0x20,0x20,0x3C,0x24,0x24,0x3C},//6
{0x0,0x3E,0x22,0x4, 0x8, 0x8, 0x8, 0x8},//7
{ 0x0,0x18,0x24,0x24,0x18,0x24,0x24,0x18},//8
//{0x0,0x3E,0x22,0x22,0x3E,0x22,0x22,0x3E},//8
{ 0x18,0x24,0x24,0x24,0x1C,0x4,0x24,0x18}//9
//{0x0,0x3e,0x22,0x22,0x3e,0x2,0x2,0x3e},//9
/*{0x0,0x8,0x14,0x22,0x3E,0x22,0x22,0x22},//A
{0x0,0x3C,0x22,0x22,0x3E,0x22,0x22,0x3C},//B
{0x0,0x3C,0x40,0x40,0x40,0x40,0x40,0x3C},//C
{0x0,0x7C,0x42,0x42,0x42,0x42,0x42,0x7C},//D
{0x7C,0x40,0x40,0x7C,0x40,0x40,0x7c,0x00},//E
{0x00,0x7C,0x40,0x40,0x7C,0x40,0x40,0x40},//F
{0x00,0x3C,0x40,0x40,0x40,0x44,0x44,0x3C},//G
{0x00,0x44,0x44,0x44,0x7C,0x44,0x44,0x44},//H
{0x00,0x10,0xFE,0x92,0x92,0xFE,0x10,0x10},//中
{0xFE,0xBA,0x92,0xBA,0x92,0x9A,0xBA,0xFE},//國(guó)*/
};
uchar code disp2[10][8]=
{
{ 0x60,0x93,0x93,0x90,0x90,0x90,0x93,0x63},//0
{0x20,0x63,0xA3,0x20,0x20,0x20,0x23,0x73 },//1
{ 0x0,0xE3,0x93,0x10,0x20,0x40,0x83,0xF3},//2
{ 0x60,0x93,0x13,0x20,0x60,0x10,0x93,0x63},//3
{ 0x0,0x13,0x33,0x50,0x90,0xF8,0x13,0x13},//4
{ 0x0,0xF3,0x83,0xE0,0x10,0x10,0x93,0xE3},//5
{0x63,0x93,0x80,0xE0,0x90,0x90,0x93,0x63},//6
{ 0x0,0xF3,0x93,0x20,0x40,0x40,0x43,0x43},//7
{0x0,0x63,0x93,0x90,0x60,0x90,0x93,0x62},//8
{ 0x63,0x93,0x90,0x90,0x70,0x10,0x93,0x63},//9
};
void Delay_xms(uint x);
void delay1(unsigned char i);
void Write_Max7219_byte(uchar DATA);//寫入一字節(jié)
void Write_Max7219(uchar address1,uchar dat1,uchar address2,uchar dat2);
void Init_MAX7219(void);
// 鎖存進(jìn)相應(yīng)寄存器
void keyscan()
{
if(k1==0)
{
delay1(10);
if(k1==0)
{
f++;
if(f>=60)
f=0;
while(k1==0);
}
}
if(k2==0)
{
delay1(10);
if(k2==0)
{
f--;
if(f==1)
f=60;
while(k2==0);
}
}
if(k3==0)
{
delay1(10);
if(k3==0)
{
s++;
if(s>=24)
s=0;
while(k3==0);
}
}
if(k4==0)
{
delay1(10);
if(k4==0)
{
s--;
if(s==1)
s=24;
while(k4==0);
}
}
}
//開總中斷
void main(void)
{
uchar i,j;
Delay_xms(50);
Init_MAX7219();
TMOD=0x01; //模式設(shè)置,00000001,可見采用的是定時(shí)器0,工作與模式1(M1=0,M0=1)。
TR0=1; //打開定時(shí)器
TH0=(65536-46080)/256;// 由于晶振為11.0592,故所記次數(shù)應(yīng)為46080,計(jì)時(shí)器每隔50000微秒發(fā)起一次中斷。
TL0=(65536-46080)%256;//46080的來歷,為50000*11.0592/12
//ET0=1; //開定時(shí)器0中斷
// EA=1;
while(1)
{
keyscan();
if(TF0==1) //單片機(jī)一直在查詢定時(shí)器0的溢出標(biāo)志位TF0狀態(tài)
{
TF0=0;
pp++;
TH0=(65536-65080)/256;
TL0=(65536-65080)%256;
}
if(pp==8)
{ pp=0;
m++;
n++;
P1=n;//閃爍燈
if(m==60)
{
m=0;
f++;
if(f==60)
{
f=0;
s++;
if(s==24)
{
s=0; //若到了60s,則歸零
}
}
}
}
c0=m%10; //取出當(dāng)前描述的個(gè)位與十位
c1=m/10;
c2=f%10; //取出當(dāng)前描述的個(gè)位與十位
c3=f/10;
c4=s%10;
c5=s/10;
// for(i=1;i<9;i++)
// Write_Max7219(i,disp1[1][i-1],i,disp1[0][i-1]);
for(i=1;i<9;i++)
{
// Write_Max7219(i,disp1[1][i-1],i,disp1[0][i-1]);
Max7219_pinCS=0;
for(j=0;j<count;j++)
{
Write_Max7219_byte(i); //寫入地址,即數(shù)碼管編號(hào)
Write_Max7219_byte(disp1[c5][i-1]); //寫入數(shù)據(jù),即數(shù)碼管顯示數(shù)字
Write_Max7219_byte(i); //寫入地址,即數(shù)碼管編號(hào)
Write_Max7219_byte(disp2[c4][i-1]);
Write_Max7219_byte(i); //寫入地址,即數(shù)碼管編號(hào)
Write_Max7219_byte(disp1[c3][i-1]);
Write_Max7219_byte(i); //寫入地址,即數(shù)碼管編號(hào)
Write_Max7219_byte(disp1[c2][i-1]);
_nop_();
}
Max7219_pinCS=1;
}
Delay_xms(2);
}
}
void Init_MAX7219(void)
{
/* Write_Max7219(0x09, 0x00,0x09, 0x00); //譯碼方式:BCD碼
Write_Max7219(0x0a, 0x03,0x0a, 0x03); //亮度
Write_Max7219(0x0b, 0x07,0x0b, 0x07); //掃描界限;8個(gè)數(shù)碼管顯示
Write_Max7219(0x0c, 0x01,0x0c, 0x01); //掉電模式:0,普通模式:1
Write_Max7219(0x0f, 0x00,0x0f, 0x00); //顯示測(cè)試:1;測(cè)試結(jié)束,正常顯示:0
*/
uchar i;
Max7219_pinCS=0;
for(i=0;i<count;i++)
{
Write_Max7219_byte(0x09); //譯碼方式:BCD碼
Write_Max7219_byte(0x00);
}
Max7219_pinCS=1;
_nop_();
Max7219_pinCS=0;
for(i=0;i<count;i++)
{
Write_Max7219_byte(0x0a); //亮度
Write_Max7219_byte(0x03);
}
Max7219_pinCS=1;
_nop_();
Max7219_pinCS=0;
for(i=0;i<count;i++)
{
Write_Max7219_byte(0x0b); // //掃描界限;8個(gè)數(shù)碼管顯示
Write_Max7219_byte(0x07);
}
Max7219_pinCS=1;
_nop_();
Max7219_pinCS=0;
for(i=0;i<count;i++)
{
Write_Max7219_byte(0x0c); // //掉電模式:0,普通模式:1
Write_Max7219_byte(0x01);
}
Max7219_pinCS=1;
Max7219_pinCS=0;
for(i=0;i<count;i++)
{
Write_Max7219_byte(0x0f); //顯示測(cè)試:1;測(cè)試結(jié)束,正常顯示:0
Write_Max7219_byte(0x00);
}
Max7219_pinCS=1;
_nop_();
}
void Write_Max7219(uchar address1,uchar dat1,uchar address2,uchar dat2)
{
Max7219_pinCS=0;
Write_Max7219_byte(address1); //寫入地址,即數(shù)碼管編號(hào)
Write_Max7219_byte(dat1); //寫入數(shù)據(jù),即數(shù)碼管顯示數(shù)字
Write_Max7219_byte(address2); //寫入地址,即數(shù)碼管編號(hào)
Write_Max7219_byte(dat2); //寫入數(shù)據(jù),即數(shù)碼管顯示數(shù)字
_nop_();
Max7219_pinCS=1;
}
//--------------------------------------------
//功能:向MAX7219(U3)寫入字節(jié)
//入口參數(shù):DATA
//出口參數(shù):無(wú)
//說明:
void Write_Max7219_byte(uchar DATA)
{
uchar i;
for(i=8;i>=1;i--)
{
Max7219_pinCLK=0;
Max7219_pinDIN=DATA&0x80;
DATA=DATA<<1;
Max7219_pinCLK=1;
}
}
void Delay_xms(uint x)
{
uint i,j;
for(i=0;i<x;i++)
for(j=0;j<112;j++);
}
void delay1(unsigned char i)
{
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
|