able1[4]=table1[5]=0;LED=1;A=x=counter1=0;num=255;break;} } } else {Beep_key();lcd_goto_xy(0,0); init_lcd(); lcd_puts(\error!\delay13(50000);delay13(50000);delay13(50000);init_lcd(); init_lcd();flag++;/*if(flag==3)
shizhong1();*/init_lcd();table1[0]=table1[1]=table1[2]=table1[3]=table1[4]=table1[5]=0;A=x=counter1=0;num=255;LED=1;beep=0;Delay11();beep=1;beep=0;Delay11();beep=1;beep=0;Delay11();beep=1; } } }
void main(void) { init_all(); GG=byte_read(0x2000); init_lcd();num=255; timer0_init();//定时器初始化函数
YE=13;MO=11;DA=2;XQ=6;HH=MM=SS=0;//时钟、日期初始化 counter11=0;counter=0;x=0; while(1) { ctrl(); //display_id( &CardRevBuf[2] ); if(CardRevBuf[2]==0X32) {beep=1;flag1=1;num=10; JDQ=0;LED=1; } else { JDQ=1;LED=0;num=255; } num=keyscan();//反复扫描4*4键盘获得按键参数lcd_goto_xy(0,1);lcd_number(num/10);lcd_number(num);
if(num==15) {num=255; Beep_key();SectorErase(0X2000);byte_write(0X2000, 0); } mimasuo();
35
//
} }
#include \
#define uchar unsigned char #define uint unsigned int
code uchar LCDnumber[]=\
/************************************************** ** 函数名称: dellay
** 入口参数:h(unsigned int型) ** 出口参数:无
** 功能描述: 短暂延时,使用11.0592晶体,约0.01MS ****************************************************/ void dellay(unsigned int h) {
while(h--); //0.01MS }
/************************************************** ** 函数名称: WriteDataLcd
** 入口参数:wdata(unsigned char型) ** 出口参数:无
** 功能描述: 写数据到LCD
****************************************************/ void WriteDataLcd(unsigned char wdata) {
LCD_DATA=wdata; LCD_RS=1; LCD_RW=0; LCD_E=0;
dellay(100); //短暂延时,代替检测忙状态
LCD_E=1; }
/************************************************** ** 函数名称: WriteCommandLcd
** 入口参数:wdata(unsigned char型) ** 出口参数:无
** 功能描述: 写命令到LCD
****************************************************/ void WriteCommandLcd(unsigned char wdata) {
LCD_DATA=wdata;
36
LCD_RS=0; LCD_RW=0; LCD_E=0;
dellay(100); //短暂延时,代替检测忙状态 LCD_E=1; }
/************************************************** ** 函数名称: lcd_init ** 入口参数: ** 出口参数:无
** 功能描述: 完成液晶初始化
****************************************************/ void init_lcd(void) {
LCD_DATA=0;
WriteCommandLcd(0x38); dellay(1000);
WriteCommandLcd(0x38); //显示模式设置 WriteCommandLcd(0x08); //关闭显示 WriteCommandLcd(0x01); //显示清屏
WriteCommandLcd(0x06); //显示光标移动设置 WriteCommandLcd(0x0c); //显示开及光标移动设置 }
/************************************************** ** 函数名称: lcd_goto_xy
** 入口参数:x(unsigned char型),y(unsigned char型) ** 出口参数:无
** 功能描述: 设置光标位置, x是列号,y是行号
****************************************************/ void lcd_goto_xy(unsigned char x,unsigned char y) {
if(y==1) x+=0x40; x+=0x80;
WriteCommandLcd(x); }
void lcd_putc(unsigned char c) // 写字符(传入的参数实际为所需显示字符的地址,即液晶字符产生器中字符的地址) {
LCD_RW = 0; // RW置0,状态为写 LCD_RS = 1; // RS置1,写入数据 WriteDataLcd(c); }
void lcd_puts(unsigned char *s) // 写字符串函数
37
{
while(*s) {
WriteDataLcd(*s); s++; } }
/******************************************************************** ** 函数名称: display_char
** 入口参数:x(unsigned char型),y(unsigned char型),dat(unsigned char型) ** 出口参数:无
** 功能描述: 在具体位置显示单个字符,x是列号,y是行号
*********************************************************************/ void lcd_xy_putc(unsigned char x,unsigned char y,unsigned char dat) {
lcd_goto_xy(x,y); WriteDataLcd(dat); }
/********************************************************************* ** 函数名称: display_string
** 入口参数:x(unsigned char型),y(unsigned char型),s(指针型) ** 出口参数:无
** 功能描述: 在具体位置显示字符串,以/0结束,x是列号,y是行号
**********************************************************************/ void DisplayListChar(unsigned char x,unsigned char y,unsigned char *s) {
lcd_goto_xy(x,y); while(*s) {
WriteDataLcd(*s); s++; } }
void lcd_number(unsigned char a) //变量数字显示 {
LCD_RW = 0; // RW置0,状态为写 LCD_RS = 1; // RS置1,写入数据 WriteDataLcd(LCDnumber[a]); }
#include \
38