}
}
pos = x + y;
LCD12864_WriteCmd(pos);
Key.c(键盘控制)
#include\#include
void delay7(uint z) {
uint i, j;
for(i = z; i > 0; i--) for(j = 100; j > 0; j--); }
uchar KeyData(void) {
uchar dat1,dat2,num;
P2 = 0xf0; delay7(1);
if((P2&0xf0)!=0xf0) {
delay7(1); if((P2&0xf0)!=0xf0) {
dat1=P2; P2=0x0f; delay7(1); dat2=P2; num=dat1|dat2; } }
switch(num) { case 0xee: return 1; break; case 0xde: return 2; break; case 0xbe: return 3; break;
case 0x7e: return 4; break; case 0xed: return 5; break; case 0xdd: return 6; break; case 0xbd: return 7; break;
31
case 0x7d: return 8; break; case 0xeb: return 9; break; case 0xdb: return 10; break; case 0xbb: return 11; break; case 0x7b: return 12; break; case 0xe7: return 13; break; case 0xd7: return 14; break; case 0xb7: return 15; break; case 0x77: return 16; break; default: return 0; break; } }
ringclock.c(闹钟响铃)
#include\#include \#include\#include\
uchar CLK[7]= {0x01, 0, 0x12,0,0, 0,0}; uchar ii;
void ClockInit(void) { Ds1302ReadTime(); for(ii=3;ii<7;ii++) {
CLK[ii]=TIME[ii]; } }
uchar n=0;
uchar code music_tab[] = {
0x1c,0x30,0x19,0x30,0x18,0x40,0x19,0x30,0x18,0x30,0x13,0x30,0x19,0x80, 0x26,0x30,0x26,0x30,0x1c,0x40,0x20,0x30,0x1c,0x30,0x18,0x30,0x20,0x60, 0x26,0x30,0x26,0x30,0x24,0x40,0x26,0x30,0x24,0x30,0x18,0x40,0x26,0x60, 0x18,0x20,0x18,0x20,0x18,0x20,0x19,0x40,0x24,0x30,0x24,0x30,0x19,0x30, 0x19,0x60,0x1c,0x30,0x19,0x30,0x18,0x40,0x19,0x30,0x18,0x30,0x13,0x30, 0x19,0x60,0x26,0x30,0x26,0x30,0x1c,0x40,0x20,0x30,0x1c,0x30,0x18,0x30, 0x20,0x80,0x26,0x30,0x24,0x30,0x24,0x30,0x18,0x30,0x19,0x20,0x19,0x30, 0x18,0x30,0x15,0x20,0x15,0x20,0x13,0x20,0x18,0x40,0x18,0x30,0x19,0x30, 0x1c,0x20,0x1c,0x20,0x19,0x30,0x20,0x30,0x1c,0x60,0x18,0x30,0x15,0x30, 0x13,0x40,0x15,0x30,0x13,0x30,0x10,0x30,0x15,0x60,0x20,0x30,0x20,0x30, 0x18,0x30,0x19,0x30,0x18,0x30,0x13,0x30,0x13,0x60,0x1c,0x20,0x19,0x20,
32
0x18,0x30,0x19,0x30,0x15,0x20,0x15,0x20,0x18,0x40,0x20,0x30,0x20,0x30, 0x12,0x30,0x13,0x30,0x15,0x30,0x18,0x30,0x13,0xc0,0x13,0x80,0x13,0x30, 0x0e,0x80,0x10,0x30,0x10,0x30,0x13,0x20,0x15,0x20,0x18,0x40,0x18,0x30, 0x15,0x30,0x18,0x20,0x15,0x20,0x15,0x30,0x10,0x30,0x13,0x60,0x13,0x30, 0x0e,0x60,0x10,0x60,0x13,0x20,0x15,0x20,0x18,0x40,0x18,0x30,0x15,0x30, 0x15,0x20,0x18,0x20,0x15,0x30,0x19,0x30,0x1c,0x60,0x1c,0x30,0x19,0x30, 0x1c,0xc0,0x00 };
void int1() interrupt 1 { TH0=0xd8; TL0=0xef; n--; }
void delay1 (unsigned char m) {
unsigned i=3*m; while(--i); }
void delayms1(unsigned char a) {
while(--a); }
void ring()
{ unsigned char p,m; unsigned char i=0; TMOD&=0x0f; TMOD|=0x01;
TH0=0xd8;TL0=0xef; IE=0x82; EX1=1; IT1=1; PX1=1; IRIN=1; po=0; while(1)
{ Ds1302ReadTime(); LcdDisplay(); a: p=music_tab[i];
if(p==0x00&&po==0) { i=0; break;}
33
else if(p==0xff&&po==0)
{ i=i+1;delayms1(100),TR0=0; goto a; } else {m=music_tab[i++], n=music_tab[i++]; if (po==1) {Beep=1;break; } }
TR0=1; while(n!=0) Beep=~Beep,delay1(m); TR0=0; } }
void ReadIr() interrupt 2 {
po=1; Beep=1; }
menu.c(菜单)
#include
void displaylcd(unsigned char *CharCod);
void delay8(uint z) {
uint i, j;
for(i = z; i > 0; i--) for(j = 100; j > 0; j--); }
uchar menu() {
uchar x;
uchar code CharCode2[]=\多功能电子时钟 \
uchar code CharCode3[]=\功能选择: 1 运行时钟 钟\
uchar code CharCode4[]=\运行时钟开始\
34
2 设置闹 uchar code CharCode5[]=\设置闹钟开始\
displaylcd(CharCode2); delay8(3000);
displaylcd(CharCode3); while(1) {
x=KeyData(); if(x==15||x==16) break; }
switch(x) { case 15: displaylcd(CharCode4); delay8(3000); return 0; break; case 16: displaylcd(CharCode5); delay8(3000); return 1; break; } }
void displaylcd(unsigned char *CharCod) {
unsigned char i=0; LCD12864_Init();
LCD12864_SetWindow(0, 0); while(CharCod[i]!='\\0') { LCD12864_WriteData(CharCod[i]); i++; if(i==16) { LCD12864_SetWindow(1,0); } if(i==32) { LCD12864_SetWindow(2,0); }
35