📄 g19264.c
字号:
#include "g19264-ly.h"
#include <stdio.h>
//#include<INTRINS.H>
//#include <absacc.h>
#define Uchar unsigned char
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long int
#define byte unsigned char
#define word unsigned int
#define ulong unsigned long int
extern uchar data second, minute, hour, week, day, month, year;
extern word data date, time;//从控制器下载的时间暂存储变量
uchar ahour1=6,ahour2=11,ahour3=13,ahour4=20,ahour5=20,aminute1=40,aminute2=40,aminute3=30,aminute4=40,aminute5=40;
#pragma NOAREGS;
extern void wr_time(void); //写时间到8563
extern void byt_to_time(void); //计算时间
extern void time_to_byt(void); //计算时间
extern void rd_time(void); //从时间芯片中读时间到second,minute,hour,week等变量中
void Putcdot(Uchar Order);
void Putedot(Uchar Order);
void Putedotbig(Uchar Order);
void readkey();//读键盘
uchar keyscan(void);// 键扫描函数
void Delay100ms(unsigned char x);
void init_serial();
void dpcard()//显示卡号
{ uchar data i,a,b,c,d,e,g;
uchar temp;
dword data temp1;
uchar *p;
read_count=0;
i=0;
BEEP=0;
BL=0;
Lcmcls();
p=card_id;
temp=card_id[0];
a=temp%10;temp=temp/10;
b=temp%10;temp=temp/10;
c=temp;
col=50;row=3;
Putedot(c); Putedot(b);Putedot(a);
Putedot(10);//显示空格
temp1=card_id[1]*256+card_id[2];//合并卡号
a=temp1%10;temp1=temp1/10;//卡号用十进制显示
b=temp1%10;temp1=temp1/10;
c=temp1%10;temp1=temp1/10;
d=temp1%10;temp1=temp1/10;
e=temp1%10;temp1=temp1/10;
g=temp1;
Putedot(g); Putedot(e);Putedot(d);
Putedot(c); Putedot(b);Putedot(a);
Putedot(10);//显示空格
WDT_CONTR=WDT;//启动看门狗
BEEP=1;
Delay100ms(15);
for(i=0;i<3;i++)card_id[i]=0;//清空卡数据缓冲区
i=0; BL=1;
Lcmcls();
}
void serial(void) interrupt 4 //通讯中断
{
while(RI)
{RI=0;
if(read_count==0)card_id[0]=SBUF;
if(read_count==1)card_id[1]=SBUF;
if(read_count==2)card_id[2]=SBUF;
read_count++;
}
}
void alarm_pd(void)
{
if((hour==ahour1)&(minute==aminute1))alarm=1;
if((hour==ahour2)&(minute==aminute2))alarm=1;
if((hour==ahour3)&(minute==aminute3))alarm=1;
if((hour==ahour4)&(minute==aminute4))alarm=1;
if((hour==ahour5)&(minute==aminute5))alarm=1;
}
void startbell(void)
{ uchar i;
alarm_pd();
if(alarm==1)
{
for(i=0;i<3;i++)
{
BEEP=0;
Delay100ms(1);
BEEP=1;
Delay100ms(2);
BEEP=0;
Delay100ms(1);
BEEP=1;
Delay100ms(2);
BEEP=0;
Delay100ms(1);
BEEP=1;
BEEP=0;
Delay100ms(3);
BEEP=1;
Delay100ms(10);
WDT_CONTR=WDT;//启动看门狗
}
}
alarm=0;
}
void Delay100ms(unsigned char x)
{
unsigned char i,j;
while(x != 0)
{
for (j = 1 ;j <= 100 ; j++)
{
// WDT_CONTR=WDT;//启动看门狗
for (i = 1 ;i <= 140 ; i++){_nop_() ; _nop_() ; _nop_() ; _nop_() ;};
}
x--;
}
}
uchar keyscan(void)// 键扫描函数
{
uchar scancode,tmpcode;
P2 = 0xf0; // 发全0行扫描码
if ((P2&0xf0)!=0xf0) // 若有键按下
{
Delay100ms(1); // 延时10ms去抖动
if ((P2&0xf0)!=0xf0) // 延时后再判断一次,去除抖动影响
{
scancode = 0xfe;
while((scancode&0x10)!=0) // 逐行扫描
{
P2 = scancode; // 输出行扫描码
if ((P2&0xf0)!=0xf0) // 本行有键按下
{
tmpcode = (P2&0xf0)|0x0f;/* 返回特征字节码,为1的位即对应于行和列 */
return((~scancode)+(~tmpcode));
}
else scancode = (scancode<<1)|0x01; // 行扫描码左移一位
}
}
}
return('a'); // 无键按下,返回值为a
}
void readkey()//读键盘
{
uchar key;
key = keyscan(); // 调用键盘扫描函数
// WDT_CONTR=WDT;//启动看门狗
switch(key)
{
case 0x11: // 1行1列,数字*
{BEEP=0;Delay100ms(1);BEEP=1;
keybuf='*';
keydn=1;
}
break;
case 0x21: // 1行2列,数字0
{
BEEP=0; Delay100ms(1);BEEP=1;
keybuf = 0;keydn=1;
}
break;
case 0x12: // 2行1列,数字7
{
BEEP=0; Delay100ms(1);BEEP=1;
keybuf =7;keydn=1;
}
break;
case 0x22: // 2行2列,数字8
{
keybuf = 8;keydn=1;
BEEP=0; Delay100ms(1);BEEP=1;
}
break;
case 0x42: // 2行3列,数字9
{
keybuf = 9;keydn=1;
BEEP=0; Delay100ms(1);BEEP=1;
}
break;
case 0x14: // 3行1列,数字4
{
keybuf = 4;keydn=1;
BEEP=0; Delay100ms(1);BEEP=1;
}
break;
case 0x24: // 3行2列,数字5
{
keybuf = 5;keydn=1;
BEEP=0; Delay100ms(1);BEEP=1;
}
break;
case 0x44: // 3行3列,数字6
{
keybuf = 6;keydn=1;
BEEP=0; Delay100ms(1);BEEP=1;
}
break;
case 0x18: // 4行1列,数字3
{
keybuf = 1;keydn=1;
BEEP=0; Delay100ms(1);BEEP=1;
}
break;
case 0x28: // 4行2列,数字2
{
keybuf = 2;keydn=1;
BEEP=0; Delay100ms(1);BEEP=1;
}
break;
case 0x48: // 4行3列,数字1
{
keybuf = 3;keydn=1;
BEEP=0; Delay100ms(1);BEEP=1;
}
break;
case 0x41: // 1行3列,确认键 #
{enterflg = 1; keydn=1; // 确认键按下
BEEP=0; Delay100ms(1);BEEP=1;
}
break;
default:break;
}
}
void disptime()
{
Uchar a,b;
col=32; row=2;
Locatexy();
a=hour/10;b=hour%10;
Putedotbig(a); Putedotbig(b);//显示时+
Putedotbig(10);
WDT_CONTR=WDT;//启动看门狗
a=minute/10;
b=minute%10;
Putedotbig(a); Putedotbig(b);//显示分
col+=5;row=5;
Locatexy();
a=second/10;
b=second%10;
Putedot(a); Putedot(b);//显示秒
}
void dispdata()
{
Uchar a,b;
col=8; row=0;
Locatexy();
a=2,b=0;
Putedot(a); Putedot(b);
a=year/10;b=year%10;
Putedot(a); Putedot(b);
Putcdot(0); //显示年
a=month/10;b=month%10;
Putedot(a); Putedot(b);
Putcdot(1); //显示月
WDT_CONTR=WDT;//启动看门狗
a=day/10;b=day%10;
Putedot(a); Putedot(b);
Putcdot(2); //显示日
col+=20;
Putcdot(6); //显示星期
Putcdot(7);
Putedot(week);
}
void adj_time()//时间调整
{ uchar a,b;
// Lcmcls();
BL=0;//开背光
// rd_time(); //从时间芯片中读时间到second,minute,hour,week等变量中
// WDT_CONTR=WDT;//启动看门狗
// time_to_byt(); //计算时间
enterflg=0;//清确认键标志
keydn=1;//键盘按下标志有效
a=year/10;
b=year%10;
keybuf=a;
keydn=0;
while(enterflg==0)
{
col=24,row=0;
Putedot(a);//显示年的高位
readkey();
if(keydn==1)WDT_CONTR=WDT;//启动看门狗
a=keybuf;
Delay100ms(3);
col=24,row=0;
Putedot(10);//显示空格
Delay100ms(3);
keydn=0;
}
WDT_CONTR=WDT;//启动看门狗
enterflg=0;
col=24,row=0;
Putedot(a);//显示年的高位
keybuf=b;
while(enterflg==0)
{
col=32,row=0;
Putedot(b);//显示年的低位
readkey();
if(keydn==1)WDT_CONTR=WDT;//启动看门狗
b=keybuf;
Delay100ms(3);
col=32,row=0;
Putedot(10);//显示空格
Delay100ms(3);
keydn=0;
}
WDT_CONTR=WDT;//启动看门狗
year=a*10+b;
col=32,row=0;
Putedot(b);//显示分的低位
enterflg=0;
a=month/10;b=month%10;
keybuf=a;
while(enterflg==0)
{
col=56,row=0;
Putedot(a);//显示年的低位
readkey();
if(keydn==1)WDT_CONTR=WDT;//启动看门狗
a=keybuf;
Delay100ms(3);
col=56,row=0;
Putedot(10);//显示空格
Delay100ms(3);
keydn=0;
}
WDT_CONTR=WDT;//启动看门狗
enterflg=0;
col=56,row=0;
Putedot(a);//显示年的高位
keybuf=b;
while(enterflg==0)
{
col=64,row=0;
Putedot(b);//显示年的低位
readkey();
if(keydn==1)WDT_CONTR=WDT;//启动看门狗
b=keybuf;
Delay100ms(3);
col=64,row=0;
Putedot(10);//显示空格
Delay100ms(3);
keydn=0;
}
WDT_CONTR=WDT;//启动看门狗
month=a*10+b;
col=64,row=0;
Putedot(b);//显示分的低位
enterflg=0;//
a=day/10;b=day%10;
keybuf=a;
while(enterflg==0)
{
col=88,row=0;
Putedot(a);//显示年的低位
readkey();
if(keydn==1)WDT_CONTR=WDT;//启动看门狗
a=keybuf;
Delay100ms(3);
col=88,row=0;
Putedot(10);//显示空格
Delay100ms(3);
keydn=0;
}
WDT_CONTR=WDT;//启动看门狗
enterflg=0;
col=88,row=0;
Putedot(a);//显示年的高位
keybuf=b;
while(enterflg==0)
{
col=96,row=0;
Putedot(b);//显示年的低位
readkey();
if(keydn==1)WDT_CONTR=WDT;//启动看门狗
b=keybuf;
Delay100ms(3);
col=96,row=0;
Putedot(10);//显示空格
Delay100ms(3);
keydn=0;
}
WDT_CONTR=WDT;//启动看门狗
day=a*10+b;
col=96;row=0;
Putedot(b);//显示分的低位
enterflg=0;
b=week;
keybuf=b;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -