CLK = 0;
ACC = ACC >> 1; } }
/*----------------函数:读出字节子函数-----------*/ OutputByte(void) //上升沿读出数据// ……
/*----------------函数:设置初始时间-------------------*/ void SetTime(unsigned char *pSecDa) { ……
WriteTo1302(0x8e,0x00); // 控制命令,WP=0,写操作 // for(i =7;i>0;i--) {
WriteTo1302(Addr,*pSecDa); // 秒 分 时 日 月 星期 年 // pSecDa++; Addr +=2; }
WriteTo1302(0x8e,0x80); // 控制命令,WP=1,写保护 // } /*----------------函数:读取DS1302当前时间-------------------*/ void GetTime(void) { ……
for (i=0;i<7;i++)
{ Curtime[i] = ReadFrom1302(Addr); Addr += 2; }
sec = Curtime[0];…… //Min//hour //day //date //month //year }
/*----------------函数:初始化定时器T0子函数-------------------*/ void Init_T0(void) {
35
TMOD=0x01; //定时器T0,工作模式1// TH0=0x3c; //50ms// …… }
/*----------------函数:产生闪烁信号子函数------------------------*/
void T0_flash(void) interrupt 1 // 中断程序,产生时钟秒信号 // /*----------------函数:时间闪烁子函数----------------------------*/ /*----------------功能:选择确定闪烁位等待调整--------- -----*/ void FlashKey(void) //闪烁子函数// void Add(void) //调时子函数// void Init_Clock(void) //时钟初始化子函数// void Refresh(void) //刷新显示子函数// void Add(void) //调时子函数// {
if(P1_2==0) //按P0_2键进行时间调整// {
while(P1_2==0) Refresh();
if(KT==1) //检验可调标志位KT// { hms++; switch(n)
{case 1:year=hms;break; //根据n不同,返回给不同的位:n=1 -> 返回给小时位// ……}
if((sec&0x0f)==0x0a) {sec&=0xf0; sec+=0x10;} // 如果秒位满十,向十秒位进一 ……
if(day==8) {day=1;} // 如果星期满七,重新从星期一开始计 // if((sec&0xf0)==0x60) {sec&=0x0f;} // 如果十秒位满六,清零 //
if(((date&0xf0)==0x30)&((date&0x0f)==0x02)) {date&=0x00;}
36
if(((month&0xf0)==0x10)&((month&0x0f)==0x03)) {month&=0x00;} if((year&0xf0)==0xa0) {year&=0x0f;} Curtime[0] = sec; Curtime[1] = min; ……
SetTime(&Curtime[0]); // 将调整过后的时间值写入DS1302 // }
/ *--------------------时钟初始化子函数----------------------------*/ void Init_Clock(void) {
K1=1; K2=1; K3=1; K4=1; K5=1; K6=1; K7=1; KT=0; n=0; Init_T0(); }
/*-------------------------刷新显示子函数--------------------------*/ void Refresh(void) {
GetTime(); CS1=1;CS2=0; if(K6)
{ sz_disp16(5,40,1,shuzi[sec&0x0f]); // 秒位 // sz_disp16(5,32,1,shuzi[sec>>4]); } // 十秒位 // else
{ hz_disp16(5,32,1,kongbai2); } // 秒位 十秒位 // if(K5)
{ sz_disp16(5,8,1,shuzi[min&0x0f]); // 分钟位 // sz_disp16(5,0,1,shuzi[min>>4]); } // 十分位 // else
{ hz_disp16(5,0,1,kongbai2); }
/*-------------------------状态判断于提示------------------------*/ void State(void)
37
{CS1=1;CS2=0; if(KT==1)
{ hz_disp16(1,32,1,tiao);
hz_disp16(1,48,1,shi2);}
else
{ hz_disp16(1,32,1,kongbai2);
hz_disp16(1,48,1,kongbai2); }
附录A6 液晶程序
/*--------------------------位定义--------------------------*/ sbit RST = P2^0; // 复位端 // sbit E = P2^1; // 使能端 // ……
#define Disp_On 0x3f // 显示开指令 // #define Disp_Off 0x3e // 显示关指令 // #define Col_Add 0x40 // 定位到第0列指令 // #define Page_Add 0xb8 // 定位到第0页指令 //
#define Start_Line 0xc0 // 定位从DDROM中的第0行开始往屏幕上显示
unsigned char code measurearray[] =96x16*/
unsigned char code storearray[] /*调入了一幅图像:存储:宽度x高度=96x16*/
…… //还有时间设置,开始测量等图像……//
/*------------------------------汉字点阵码————————*/ char code huan[]={ // 欢 16*16 //
0x14,0x24,0x44,0x84,0x64,0x1C,0x20,0x18,0x0F,0xE8,0x08,0x08,0x28,0x18,0x08,0x00,
0x20,0x10,0x4C,0x43,0x43,0x2C,0x20,0x10,0x0C,0x03,0x06,0x18,0x30,0x60,0x20,0x00
};……//迎,使,用,等汉字如其所示//
/*------------------------字母点阵码---------------------------*/
/*调入了一幅图像:测量:宽度x高度
38
相关推荐: