程序如下
#include "STC12C5A60S2.H"
#include "intrins.h"
#include "Max7219.h"
uchar code shuzi_1[][8]={
{0x3C,0x66,0x66,0x66,0x66,0x66,0x66,0x3C},//0
{0x18,0x38,0x18,0x18,0x18,0x18,0x18,0x7E},//1
{0x3C,0x66,0x46,0x0C,0x18,0x20,0x66,0x7E},//2
{0x3C,0x66,0x06,0x18,0x0C,0x06,0x46,0x3C},//3
{0x0C,0x1C,0x2C,0x6C,0x6C,0x7E,0x0C,0x0C},//4
{0x7E,0x60,0x60,0x7C,0x06,0x46,0x66,0x3C},//5
{0x3C,0x62,0x60,0x7C,0x66,0x66,0x66,0x3C},//6
{0x7E,0x46,0x04,0x0C,0x08,0x18,0x18,0x18},//7
{0x3C,0x66,0x66,0x3C,0x66,0x66,0x66,0x3C},//8
{0x3C,0x66,0x66,0x66,0x1E,0x06,0x46,0x3C},//9
{0x00,0x18,0x18,0x00,0x00,0x18,0x18,0x00},//:
{0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x00},//-
{0x3C,0x42,0x91,0x91,0x9D,0x81,0x42,0x3C},//time
{0x20,0x7E,0x08,0x3C,0x28,0x7E,0x08,0x00},//年
{0x3E,0x22,0x3E,0x22,0x3E,0x22,0x42,0x00},//月
{0x3E,0x22,0x22,0x3E,0x22,0x22,0x3E,0x00},//日
{0x10,0x18,0x1C,0x1E,0x1C,0x18,0x10,0x00},//箭頭
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//空
};
//----------------------------------------
/*聲明ADC相關寄存器 */
//sfr ADC_CONTR = 0xBC; //ADC 控制寄存器
//sfr ADC_RES = 0xBD; //ADC 高8位結果寄存器
//sfr ADC_LOW2 = 0xBE; //ADC 低2位結果寄存器
//sfr P1ASF = 0x9D; //P1 輔助控制寄存器
/*ADC操作的一些宏定義*/
#define ADC_POWER 0x80 //ADC power control bit
#define ADC_FLAG 0x10 //ADC complete flag
#define ADC_START 0x08 //ADC start control bit
#define ADC_SPEEDLL 0x00 //420 clocks
#define ADC_SPEEDL 0x20 //280 clocks
#define ADC_SPEEDH 0x40 //140 clocks
#define ADC_SPEEDHH 0x60 //70 clocks
//校時按鍵與C51的引腳連接定義
sbit key1=P3^2; //設置鍵
sbit key2=P3^3; //加鍵
sbit key3=P3^4; //減鍵
sbit key4=P3^5; //減鍵
sbit SCLK=P2^6; //1302引腳位變量定義
sbit IO=P2^7;
sbit RST=P2^5;
uchar a,h,ms,sec,min,shi,nian,yue,ri,xingqi,key4n,v1,tt,tt1;
uchar second,minute,hour,week,day,month,year; //定義年,月,日,星期,時,分,秒計數變量
sbit ACC0=ACC^0;
sbit ACC7=ACC^7;
void delay(uint xms)//延時函數,有參函數
{
uint x,y;
for(x=xms;x>0;x--)
for(y=110;y>0;y--);
}
//--------1302----//
void write_byte(uchar dat)//1302寫一個字節
{
ACC=dat;
RST=1;
for(a=8;a>0;a--)
{
IO=ACC0;
SCLK=0;
SCLK=1;
ACC=ACC>>1;
}
}
uchar read_byte()//1302讀一個字節
{
RST=1;
for(a=8;a>0;a--)
{
ACC7=IO;
SCLK=1;
SCLK=0;
ACC=ACC>>1;
}
return (ACC);
}
void write_1302(uchar add,uchar dat)//向1302芯片寫函數
{
RST=0;
SCLK=0;
RST=1;
write_byte(add);
write_byte(dat);
SCLK=1;
RST=0;
}
uchar read_1302(uchar add)//從1302讀數據函數
{
uchar temp;
RST=0;
SCLK=0;
RST=1;
write_byte(add);
temp=read_byte();
SCLK=1;
RST=0;
return(temp);
}
void ds1302_init() |