📄 mod1.c
字号:
#pragma CODE DEBUG SYMBOLS OBJECTEXTEND
#include<reg51.h>
#include<absacc.h>
#include<string.h>
#include<intrins.h>
#include<ctype.h>
#include<stdlib.h>
#define Uchar unsigned char
#define Uint unsigned int
#define Ulong unsigned long
#define P8155CW 0x8100
#define P8155IA 0x8101
#define P8155IB 0x8102
#define P8155IC 0x8103
#define V_TH0 0x9e
#define V_TL0 0x75
#define V_TMOD 0x01
static struct
{
Uchar ascii;
Uchar stroke;
}
code led_strokes[27]=\
{{'0',0xc0},{'1',0xf9}, {'2',0xa4},{'3',0xb0},{'4',0x99},\
{'5', 0x92},{'6',0x82},{'7',0xf8},{'8',0x80},{'9',0x90},\
{'A',0x88},{'B',0x83},{'C',0xc6},{'D',0xa1},{'E',0x86},\
{'F',0x8e},{'H',0x76},{'O',0x5c},{'P',0x73},{'U',0x3e},\
{'R',0x50},{'Y',0x91},{'.',0x80},{'-',0x40},{'=',0x48},\
{0x00,0x00},{0xff,0xff}};
/* 定义非闰年每月的天数 */
Uchar code days_month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
/*定义时间结构*/
struct DATE
{
Uchar year;
Uchar month;
Uchar day;
}; /*定义日期结构*/
struct TIME
{
Uchar sec;
Uchar min;
Uchar hour;
};
struct TIME time;
struct DATE date;
/*定义一组全局变「和函数原型*/
Uchar bdata flag;
sbit time_init=flag^0;
sbit auto_flush=flag^1;
sbit message_flag=flag^2;
Uint message_time;
Uchar led_buf[8];
extern void delay(Uint);
void led_buf_auto_flush(void) reentrant;
bit leap_year(void) reentrant;
void init_sys(void);
void monitor(void);
void set_led_buf(Uchar,Uchar,Uchar);
Uchar get_strokes(Uchar);
void put_on_leds(void);
void put_off_leds(void);
bit kb_hit(void);
Uchar get_ch(void);
Uchar *get_str(Uchar *str, Uint len);
void ask_date(void);
bit set_date_time(void);
void error_message(void);
/************************************************************************************
* 函数原型:main();
* 功 能:调用initLys()函数对系统进行初始化,调用monitor()函数对用户输人的键盘命
* 令进行解释。
/**********************************************************************************/
main()
{
init_sys();
monitor();
}
/****************************************************************
* 函数原型:voidinit_sys(void);
* 功 能:对系统进行初始化并接受用户的的初始化日期时间设置
****************************************************************/
void init_sys(void) /*8155初始化*/
{
XBYTE[P8155CW]=0x03; XBYTE[P8155IA]=0xff; XBYTE[P8155IB]=0x00;
/*定时器T0初始化*/
TMOD=V_TMOD;TH0=V_TH0; TL0=V_TL0;
TR0=1;ET0=1;EA=1;
/*标志变量初始化*/
time_init=0; auto_flush=0; message_flag=0; message_time=0; /*显示8个"一"直到用户按下"0"键并成功设量初始化日期时间为止*/
/*用"-"填充显示缓冲区*/
set_led_buf('5',4,1);
while(1)
{
put_on_leds(); /*显示缓冲区的内容*/
if(!get_ch()) continue; /*如果用户按下的不是“0”键*/
if(!set_date_time()) /*如果日期时间初始化不成功*/
auto_flush=1;
else
break;
}
}
/************************************************************************
* 函数原型:void monltor(void);
* 功 能:用 前的时、分、秒值自动刷新LED显示 并对用户按键进行解释。"0"键表示校
*
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -