实时时钟设计实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告
源代码:
#pragma sfr //使用特殊功能寄存器
#pragma EI //开中断
#pragma DI //关中断
#pragma access //使用绝对地址指令
#pragma interrupt INTTM000 Time //定义时间中断函数为Time
#pragma interrupt INTKR OnKeyPress //定义按键中断为OnKeyPress
#pragma interrupt INTP5 OnKeyOver //定义INT中断为OnKeyOver
void Init_Led();
void InitKey_INTKR();
void Init_Lcd();
void Init_Inter();
void LightOneLed(unsigned char ucNum);
void LightOff();
int Count_Day(int month);
char i=0; //定义变量i,是切换时间的标志
int key=0; //定义key=0
int temp=1; //用于存放当前月的天数
int temp1=1;
int second=0; //默认的秒second=0
int minute=0; //默认的分minute=0
int hour=12; //默认的时hour=12
int day=1; //默认的天day=1
int month=5; //默认的月month=5
int year=2014; //默认的年year=2014
int c_hour=1; //默认的闹钟时=1
int c_minute=1; //默认的闹钟分=1
int buffs[2]; //秒的数码显示缓存区
int buffm[2]; //分的数码显示缓存区
int buffh[2]; //时的数码显示缓存区
int buffday[2]; //天的数码显示缓存区
int buffmonth[2]; //月的数码显示缓存区
int buffyear[4]; //年的数码显示缓存区
int buffmd[4]; //月,天的数码显示缓存区
int buffhm[4]; //时,分的数码显示缓存区
int buffms[4]; //分,秒的数码显示缓存区
int buffch[2]; //闹钟时的数码显示缓存区
int buffcm[2]; //闹钟分的数码显示缓存区
unsigned char Que = 0; //INT中断中间变量
int
LCD_num[10]={0X070d,0x0600,0x030e,0x070a,0x0603,0x050b,0x050f,0x0700,0x070f,0x070b};//
数字0~~9的显示码
unsigned char Scond;
//…………………………延时函数1……………………//
void Delay(int k){
i nt i,j;
f or(i=0;i for(j=0;j } } } //………………………初始化Led函数……………………// void Init_Led(){ P M13=0XF0; //端口13的第四位为输出模式 P M14=0XF0; //端口14的第四位为输出模式 P M15=0XF0; //端口15的第四位为输出模式 } //……………………………按键中断函数……………………// void InitKey_INTKR(){ PM4 = 0x3F; //P4的六个端口设置为输入模式 P U4 = 0x3F; //接通上拉电阻 K RM = 0x3F; //允许六个按键中断 K RMK = 0; P M3.0 = 1; P U3.0 = 1; E GP.5 = 1; P MK5 = 0; P PR5 = 0; K RPR = 1; } //……………初始化lcd函数……………………// void Init_Lcd(){ P FALL=0x0F; //所有接lcd引脚指定为lcd引脚 L CDC0=0x34; //设置原时钟和时钟频率 L CDMD=0x30; //设置lcd电压为3/5电压 L CDM=0xC0; //4分时1/3偏压模式 } //………………初始化定时器Inter函数……………………// void Init_Inter(){ C RC00.0=0; //CR000为比较寄存器 P RM00=0X04; //计数时钟为fprs/2^8 C R000=0X7FFF;//时间间隔为1s T MMK010=1; //TMMK010中断屏蔽 T MMK000=0; //TMMK000中断允许 T MC00=0X0C; //TM00和CR000相等时进入清零&启动模式} void Time(){ s econd++; } //……………………………按键中断函数……………………// void OnKeyPress(){ D I(); s witch(P4&0x3F) //判断哪个按键按下 { case 0x3e: