📄 main.c
字号:
/*********************************************************************/
/*********************************************************************/
typedef struct {
char hour;
char minute;
char second;
} time;
/*****************************/
/*******************************/
typedef struct {
char year;
char month;
char day;
} date;
/******************************/
time now={00,00,00},display;
int Aminute;
date today={17,04,22},tmpday;
char ABC ;
char ABCD;
unsigned char gx,gy;
void initFlag(void)
{
P0 = 0xFF; // 输出端口初始化
P2 = 0xFF; // 输出端口初始化
P1 = 0xFF; // 输入端口初始化
P3 = 0xFF; // 输入端口初始化
now.hour = 24;
now.minute =00;
now.second =00;
}
/**************************************************/
/***************检测忙****************************/
/************************************************/
void check_GLCD_busyflag(void)
{
unsigned char x;
GLCD_R_W=1;
GLCD_D_I=0;
GLCD_ENABLE=1;
P2=0x00;
do
{
x=P2 && 128;
} while(x);
GLCD_ENABLE=0;
GLCD_D_I=1;
GLCD_R_W=1;
}
/********************写命令**********************/
void write_GLCD_command(unsigned command)
{
GLCD_R_W = 0;
GLCD_D_I = 0;
GLCD_ENABLE=1;
P2=command;
GLCD_ENABLE=0;
GLCD_D_I=1;
GLCD_R_W=1;
check_GLCD_busyflag(); //检测忙
}
/********************写数据*********************/
void write_GLCD_data(unsigned GLCDdata)
{
GLCD_R_W=0;
GLCD_D_I=1;
GLCD_ENABLE=1;
P2=GLCDdata;
GLCD_ENABLE=0;
GLCD_D_I=0;
GLCD_R_W=1;
check_GLCD_busyflag(); //检测忙
}
/*********************清屏**********************/
void clear_GLCD()
{
int i,j;
GLCD_CS1=1;
GLCD_CS2=1;
write_GLCD_command(GLCD_ON);
write_GLCD_command(GLCD_START_LINE_0);
for(i=0;i<8;i++)
{
write_GLCD_command(SET_PAGE+i);
write_GLCD_command(SET_Y_ADDRESS_0);
for(j=0;j<64;j++)
write_GLCD_data(0);
}
}
/*******************显示一个圆形****************/
void show_pattern(unsigned char page,unsigned char y,unsigned char *pattern,unsigned char len)
{
int i;
write_GLCD_command(SET_PAGE+page);
write_GLCD_command(SET_Y_ADDRESS_0+y);
for(i=0;i<len;i++)
{
write_GLCD_data(*pattern);
pattern++;
}
}
/*********************显示一个字****************/
void display_GLCD_data(unsigned char *p)
{
if (gx<64)
{
GLCD_CS1=1;
GLCD_CS2=0;
show_pattern(gy,gx,p,8);
show_pattern(gy,gx+8,p+8,8);
show_pattern(gy+1,gx,p+16,8);
show_pattern(gy+1,gx+8,p+24,8);
}
else
{
GLCD_CS1=0;
GLCD_CS2=1;
show_pattern(gy,gx-64,p,8);
show_pattern(gy,gx-56,p+8,8);
show_pattern(gy+1,gx-64,p+16,8);
show_pattern(gy+1,gx-56,p+24,8);
}
gx=gx+16;
}
void display_GLCD_string(unsigned char *p,int len)
{
int i;
for(i=0;i<len;i++)
display_GLCD_data((p+32*i));
}
void display_GLCD_numberAB(char number)
{
int x,y;
x=number/10;
y=number%10;
display_GLCD_data(digit[x]);
display_GLCD_data(digit[y]);
}
void display_GLCD_numberB(char number)
{
unsigned int x,y,z,j;
x=(number/1000)%10;
y=(number/100)%10;
z=(number/10)%10;
j=number%10;
display_GLCD_data(digit[x]);
display_GLCD_data(digit[y]);
display_GLCD_data(digit[z]);
display_GLCD_data(digit[j]);
}
void gotoxy(unsigned x,unsigned y)
{
gy=y;
gx=x;
}
void display_time(time dispaly_time)
{
gotoxy(0,4);
display_GLCD_numberAB(dispaly_time.hour);
display_GLCD_data(comma);
display_GLCD_numberAB(dispaly_time.minute);
display_GLCD_data(comma);
display_GLCD_numberAB(dispaly_time.second);
}
void display_time1(int F)
{
gotoxy(48,6);
display_GLCD_numberB(F);
}
void initTimer (void)
{
timer0_tick=0;
EA=0;
TMOD=0x11;
TH0=-9460/256;
TL0=-9460%256; //初始化计数器初值
PT0=1;
TR0=1;
ET0=1;
EA =1;
}
void timer0 (void) interrupt 1
{
TR0=0;
TH0=-9460/256;
TL0=-9460%256; //初始化计数器初值
TR0=1;
timer0_tick++;
if (timer0_tick==100)
{
timer0_tick=0;
/***********************************************************/
if(now.second==0)
{
now.second=59;
if (now.minute==0)
{
now.minute=59;
if (now.hour==0)
{
now.hour = 24;
now.minute =00;
now.second =00;
}else now.hour--;
}else now.minute--;
}else now.second--;
if(Aminute==10000)Aminute=0;
else Aminute++;
}
}
/******************************************************************/
/***********************主程序*************************************/
/******************************************************************/
void MAIN (void)
{
unsigned int i,j;
initFlag (); //端口初始化
clear_GLCD(); //清屏
gotoxy(0,0);
display_GLCD_string(QINGPIN,8);
gotoxy(0,2);
display_GLCD_string(QINGPIN,8);
gotoxy(0,4);
display_GLCD_string(QINGPIN,8);
gotoxy(0,6);
display_GLCD_string(QINGPIN,8);
gotoxy(32,0); //设光标
display_GLCD_string(HUANYIN,4); //显示"欢迎使用"字符串
gotoxy(16,2); //设光标
display_GLCD_string(HENFENG,6); //显示"控制系统"字符串
gotoxy(0,4); //设光标
display_GLCD_string(CHUSHI,8); //显示"初始化"字符串
for (i=0;i<1000;i++) //延时
for(j=0;j<200;j++);
initTimer(); //开中断
while(1)
{
gotoxy(0,0); //设光标
display_GLCD_string(CHUWU,4); //显示"严重错误"字符串
gotoxy(64,0);
display_GLCD_string(XIA,4);
gotoxy(0,2); //设光标
display_GLCD_string(GUOLI,4); //显示"过滤时间"字符串
gotoxy(64,2);
display_GLCD_numberAB(ABCD); //显示00数字
gotoxy(96,2); //设光标
display_GLCD_string(XIAOSHI,2); //显示"小时"字符串
display_time(now); //显示到计时时间
gotoxy(0,6); //设光标
display_GLCD_string(QINGXIE,2); //显示"清洗:"字符串
display_GLCD_string(comma,1); //显示":"字符串
display_time1(Aminute); // 显示电机运行时间
gotoxy(112,6); //设光标
display_GLCD_string(MIAO,1); //显示"秒"字符串
}
}
/*********************************************************************/
/*******************END MAIN******************************************/
/*********************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -