基于μPD78F0485单片机实验板的实时时钟程序设计与实现讲解

基于μPD78F0485单片机实验板的实时时钟程序设计与实现

专业:计算机科学与技术

班级: 11级

学号:

姓名:

基于μPD78F0485单片机实验板的实时时钟程序设计与实现

1实验环境

硬件:PC、µPD78F0485单片机。

软件:Windows7操作系统、开发环境支持软件NEC Electronics Microcomputer、Microsoft Visio绘图

2功能描述

a)液晶屏可切换显示日期和时间。

b)具有日期和时间校对功能。

c)用LED1~LED12模拟秒针走动。

d)有闹钟功能。

3总体设计

3.1显示设计

a)在LCD上显示年月日,分别用两位数表示年月日。年的值从00~99;月的值从01~12;日的值如果是2月,闰年为01~29,平年为01~28,其他月份大月为01~31,小月为01~30。

13.12.10

年月日

图 3.1.1年月日的显示

b)在LCD上显示星期时分,分别用两位数表示星期时分。星期的值从00~06,其中

00表示星期天,其它的则一一对应;时采用24小时制,其值从00~23;分的值从

00~59。

01.12.00

星期时分

图 3.1.2星期时分的显示

c)在LCD上显示时分秒。时采用24小时制,其值从00~23;分的值从00~59;秒的

值从00~59。

12.00.00

时分秒

图 3.1.3时分秒的显示

3.2时间显示切换设计

设置一个全局变量i,初值为0。每按一下KEY1,i的值加一。当i = 0,1,2,3时,LCD 显示年月日。当i = 4,5,6时,LCD显示星期时分。当i = 7时,LCD显示时分秒。当i >7 时,i自动变为0。

3.3日期和时间校对设计

通过前面设置的全局变量i和KEY3来实现。当i = 1时,每按一下KEY3,年的值就加一,直到大于99时自动变为00。当i = 2时,每按一下KEY3,月的值就加一,直到大于12时自动变为01。当i = 3时,每按一下KEY3,日的值就加一,直到大于当月天数时自动变为01。当i = 4时,每按一下KEY3,星期的值就加一,直到大于06 时自动变为00。当i = 5时,每按一下KEY3,时的值就加一,直到大于23时自动变为00。当i = 6时,每按一下KEY3,分的值就加一,直到大于59时自动变为00。

3.4闹钟显示设计

当按下KEY2时,LCD显示闹钟设定的时间。

00.00

时分

图 3.4闹钟的显示

3.5闹钟调整设计

当按下KEY5时,闹钟的时就加一,到23时就归零。当按下KEY6时,闹钟的分就加一,到59时就归零。

3.6闹钟开关设计

通过KEY4控制闹钟的开关,并用LED灯的亮灭来显示。将LED灯端口的输出信号作为闹钟是否响铃的一个判断条件。按下KEY4,LED灯的输出信号取反,输出信号为1时灯亮并且闹钟打开,为0时灯灭并且闹钟关闭。

3.7闹钟响铃设计

当闹钟设定的时分与时钟的时分相等并且闹钟处于打开状态时,蜂鸣器就会发出响声。

3.8用LED1~LED12模拟秒针走动设计

将端口13、14、15设置为输出模式,设置1个全局变量s,初值为-1。当1秒中断来

到时s 的值加一模12。根据s 的值亮相应的灯,并且灭上一个灯。实现一秒亮一个灯。

4功能模块设计

4.1主模块

开始

KEY = 0?

初始化

KEY = 1?KEY = 2?KEY = 3?

闹钟函数Y

调时函数

闹钟显示

切换时间显示函数

闹钟开关

显示时间

KEY = 0

N

Y N KEY = 7

Y N

Y KEY = 4?

N

KEY = 0Y

KEY = 5?

N

KEY = 6?闹钟函数闹钟调时

闹钟显示

KEY = 7

Y

闹钟调分N

Y 闹钟显示N 图 4.1 主模块流程图

当按键按下时,会改变KEY 的值。当KEY1按下时,KEY 的值就等于1,以此类推。

主模块是一个无限循环,当KEY 改变时,它就会转到相应的分支,执行相应的的功能。 从而响应用户的操作。如KEY2被按下,则主模块就会转到分支2,然后调用闹钟显示 函数,显示闹钟的当前设置值。

选定cpu的时钟为5.0Hz。将所有接LCD的引脚指定为LCD引脚,确定LCD的显示频率,打开LCD显示。将P4的六个端口设置为输出模式,接通上拉电阻,并且允许六个按键中断。将P13、14、15的所有端口设置为输出模式。将P3.3和P3.4端

口设置为输出。选择8MHz内部高速时钟作为主系统时钟,实时计数器时钟=fprs/28= 32.768KHz。将周期性定时中断打开,设置为24小时制,1秒定时中断。将年的初值设置为13,月初值为01,日初值为01,星期初值为00,时初值为12,分初值为00。

4.3实时时钟模块

利用实时计数器来实现实时时钟模块。实时计数器的秒计数寄存器、分计数寄存器、时计数寄存器、日计数寄存器、周计数寄存器、月计数寄存器、年计数寄存器在开启计数模式后会自动计数。然后只要在一秒中断到来时,将寄存器中的值读入对应变量中,送到显示刷新模块刷新后显示就能实现实时时钟了。

4.4 闹钟设置模块

开始

hour1<23?hour1= hour1+1

N

Y hour1=0

结束

开始

minute1

<59?

minute1=

minute1+1

N

Y

mInute1=0

结束

图 4.4 闹钟设置模块流程图

利用变量hour1和minute1来实现闹钟功能。当KEY5或KEY6被按下就会分别调用闹钟的调时、调分模块来设置闹钟的时间。Hour1的值大于23时归零,minute1的值大于59时归零。

4.5 INTRTC中断处理模块

在一秒中断到来时,将实时计数器的秒计数寄存器、分计数寄存器、时计数寄存器、日计数寄存器、周计数寄存器、月计数寄存器、年计数寄存器中的值从BCD码转换为十进制送入到相对应的变量中,等待显示刷新模块调用。

4.6 显示刷新模块

主模块在循环中会不停的调用此模块,将实时时钟的最新值转换为LCD的显示码,并送入到显示的缓存中,等待显示模块调用。

开始

i = 0?

关闭计数模式

i = 1?i = 2?

i = 3?Y

MONTH=MONTH+1

YEAR = YEAR+1

YEAR = 0

N

Y

计算天数

Y N

Y

i = 4?

Y i = 5?N

i = 6?

WEEK=WEEK+1

Y

N

DAY=1

N

YEAR < 99?Y N

MONTH< 12?

N

Y MONTH = 1

N

DAY<天数?

DAY = DAY+1

N

Y

WEEK< 6?

WEEK=0

Y HOUR<23?Y

HOUR=HOUR+1

N HOUR=0

N Y MIN< 59?Y

MIN=MIN+1

MIN=0

N

开启计数模式

结束

图 4.7 时钟调时模块流程图

此模块根据全局变量i 的值,当KEY3被按下时,分别对实时时钟的年、月、日、星

期、时、分、秒进行调整,达到调时目的。当各个寄存器的值达到所对应的最大值时, 根据各自的性质归零或归一。

根据被按下的键,将KEY 设置成对应的值。KEY1对应的值为1,以此类推。

4.9 闹钟响铃模块

开始

hOur1=HOUR ?

Y

结束

N

minute1=MIN ?

N

Y

P3.4=1?N

Y

打开蜂鸣器

图 4.9 闹钟响铃模块流程图

当闹钟设置的时、分与实时时钟的时分相等并且P3.4端口的输出值为1即LED 灯

亮时,打开蜂鸣器的输出。蜂鸣器就会发出声音提醒闹钟时间到了。

4.10 显示模块

开始

显示地址赋初值

dp <6?b[dp]=对应缓冲区[dp]

dp++

N

Y

dp = 0

显示

结束

图 4.10 显示模块流程图

此模块根据全局变量i 的值,将对应的显示缓存区中的内容依次显示。

当一秒中断来到时,根据变量s的值,LED亮起对应的灯,并关闭上一个灯,s 的值加一模十二。

5 操作说明

按下KEY1键,改变LCD的显示内容。按四下KEY1键显示从年月日变为星期时分再按三下KEY1键显示又变为时分秒。

按下KEY3键,进行调时。当按了一下KEY1键再按KEY3键时,对年进行调整;

当按了两下KEY1键再按KEY3键时,对月进行调整;当按了三下KEY1键再按KEY3 键时,对日进行调整;当按了四下KEY1键再按KEY3键时,对星期进行调整;当按了五下KEY1键再按KEY3键时,对时进行调整;当按了六下KEY1键再按KEY3键时,对分进行调整。

按下KEY2键,显示闹钟的设定时间。再按下KEY5键,对闹钟的设定时间进行时调整;再按下KEY6键,对闹钟的设定时间进行分调整。

按下KEY4键,将P3.4 LED灯打开,并开启闹钟功能。再按一下关闭P3.4 LED灯,并关闭闹钟功能。

LED1~LED12每一秒依次亮一个灯。

6 总结

经过几周的单片机课程设计,已基本完成课题要求。功能上基本达标:时钟的显示,调时功能。时钟显示功能,精确度完全可以满足日常生活显示时间的需要;调时功能,方便快捷。

本次设计是结合书本样例和老师给的样例,独立设计完成。

另外,在本次设计的过程中,我发现很多的问题,虽然以前没有做过这样的设计但通过这次设计我学会了很多东西,单片机课程设计重点就在于软件算法的设计,需要有很巧妙的程序算法,虽然以前写过几次程序,但我觉的写好一个程序并不是一件简单的事,比如写一个程序看其功能很少认为编写程序简单,但到编的时候才发现一些细微的知识或低级错误经常犯做不到最后常常失败,所以有些东西只有学精弄懂并且要细心才行,只学习理论有些东西是很难理解的,更谈不上掌握。

从这次的课程设计中,我真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的练习的过程中才能提高,我想这就是我在这次课程设计中的最大收获。

附录程序清单:

#pragma sfr //使用特殊功能寄存器

#pragma access //使用绝对地址指令

#pragma EI //使用开中断关中断功能

#pragma DI

#pragma interrupt INTKR inter RB1 //定义按键中断

#pragma interrupt INTRTC RTC_INTRTC //定义周期性定时中断

char SEC_Num; //定义一个秒单元

char MIN_Num; //定义一个分单元

char HOUR_Num; //定义一个时单元

char DAY_Num; //定义一个日单元

char WEEK_Num; //定义一个周单元

char MONTH_Num;//定义一个月单元

char YEAR_Num; //定义一个年单元

unsigned char hour1 = 0; //初始化闹钟时单元=0

unsigned char minute1 = 0;//初始化闹钟分单元=0

unsigned int numbercode[10] = {0x070d , 0x0600 , 0x030e , 0x070a , 0x0603 , 0x050b , 0x050f , 0x0700 , 0x070f , 0x070b };

//数字“0”-“9”的显示码

unsigned char i=0;

//显示转换标志,i=0,1,2,3时显示年月日;i=4,5,6时显示星期时分;i=7时显示时分秒

unsigned char KEY=0; //定义全局变量key

unsigned int s=-1; //定义全局变量s

unsigned int buffy_m_d[6]; //年月日的数码显示缓存区

unsigned int buffw_h_m[6]; //星期时分的数码显示缓存区

unsigned int buffh_m_s[6]; //时分秒的数码显示缓存区

unsigned int buffhm1[6]; //闹钟的数码显示缓存区

void delay(); //延时函数

unsigned int BCDtoDec( char bcd) //BCD码转换十进制函数

char DectoBCD(int Dec) //十进制转换BCD码函数

unsigned int m_days(unsigned int mmonth) //计算当月天数函数

void inter() //按键中断处理函数

void RTC_INTRTC() //INTRTC中断处理函数

void noise() //闹钟响铃函数

void freshdisplaybuffer() //显示缓存区刷新函数

void d_c_inter() //切换时间函数

void play6bit() //显示函数

void set_hour() //闹钟使显示函数

void set_minute() //闹钟分显示函数void set_inter() //调整时间函数

void hour_inter() //闹钟调时函数

void minute_inter() //闹钟调分函数

//----------------------------------------------延时函数

void delay()

{

int i;

for(i=0;i<=100;i++)

;

}

//----------------------------------------------将BCD码转换成十进制的函数unsigned int BCDtoDec( char bcd)

{

unsigned int i, tmp;

tmp = ((bcd>>4)&0x0F)*10 + (bcd&0x0F);

return tmp;

}

//----------------------------------------------将十进制转换成BCD码的函数char DectoBCD(int Dec)

{

char Bcd;

Bcd = ((Dec/10)<<4) + ((Dec%10) & 0x0F);

return Bcd;

}

//----------------------------------------------计算当前月中天数的函数unsigned int m_days(unsigned int mmonth)

{

unsigned int days;

if((mmonth==4)||(mmonth==6)||(mmonth==9)||(mmonth==11)) days=30;

else if (mmonth==2)

{

if(BCDtoDec(YEAR)%4==0) //判断是否是闰年

days=29;

else

days=28;

}

else days=31;

return(days);

}

//----------------------------------------------按键中断处理函数

void inter()

{

DI();

switch(P4 & 0x3F){

case 0x3e:KEY=1;break;

case 0x3d:KEY=2;break;

case 0x3b:KEY=3;break;

case 0x37:KEY=4;break;

case 0x2f:KEY=5;break;

case 0x1f:KEY=6;break;

default: break;

}

EI();

}

//----------------------------------------------INTRTC中断处理函数

void RTC_INTRTC()

{

RWAIT = 1; //RWAIT标志置1,读取实时时钟数据

while(RWST==0); //检测是否处于读、写模式,RWST=1表示处于读写模式

SEC_Num =BCDtoDec(SEC); //将秒钟数转换为十进制读取到SEC_Num中

MIN_Num =BCDtoDec(MIN); //将分钟数转换为十进制读取到MIN_Num中

HOUR_Num =BCDtoDec(HOUR); //将小时数转换为十进制读取到HOUR_Num中

DAY_Num =BCDtoDec(DAY); //将日计数转换为十进制读取到HOUR_Num中

WEEK_Num =BCDtoDec(WEEK); //将周计数转换为十进制读取到WEEK_Num中

MONTH_Num =BCDtoDec(MONTH);

//将月计数转换为十进制读取到MONTH_Num中

YEAR_Num =BCDtoDec(YEAR); //将年计数转换为十进制读取到YEAR_Num中

RWAIT = 0;

while(RWST==1); //检测是否处于计数模式,RWST=0表示处于计数模式

s=(s+1)%12; //流水灯处理,每一秒换一个灯显示switch(s)

{

case 0: P15.3=0;P13.0=1; break;

case 1: P13.0=0;P13.1=1; break;

case 2: P13.1=0;P13.2=1; break;

case 3: P13.2=0;P13.3=1; break;

case 4: P13.3=0;P14.0=1; break;

case 5: P14.0=0;P14.1=1; break;

case 6: P14.1=0;P14.2=1; break;

case 7: P14.2=0;P14.3=1; break;

case 8: P14.3=0;P15.0=1; break;

case 9: P15.0=0;P15.1=1; break;

case 10: P15.1=0;P15.2=1; break;

case 11: P15.2=0;P15.3=1; break;

default:break;

}

}

//----------------------------------------------闹钟响铃函数

void noise()

{

if(hour1==HOUR_Num&&minute1==MIN_Num&&P3.4==1)

{

CKS=0X80;

delay();

BZOE=0;

}

}

//----------------------------------------------显示缓存区刷新函数

void freshdisplaybuffer()

{

buffy_m_d[5]=numbercode[YEAR_Num/10]; //年月日显示刷新

buffy_m_d[4]=numbercode[YEAR_Num%10];

buffy_m_d[4]|=0x0800;

buffy_m_d[3]=numbercode[MONTH_Num/10];

buffy_m_d[2]=numbercode[MONTH_Num%10];

buffy_m_d[2]|=0x0800;

buffy_m_d[1]=numbercode[DAY_Num/10];

buffy_m_d[0]=numbercode[DAY_Num%10];

buffw_h_m[5]=numbercode[WEEK_Num/10]; //星期时分显示刷新

buffw_h_m[4]=numbercode[WEEK_Num%10];

buffw_h_m[4]|=0x0800;

buffw_h_m[3]=numbercode[HOUR_Num/10];

buffw_h_m[2]=numbercode[HOUR_Num%10];

buffw_h_m[2]|=0x0800;

buffw_h_m[1]=numbercode[MIN_Num/10];

buffw_h_m[0]=numbercode[MIN_Num%10];

buffh_m_s[5]=numbercode[HOUR_Num/10]; //时分秒显示刷新

buffh_m_s[4]=numbercode[HOUR_Num%10];

buffh_m_s[4]|=0x0800;

buffh_m_s[3]=numbercode[MIN_Num/10];

buffh_m_s[2]=numbercode[MIN_Num%10];

buffh_m_s[2]|=0x0800;

buffh_m_s[1]=numbercode[SEC_Num/10];

buffh_m_s[0]=numbercode[SEC_Num%10];

}

//----------------------------------------------切换时间函数

void d_c_inter()

{

DI();

if(i<7)

{

i++;

}

else

{

i=0;

}

EI();

}

//----------------------------------------------显示函数

void play6bit()

{

unsigned int dp=0;

unsigned int b[6];

unsigned int LCD_addr;

LCD_addr=0xFA4A;

while (dp<6)

{

switch(i)

{

case 0:

case 1:

case 2:

case 3:b[dp] = buffy_m_d [dp];break;//i=0,1,2,3时显示年月日

case 4:

case 5:

case 6:b[dp] = buffw_h_m [dp];break;//i=4,5,6时显示星期时分

case 7:b[dp] = buffh_m_s [dp];break;//i=7使显示时分秒

}

pokew(LCD_addr,b[dp]);

delay();

pokew(LCD_addr,0x0000);

LCD_addr = LCD_addr-2;

dp++;

}

}

//----------------------------------------------闹钟时显示函数void set_hour()

{

unsigned int dp=4;

unsigned int a[6];

unsigned int LCD_addr;

LCD_addr=0xFA42;

buffhm1[5]=numbercode[hour1/10];

buffhm1[4]=numbercode[hour1%10];

buffhm1[4]|=0x0800;

while (dp<6)

{

a[dp]=buffhm1[dp];

pokew(LCD_addr,a[dp]);

delay();

pokew(LCD_addr,0x0000);

LCD_addr=LCD_addr-2;

dp++;

}

}

//----------------------------------------------闹钟分显示函数void set_minute()

{

unsigned int dp=0;

unsigned int b[6];

unsigned int LCD_addr;

LCD_addr=0xFA4A;

buffhm1[3]=numbercode[minute1/10];

buffhm1[2]=numbercode[minute1%10];

buffhm1[1]=0;

buffhm1[0]=0;

while (dp<4)

{

b[dp]=buffhm1[dp];

pokew(LCD_addr,b[dp]);

delay();

pokew(LCD_addr,0x0000);

LCD_addr=LCD_addr-2;

dp++;

}

}

//----------------------------------------------调整时间函数

void set_inter()

{

DI();

RTCE=0;

switch(i)

{

case 1:

{

if(YEAR_Num<99)

YEAR = DectoBCD(YEAR_Num+1);

else YEAR = 0;

break;

}

case 2:

{

if(MONTH_Num<12)

MONTH = DectoBCD(MONTH_Num+1);

else MONTH = 1;

break;

}

case 3:

{

int temp =m_days(BCDtoDec(MONTH)); //计算当月天数

if(DAY_Num >= temp)

DAY =1;

else

DAY = DectoBCD(DAY_Num+1);

break;

}

case 4:

{ if(WEEK_Num<6)

WEEK =DectoBCD(WEEK_Num+1);

else WEEK = 0;

break;

}

case 5:

{

if(HOUR_Num<23)

HOUR = DectoBCD(HOUR_Num+1);

else HOUR =0;

break;

}

case 6:

{

if(MIN_Num<59)

MIN = DectoBCD(MIN_Num+1);

else MIN = 0;

break;

}

default : break;

}

RTCE=1;

EI();

}

//----------------------------------------------闹钟调时函数

void hour_inter()

{

if(hour1<23)

hour1++;

else hour1=0;

}

//----------------------------------------------闹钟调分函数

void minute_inter()

{

if(minute1<59)

minute1++;

else minute1=0;

}

//----------------------------------------------主函数

void main()

{

PCC=0x00; //CPU的时钟选择(5.0Hz)

PFALL=0x0F; //所有接LCD引脚指定为LCD引脚LCDC0=0x45; //确定LCD显示频率

LCDMD=0x10; //LCD电源设置为1/5VDD

LCDM=0xC0; //LCD显示开

PM4=0x3F; //P4的六个端口设置为输入模式

PU4=0x3F; //接通上拉电阻

KRM=0x3F; //允许六个按键中断

KRMK=0;

P3.4=0; //LED灯初始化为熄灭状态

PM3.4=0; //P3.3和P3.4端口设置为输出模式

P3.3=0;

PM3.3=0;

PM13=0xf0; //端口13,14,15设置为输出模式

PM14=0xf0;

PM15=0xf0;

EI();

RTCCL=0X02;

//8MHz内部高速时钟作为主系统时钟,实时计数器时钟=fprs/28=32.768KHz RIFG=0; //周期性定时中断打开

RTCE=0; //停止计数操作

RTCC0 = 0x0a; //无输出,24小时制,1秒钟定时中断

MIN = 0X00; //设置分初值

HOUR = 0X12; //设置时初值

DAY = 0X01; //设置日初值

WEEK = 0x00; //设置周初值

MONTH = 0X01; //设置月初值

YEAR = 0X13; //设置年(2位数)初值

RTCIF = 0; //清中断固定中断标示

RTCMK = 0; //固定周期中断开

RTCE=1; //启动计数操作

while(1)

{

switch(KEY)

{

case 0: //没有按键中断{

noise(); //调用闹钟响铃函数

freshdisplaybuffer(); //调用显示缓存区刷新函数

play6bit(); //调用显示函数

break;

}

case 1: //按键KEY1被按下{

d_c_inter(); //调用切换时间函数

freshdisplaybuffer(); //调用显示缓存区刷新函数

play6bit(); //调用显示函数

KEY=0;

break;

}

case 2: //按键KEY2被按下{

set_hour(); //调用闹钟时显示函数

set_minute(); //调用闹钟分显示函数

KEY=7;

break;

}

case 3: //按键KEY3被按下{

set_inter(); //调用时间调整函数

freshdisplaybuffer(); //调用显示缓存区刷新函数

play6bit(); //调用显示函数

KEY=0;

break;

}

case 4: //按键KEY4被按下{

P3.4=~P3.4; //切换LED亮灭,调整闹钟开关

KEY=0;

break;

}

case 5: //按键KEY5被按下{

hour_inter(); //调用闹钟调时函数

set_hour(); //调用闹钟时显示函数

KEY=7;

break;

}

case 6: //按键KEY6被按下{

minute_inter(); //调用闹钟调分函数

set_minute(); //调用闹钟分显示函数

KEY=7;

break;

}

case 7:

{

noise(); //调用闹钟响铃函数

set_hour(); //调用闹钟时显示函数

set_minute(); //调用闹钟分显示函数

break;

}

}

}

}

实时时钟设计试验报告

实验报告

5.按下Key4 Key3执行时,该按键执行加一操作,Led灯按照5秒顺时针一个一个亮。 6.按下Key5 Key3执行时,该按键执行减一操作,Led灯按照5秒顺时针一个一个亮。 7.按下Key6 Key3执行时,该按键执行确定操作,Led灯按照5秒顺时针一个一个亮。 8.按下INT 闹钟关闭。 5、实验总结 本次实验是对课本上“电子日历钟设计”的加深。通过本次试验我对led和led显示有了更加熟悉的认识,能熟练应用它们的功能。同时我对时钟计数器也有了一定的认识,可以使用定时中断实现实时时钟,更重要的是我的实践能力有很大的提高。 程序设计中遇到的问题 (1)、问题:初始完成程序后秒针走的时间很快,不是精确的一秒走一次。 原因:单片机只能用主系统时间,修改fprs后可以真确显示。 (2)、问题:时间切换函数与显示函数和设计的不一样,如只需要显示时,却多显示分。 原因:在仔细看代码后发现每次按键中断都在调用time1()函数,而seeond++在里面,所以每次都会加快秒的运行。把seeond++移到外面放入time()函数后这个问题就解决了。 (3)、问题:运行时发现按键中断总会加快秒的运行,不是很精确。 原因:最后设置了一个虚拟的key7,当执行完时间指向ease7,然后调用Freshddisplaybuffer函数,这样就很好的解决了这个问题。 在程序调试过程中,设置断点并且在断点处增加一个LED灯,通过判断灯是否亮可以判断程序是否执行到该位置,对程序调试有很大的帮助。

开始 While Key? 6 1 3 2 4 结束 主程序流程图 附件 程序流程图: Y d_c_inter() Freshddisp laybuffer(); Set_D_T(); noise(); key=7; , 5 N DownNum() ; Freshddispl aybuffer(); Set_D_T(); noise(); key=7; Freshddis playbuffer Time1(); Show_Ti me(); Show_Ti me(); Time1() Freshddis playbuffer ();; Display_D ate(); noise(); 初始化蜂鸣器并关闭蜂鸣器BZOE = 0; 初始化 INT 按键 Init_Inter(); 初始化 Lcd 和 Led; Init_Lcd(),Init_Led(); UpNum(); Freshddis playbuffer (); Set_D_T(); noise(); key=7; key = 0; noise(); Time1(); Freshddis playbuffer (); Set_D_T(); noise(); 初始化按键中断InitKey_INTKR(); Time1(); noise(); 关中断DI () 关中断EI() 开中断EI();

基于μPD78F0485单片机实验板的实时时钟程序设计与实现讲解

基于μPD78F0485单片机实验板的实时时钟程序设计与实现 专业:计算机科学与技术 班级: 11级 学号: 姓名:

基于μPD78F0485单片机实验板的实时时钟程序设计与实现 1实验环境 硬件:PC、µPD78F0485单片机。 软件:Windows7操作系统、开发环境支持软件NEC Electronics Microcomputer、Microsoft Visio绘图 2功能描述 a)液晶屏可切换显示日期和时间。 b)具有日期和时间校对功能。 c)用LED1~LED12模拟秒针走动。 d)有闹钟功能。 3总体设计 3.1显示设计 a)在LCD上显示年月日,分别用两位数表示年月日。年的值从00~99;月的值从01~12;日的值如果是2月,闰年为01~29,平年为01~28,其他月份大月为01~31,小月为01~30。 13.12.10 年月日 图 3.1.1年月日的显示 b)在LCD上显示星期时分,分别用两位数表示星期时分。星期的值从00~06,其中 00表示星期天,其它的则一一对应;时采用24小时制,其值从00~23;分的值从 00~59。 01.12.00 星期时分 图 3.1.2星期时分的显示

c)在LCD上显示时分秒。时采用24小时制,其值从00~23;分的值从00~59;秒的 值从00~59。 12.00.00 时分秒 图 3.1.3时分秒的显示 3.2时间显示切换设计 设置一个全局变量i,初值为0。每按一下KEY1,i的值加一。当i = 0,1,2,3时,LCD 显示年月日。当i = 4,5,6时,LCD显示星期时分。当i = 7时,LCD显示时分秒。当i >7 时,i自动变为0。 3.3日期和时间校对设计 通过前面设置的全局变量i和KEY3来实现。当i = 1时,每按一下KEY3,年的值就加一,直到大于99时自动变为00。当i = 2时,每按一下KEY3,月的值就加一,直到大于12时自动变为01。当i = 3时,每按一下KEY3,日的值就加一,直到大于当月天数时自动变为01。当i = 4时,每按一下KEY3,星期的值就加一,直到大于06 时自动变为00。当i = 5时,每按一下KEY3,时的值就加一,直到大于23时自动变为00。当i = 6时,每按一下KEY3,分的值就加一,直到大于59时自动变为00。 3.4闹钟显示设计 当按下KEY2时,LCD显示闹钟设定的时间。 00.00 时分 图 3.4闹钟的显示 3.5闹钟调整设计 当按下KEY5时,闹钟的时就加一,到23时就归零。当按下KEY6时,闹钟的分就加一,到59时就归零。 3.6闹钟开关设计 通过KEY4控制闹钟的开关,并用LED灯的亮灭来显示。将LED灯端口的输出信号作为闹钟是否响铃的一个判断条件。按下KEY4,LED灯的输出信号取反,输出信号为1时灯亮并且闹钟打开,为0时灯灭并且闹钟关闭。

单片机实验报告--电子时钟制作

电子时钟制作 学院计算机科学与技术 专业计算机科学与技术(师范) 学号 学生姓名

一、设计内容与设计目的 1、编写出一个电子钟,六个数码管每两个一组来分别显示小时、分和秒;一个 蜂鸣器来实现报时或闹铃等声音功能;八个二极管玩花样设计,完美电子的整体设计。 2、熟悉整个电路图,练习一下焊接操作。 3、熟练掌握C51的编程方法与技巧。 4、能够有效地控制数码管、二极管、蜂鸣器和键盘的操作(可采用多种形式)。 5、能够根据原理图焊接电路板,经过调试,保证整个电路板没有虚焊点。 硬件设计要求 1、根据项目要求,去选择相应的电路,比如MCU系统,输入输出驱动电路, 电源供电电路。 2、整体布局合理,标注规范、明确、美观、不产生歧义。 3、列出完整的元件清单(标号、型号及大小、封装形式、数量)。 4、估算电路板的功耗,并对供电形式提出要求。 5、根据设计好的原理图,焊接实物。 软件设计要求 1、所编代码要能够实现以下基本功能,当时时间的设定,定点闹铃,秒针走一 下四个二极管同时向右移一位。 2、根据项目要求,设计软件整体规划,人机对话,各模块的关联,底层驱动模 块。 3、程序在必要的地方进行注释。 每个函数的出入口要有输入输出参数的说明。 程序必须具有具有良好的可读性,可重用,容易调试和维护。 4、使用c语言进行编程。 二、硬件系统设计 1.STC12C5A60S2控制模块 考虑到设计功能需要,控制器的功能用于外部键盘信号的接收和识别、数码管的显示控制等,我们选择了学习过的12C5A60S2系列单片机,具有反应速度极快,工作效率特高的特点。 12C5A60S2是一种低功耗、高性能得微控制器,具有8K 在系统可编程Flash 存储器。使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。另外掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。 2.键盘功能模块 根据系统的基本的要求,基于时间的观看和设定等功能,采用由四个键构成的独立式键盘分别接在单片机的P3.2-P3.5口,非常的方便,同时相对于独立式键盘大大节省了空间,在软件的设计时带来了极大的方便,使程序简易明了,可读性强。

基于单片机LED显示器的数字钟设计报告

基于单片机LED显示器的数字钟设计 本设计基于8031单片机控制,采用LED显示器设计一数字钟的设计方案。该数字钟能稳定显示时分秒,同时实现时分秒的数值调整。本文详细讨论了具体硬件电路,相关原器件的选择以及软件实现过程。比较时钟调整的查询方式和中断方式,对数字钟的稳定性和计时的精确性作了相关的讨论。在实验室通过硬件电路和仿真器进行模拟实验,验证电路和程序的正确性。最后给出采用中断方式实现的数字钟的源程序。 1.引言 在单片机技术日趋成熟的今天,其灵活的硬件电路的设计和软件的设计,让单片机得到了广泛的应用,几乎是从小的电子产品,到大的工业控制,单片机都起到了举足轻重的作用。单片机小的系统结构几乎是所有具有可编程硬件的一个缩影,可谓是“麻雀虽小,肝胆俱全”,单片机的学习和研究是对微机系统学习和研究的简捷途径。 单片机以其体积小,使用灵活方便,成本低,易于产品化,抗干扰能力强,可在各种恶劣环境下工作等特点,广泛的应用于工业控制,智能仪表,家用电器,机器人,医疗仪器,军事装备等方面。为了加深对单片机应用的认识,巩固所学的单片机知识,本次科研训练特选题“基于单片机数码管显示的数字钟设计”,尝试基本电路设计和汇编语言编程以及锻炼实践动手能力。 数字钟的实现方法多种多样,简单的可以由一些集成电子电路实现,精确点的可以通过某些时钟芯片,如MSM5832,DS1216,以及MC146818,结合相应的硬件电路和软件实现。本次科研训练本着锻炼为主的原则,不采用任何现成的时钟芯片,通过简单的硬件电路,通过编写相应程序进行计时与时间调整。本文采用8031单片机,以8255A作其扩展,LED显示器采用共阴极的七段数码管,驱动器采用74LS07芯片,以及普通的按键作为基本元器件。 2.数字钟硬件电路设计 数字钟的整体框图如图1所示

单片机课程设计实验报告(时钟、日历)..

基于单片机的电子钟设计 目录 第一章电子时钟设计--—--—----————-—-—-—----—-—-——-——2 1.1 设计原理简介--————-—----—---——---———-----——-—-—- —2 1.2 设计功能-——--—-—————-———-—----————---——--——-——---—3 第二章主要电路元器件介绍-—-———-———-—------———---3 2。1 STC89C52 单片机简介—--—--—-—-—-—-—-—---—-——-———3 2。1.1 单片机简介--——--——--——---—-—--————----—————--——-—-3 2。1.2 主要特性---——-------—---—-—---————-—--—--———-—-—-—3 2.1.3 管脚功能说明—---———-———-———-——---—-————-—-—- —-————4 2.1。4 LCD1602-—------——---—--—-——--———--——------——-—-—5 第三章单元电路的硬件设计—-----————————————————--6 3.1 硬件原理框图—-———--—--——---—--—-—---------—--———-—-6 3。2 单片机 STC89C52 系统的设计-—-—-—-—-————-—————-—----6

3。3 时钟电路—————-----———-—---—-——---—--—-—-—-—--————--7 3.4 复位电路-----——-——--———-————-———-—----———---—--—-—-------—-—--—-——---—-—————-—---——--7 3。5 键盘接口电路--—---—-———--—--——--——--——----———---——-8 3.6 LCD1602显示——---——————--—-—-——--——----—----———-————8 第四章设计总原理图—-—-—---——-----—-———-9 第五章心得体会---—-------—————--——-—-——9 第六章源程序---—-—-——-—-------———---—-——————-——----10

基于单片机的数字时钟设计

《单片机技术及应用》 课程设计报告 专业: 班级: 姓名: 指导教师: 二0一一年11 月14 日

摘要 近年来随着计算机在社会领域的渗透和大规模集成电路的发展,单片机的应用正在不断地走向深入,由于它具有功能强,体积小,功耗低,价格便宜,工作可靠,使用方便等特点,因此特别适合于与控制有关的系统,越来越广泛地应用于自动控制,智能化仪器,仪表,数据采集,军工产品以及家用电器等各个领域,单片机往往是作为一个核心部件来使用,在根据具体硬件结构,以及针对具体应用对象特点的软件结合,以作完善 本次做的数字钟是以单片机(AT89C51)为核心,结合相关的元器件(3个2位共阳数码管,一个发光二极管和一个蜂鸣器)和应用程序(proteus软件和KEIL编译软件),构成相应的应用系统。 关键词:单片机AT89C51 共阳数码管发光二极管蜂鸣器 proteus软件 KEIL编译软件

目录 1.课题设计目的 (4) 2.课程设计题目描述和要求 (4) 2.1 AT89C51的单片机简介 (5) 2.2 LED显示电路 (8) 2.3 键盘控制电路 (8) 3.课程设计报告内容 (9) 3.1.方案设计要求 (9) 3.2方案设计与论证 (9) 3.3整体设计框图 (10) 3.4系统设计流程图 (11) 3.5绘制数字时钟电路Protues仿真原理图 (12) 3.5.1启动ISIS 7 Professional软件 (12) 3.5.2仿真电路绘制 (12) 3.5.3电路检测 (13) 3.6软件设计 (14) 3.6.1运行keil软件编写程序并编译、连接 (14) 3.6.2将程序烧入单片机并运行 (14) 3.6.3运行程序 (15) 3.7软件与硬件调试 (15) 4.总结 (16) 5.附录 (17) 5.1数字时钟源程序 (17) 5.2实物图 (24) 5.3参考文献 (25)

单片机课程设计电子时钟

目录 第一部分设计任务及要求 (2) 1.1单片机设计设计内容 (2) 1.2单片机课程设计要求 (2) 1.3 系统运行流程 (2) 第二部分设计方案 (3) 2.1 总体设计方案说明 (3) 2.2 系统方框图 (3) 2.3 系统流程图 (3) 第三部分主要器材及基本简介 (7) 3.1 主要器材 (7) 3.2主要器材简介 (7) 第四部分系统硬件设计 (7) 4.1 数码管显示电路 (7) 4.2键盘输入电路 (8) 4.3 蜂鸣器 (8) 第五部分课程设计总结 (9) 附录 (9) 1. 系统源程序注释及功能说明 (9) 2. 原理图 (17) 毕竟是两年前写的东西了,在这里分享一下自己的思路,程序100%能运行,只不过是在我的那块板子上,要参考的话,最好去看看自己用的板子的接口和板子的原理图啥样。

第一部分设计任务及要求 1.1单片机设计设计内容 利用STC89C51RC单片机和LCD7407六段数码管实现可预置参数的电子钟,可由按键切换不同的功能。 1.2单片机课程设计要求 80C51系列单片机的外围接口电路设计,掌握应用软件的编写及调试。学会用软件调试硬件和用硬件调试软件。 1.硬件设计要求: CPU选用 STC89C51RC,内有 4KB Flash ROM。 显示用6位LED,LED共阴极接法,采用动态显示法。用芯片7407作7段LED段选驱动,用芯片7406段LED位段选驱动。 要求有单片机复位键,功能选择键,加/减键,移位键,确认键。 要求用Protel绘制电路原理图 2.软件编写要求: (1)基本要求: 实时时钟:显示年月日时分秒,各两位,分二页显示。 可以上电自动按预置时间走时。 (2)提高要求: 时钟上电后,显示时分秒,用按键切换年月日3秒后,返回时分秒。 可以手动预置年、月、日、时、分、秒后,时间走时。预置的位要求闪烁。 闹钟功能:定时到报警(喇叭发声),手动预置定时时间。 定时器(倒计时)功能:定时清0报警(喇叭发声),手动预置定时时间。 1.3 系统运行流程 程序首先进行初始化。上电后,开始自动走时,然后调用显示程序,在判断是否有按键按下。若有按键按下,则跳到该按键的相应的功能程序执行。若没有按键按下,则执行走时功能系统一直走时,到最大时间时清零,继续走时,以此循环。若没到则循环执行,中段服务程序从秒开始走时,完成秒的走时及向分、时、的进位以及日、月、年、的进位。由于闪烁和移位功能相联系,因此调用闪烁功能时,以移位为前提。闪烁用于被调单元的闪烁显示。调试程序用于对时分秒及年月日的加减。主要是通过主程序对子程序的调用来实现年月日和时分秒的转换,移位,调时,闹钟,倒计时等功能。具体的调整通过按键的判断来实现。

基于单片机C语言电子时钟完整版(闹钟,整点报时)

《单片机技术》课程设计说明书 数字电子钟 系、部:电气与信息工程学院 学生姓名: 指导教师:职称 专业: 班级: 完成时间:2013-06-07

摘要 电子钟在生活中应用非常广泛,而一种简单方便的数字电子钟则更能受到人们的欢迎。所以设计一个简易数字电子钟很有必要。本电子钟采用ATMEL公司的AT89S52单片机为核心,使用12MHz 晶振与单片机AT89S52 相连接,通过软件编程的方法实现以24小时为一个周期,同时8位7段LED数码管(两个四位一体数码管)显示小时、分钟和秒的要求,并在计时过程中具有定时功能,当时间到达提前定好的时间进行蜂鸣报时。该电子钟设有四个按键KEY1、KEY2、KEY3、KEY4和KEU5键,进行相应的操作就可实现校时、定时、复位功能。具有时间显示、整点报时、校正等功能。走时准确、显示直观、运行稳定等优点。具有极高的推广应用价值。 关键词电子钟;AT89S52;硬件设计;软件设计

ABSTRACT Clock is widely used in life, and a simple digital clock is more welcomed by people. So to design a simple digital electronic clock is necessary.The system use a single chip AT89S52 of ATMEL’s as its core to control The crystal oscillator clock,using of E-12MHZ is connected with the microcontroller AT89S52, through the software programming method to achieve a 24-hour cycle, and eight 7-segment LED digital tube (two four in one digital tube) displays hours, minutes and seconds requirements, and in the time course of a timing function, when the time arrived ahead of scheduled time to buzz a good timekeeping. The clock has four buttons KEY1, KEY2, KEY3,KEY4 and KEY5 key, and make the appropriate action can be achieved when the school, timing, reset. With a time display, alarm clock settings, timer function, corrective action. Accurate travel time, display and intuitive, precision, stability, and so on. With a high application value. Key words Electronic clock;;AT89S52;Hardware Design;Software Design

基于单片机的数字时钟设计与制作

摘要: 本系统以AT89S52为核心,选用DS1302串行时钟芯片,RT1602液晶显示器实现液晶显示当前日期、时间、星期。 本电子钟具有日期、时、分、秒的显示、调整功能,采用的时间制式为24小时制,时间显示格式为时(十位、个位)、分(十位、个位)、秒(十位、个位)。 关键词AT89S52、显示时间、调整时间、

目录 一、设计任务及要求 (2) 1.1设计任务 (2) 1.2设计要求 (2) 二、设计方案 (2) 2.1时钟实现 (2) 2.2显示模块 (2) 2.3微控制器模块 (2) 三、设计原理及实现 (2) 3.1系统的总体设计方案 (2) 3.1.1系统的硬件电路设计与主要参数计算 (3) 3.2系统的软件设计 (7) 3.2.1主程序流程 (7) 3.2.2 ds1302子程序流程 (7) 3.2.3调整时间子程序流程 (8) 四、测试 (8) 4.1硬件测试 (8) 4.2软件测试 (8) 4.3功能测试 (11) 五、设计结论及体会 (11) 设计结论: (11) 体会 (11) 致谢 (12) 参考文献 (13)

一、设计任务及要求 1.1设计任务 设计并制作一个用单片机控制的数字时钟。 1.2设计要求 (1)显示时间——显示时,分,秒。 (2)设置时间——利用键盘手动设置时间。 (3)自动计时——自动计时并能实时显示 二、设计方案 根据期末单片机设计任务的总体要求,本系统可以划分为以下个基本模块,针对各个模块的功能要求,分别有以下的设计方案: 2.1时钟实现 采用专用的时钟芯片实现时钟的记时,专用时钟芯片记时准确,容易控制,能够从芯片直接读出日期、时间、星期。 2.2显示模块 采用液晶显示器件,液晶显示平稳、省电、美观,更容易实现题目要求,对后续的功能兼容性高,只需将软件作修改即可,可操作性强,也易于读数,采用RT1602两行十六个字符的显示,能同时显示日期、时间、星期。 2.3微控制器模块 采用AT89S52八位单片机实现。它内存较大,有8K的字节FLASH闪速存储器,比AT89C51要多4K。它可在线编程,可在线仿真的功能,这让调试变得方便。单片机软件编程的自由度大,可通过编程实现各种各样的算术算法和逻辑控制。而且体积小,硬件实现简单,安装方便。 三、设计原理及实现 3.1系统的总体设计方案 采用AT89S52单片机作为控制核心对时钟芯片DS1302的控制,同时读取时间,并对输入信号做出处理。

单片机课程设计数字钟实验报告

单片机课程设计:电子钟 一、实现功能 1、能够实现准确计时,以数字形式显示时、分、秒的时间。 2、小时以24小时计时形式,分秒计时为60进位,能够调节 时钟时间。 3、闹钟功能,一旦走时到该时间,能以声或光的形式告警提 示。 4、能够实现按键启动与停止功能。 5、能够实现整点报时功能。 6、能够实现秒表功能。 二、设计思路 1、芯片介绍 VCC:电源。

GND:接地。 P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL 门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。 P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。 P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。 P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。 P3口也可作为AT89C51的一些特殊功能口,如下表所示: 口管脚备选功能 P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 /INT0(外部中断0) P3.3 /INT1(外部中断1) P3.4 T0(记时器0外部输入) P3.5 T1(记时器1外部输入) P3.6 /WR(外部数据存储器写选通) P3.7 /RD(外部数据存储器读选通) P3口同时为闪烁编程和编程校验接收一些控制信号。 RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期

单片机课程设计--智能电子钟的设计

目录 1引言 (1) 1.1设计内容和要 (1) 1.2 工作原理 (2) 2总体设计 (2) 2.1 方案设计 (2) 2.2 系统框图 (2) 2.3 核心芯片简介 (3) 2.3.1 DS1302简介 (3) 2.3.2 AT89C51简介 (3) 3 智能电子钟软硬件电路的设计 (4) 3.1 硬件设计 (4) 3.1.1 复位电路设计 (4) 3.1.2 DS1302与单片机的接口设计 (5) 3.1.3 LED显示设计 (5) 3.1.4 电源设计 (6) 3.1.5 按键开关去抖设计 (6) 3.1.6 时钟电路的设计 (7) 3.1.7 电路总原理图设计 (8) 3.2 软件设计 (8) 3.2.1 流程图 (8) 4protues仿真与调试 (11) 4.1 电路的仿真 (11) 4.2软件调试 (11) 结论……………………………………………………………………………………………错误!未定义书签。 参考文献 (14) 附录 (15) 源程序 (15)

1 引言 电子时钟主要是利用电子技术将时钟电子化、数字化,拥有时钟精确、体积小、界面友好、可扩展性能强等特点,被广泛应用于生活和工作当中。另外,在生活和工农业生产中,也常常需要温度,这就需要电子时钟具有多功能性。本设计主要为实现一款可正常显示时钟/日历、带有定时闹铃的多功能电子时钟。本文对当前电子钟开发手段进行了比较和分析,最终确定了采用单片机技术实现多功能电子时钟。本设计应用AT89C51芯片作为核心,6位LED数码管显示,使用DS1302实时时钟日历芯片完成时钟/日历的基本功能。这种实现方法的优点是电路简单,性能可靠,实时性好,时间精确,操作简单,编程容易。该电子时钟可以应用于一般的生活和工作中,也可通过改装,提高性能,增加新功能,从而给人们的生活和工作带来更多的方便。 1.1设计内容和要求 以AT89C51单片机为核心,制作一个LCD显示的智能电子钟: (1) 计时:秒、分、时、天、周、月、年。 (2) 闰年自动判别。 (3) 五路定时输出,可任意关断(最大可到16路)。 (4) 时间、月、日交替显示。 (5) 自定任意时刻自动开/关屏。 (6) 计时精度:误差≤1秒/月(具有微调设置) (7) 键盘采用动态扫描方式查询。所有的查询、设置功能均由功能键K1、K2完成。 1.2 工作原理 本设计采用市场上流行的时钟芯片DS1302进行制作。DS1302是DALLAS公司推出的涓流充电时钟芯片,内含一个实时时钟/日历和31字节静态RAM,可以通过串行接口与计算机进行通信,使得管脚数量减少。实时时钟/日历电路能够计算2100年之前的秒、分、时、日、星期、月、年的,具有闰年调整的能力。 DS1302时钟芯片的主要功能特性: (1) 能计算2100年之前的年、月、日、星期、时、分、秒的信息;每月的天数和闰年的天数可自动调整;时钟可设置为24或12小时格式。 (2) 31B的8位暂存数据存储RAM。

单片机电子钟设计任务书

目录 一、课程设计的主要内容和要求 (1) 二、实现原理等知识的介绍 (2) 2.1电子时钟的设计 2.2单片机识的相关知识 三、系统的总体方案设计说明; 3.1总体设计方案 3.2总设计原理框图 四、具体实现步骤的设计说明; 五、单片机系统程序的编制; 六、测量过程的操作说明,原始测量数据的记录; 七、结论及存在问题; 八、心得体会总结; 九、参考文献。

一、主要内容和要求 1 主要内容:设计一个数字式电子钟,它具有时,分,秒的计时功能,可以通过键盘进行时间设定,并且将时间显示在LED数码管上。用按键设定时钟的时、分、秒,用扫描方式动态显示。时钟用定时中断方式工作,单片机晶体震荡器频率11.0592Mhz.。可选做双机通信实验,实现子母钟功能,即由其中一台做时钟,另一台采集时钟值并显示。 2 对于基本题目要求是: 用按键设定时钟的时、分、秒。要求用4键方式,即选择、加、减、确认键,选择键用于选择修改起始时、分、秒值,每按一次,被修改数码管顺序移动并闪烁。用+,- 键修改数值,确认键确定修改结束。 a)用扫描方式动态显示时、分、秒,第2,4 数码管加小数点,并且要求第4数码管小数点每秒闪烁一次。 b)时钟用定时中断方式工作。注意单片机晶体震荡器频率是11.0592Mhz.。 c)可选做双机通信实验,实现子母钟功能,即由其中一台做时钟,另一台采集时钟值并显示。

二、实现原理等知识的介绍 2.1电子时钟的相关知识 1电子时钟简介 电子钟是一种利用数字电路来显示秒、分、时的计时装置,与传统的机械钟相比,它具有走时准确、显示直观、无机械传动装置等优点,因而得到广泛应用。随着人们生活环境的不断改善和美化,在许多场合都用到电子时钟。 2电子时钟的基本特点 现在高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟、石英钟、石英表都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调试,数字式电子钟用集成电路计时时,译码代替机械式传动,用LED数码管代替指针显示进而显示时间,减小了计时误差,这种表具有时、分、秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好。 3电子时钟的工作原理 该电子时钟由89C51,MAX232,LED数码管等构成,采用晶振电路作为驱动电路,由延时程序和循环程序产生的一秒定时,达到时分秒的计时,六十秒为一分钟,六十分钟为一小时。用按键设定时钟的时、分、秒。通过四个按键即选择、加、减、确认键,选择键用于选择修改起始时、分值,每按一次,被修改数码管顺序移动并闪烁。用+,- 键修改数值,确认键确定后秒位清零,修改结束。 2.2单片机的相关知识 1单片机简介 单片机全称为单片机微型计算机(Single Chip Microsoftcomputer)。从应用领域来看,单片机主要用来控制,所以又称为微控制器(Microcontroller Unit)或嵌入式控制器。单片机是将计算机的基本部件微型化并集成在一块芯片上的微型计算机。 2 单片机的发展史

基于单片机的电子时钟设计_毕业论文

基于单片机的电子时钟设计_毕业论文 基于单片机的电子时钟设计_毕业论文 编辑整理: 尊敬的读者朋友们: 这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望(基于单片机的电子时钟设计_毕业论文)的内容能够给您的工作和学习带来便利。同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。 本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快业绩进步,以下为基于单片机的电子时钟设计_毕业论文的全部内容。

基于单片机的电子时钟设计_毕业论文 本科毕业论文 学号 学校代 公开 密级 TH714 分类号 基于单片机的电子时钟设计 题 目 (中、英文) The Design of Electronic Clock Based on MCU 作者姓名 电气工程及其自动专业名称 工 科 学科门类 郝海燕 成绩评定 提交论文日期 指导教师 二〇一三年五月 10722

摘要 单片机是一种数字集成电路芯片,是指集成在一块芯片上的微型计算机。一个比较完整的单片机应该包括微处理器(CPU)、存储器(RAM和ROM)、并行输入/输出接口(I/O接口)电路、可编程全双工串行口、定时/计数器、中断系统以及复位电路。由于它具有小巧灵活,成本低,可靠性好,控制功能强,易扩展等一系列优点,所以被越来越广泛地应用于各个领域。而51系列的单片机就是最为典型和具有代表性的一种单片机. 本设计是基于单片机的简单电子时钟的设计,系统主要以单片机AT89C51为核心,结合按键模块来显示相应的时间,并可以对时、分、秒进行单独校对,使其达到标准时间。本次设计以软件控制硬件以及软硬件结合为指导思想,充分发挥单片机功能.同时,该系统的诸多优点使其具有很强的实用性,由于该系统实现的功能简单,因此具有很好的可扩展性。 关键词: AT89C51;电子时钟;按键控制 Abstract That the microcontroller is integrated on a single chip microcomputer is a digital integrated circuit chip。Should be a more

单片机数字时钟毕业设计论文

单片机数字时钟 一、总体概述 摘要 本设计采用89S52系列单片机作为时钟的控制核心,电路使用了八个数码管作为时钟显示,用计数器中断程序作为了一秒钟的精确计数,并用按钮实现了调闹钟时间和时钟时间的校对功能。 关键词:单片机、控制、显示、调时。 Abstract This design's adopting a single slice of the 89 S52serieses machine is the control core of the clock, the electric circuit used eight piece code tubes as the clock manifestations, The precision that used to count the machine interruption procedure conduct and actions for a second count, counteracting a button to carry out to adjust check of the alarm clock time and the clock time function.

二、竞赛赛题及要求 单片机音乐演奏 基本要求:1、利用单片机演奏一和谐的音乐,音乐时长不少 于两分钟; 2、能够随时实现中断; 3、能够手动调节音乐重复次数。 发挥部分:1、音乐演奏时同时有彩灯闪烁伴奏。 2、用按键实现多首音乐间的选择,且任何时间 都能选择 本时钟程序采用了C语言与汇编语言相结合的方案,使用C主要是考虑到本人学习单片机的时间很短,而此次竞赛又迫在眉睫,对于开发时间如此紧的竞赛,C语言有着汇编无可比拟的优势。C语言是一种编译型程序设计语言,它兼顾了多种高级语言的特点,并具备汇编语言的功能。C语言有功能丰富的库函数、运算速度快、编译效率高、有良好的可移植性,而且可以直接实现对系统硬件的控制。C语言是一种结构化程序设计语言,它支持当前程序设计中广泛采用的由顶向下结构化程序设计技术。此外,C语言程序具有完善的模块程序结构,从而为软件开发中采用模块化程序设计方法提供了有力的保障。因此,使用C语言进行程序设计已成为软件开发的一个主流。用C语言来编写目标系统软件,会大大缩短开发周期,且明显地增加软件的可读性,便于改进和扩充,从而研制出规模更大、性能更完备的系统。

嵌入式uPD78F0485单片机实验报告 流水灯 音乐盒

《嵌入式系统应用技术基础》实验报告(一) 基于µPD78F0485单片机的流水灯 音乐盒设计与实现 专业:软件工程 班级:2009 学号:********** 姓名:***

1.设计环境及使用工具 1.1设计环境:PC机、瑞萨EZ/EM-1仿真器、程序下载及仿真调试电缆、PC机 到仿真器的USB通信线。 1.2使用工具:NEC upd78F0485单片机。 2.需求分析 当前,在世界范围内,一个以微电子技术,计算机的通讯技术为先导的,一信息技术及信息产业的信息革命时期。而计算机技术怎样与实际应用更有效的结合并有效地发挥其作用是科学界最热门的话题,也是当今计算机应用中空前活跃的领域。本文主要从计算机的应用上来实现流水灯加蜂鸣器的音乐盒。 3.设计方案 设计一个电路,在uPD78F0485单片机的P40/KR0~P45/KR5引脚上各连接1个按键,即KEY1-KEY6;在P30-P33、P40-这43、P50-P53引脚上连接12个LED灯,即LED1-LED2. 在P33/BUZ引脚上连接一个蜂鸣器。编写程序实现按键控5种不同的流水灯(LED灯亮、灭闪烁)显示方案,并且伴随蜂鸣器的声音,每次灯闪、灯灭蜂鸣器换种频率,如果在显示某种方案的过程中有按键探马下,则会中断现在的方案,进入所按下按键所设定的方案进行显示。 4.程序设计(包括程序流程图) 图4.1 程序流程图

5.操作说明 表5.1 操作对照表 6.设计中遇到的主要问题及解决办法 表6.1 问题及对应解决方案

7.总结及展望 随着微控技术的日益完善和发展,单片机的应用在不断走向深入。它的应用比定导致传统的控制技术从根本上发生变革。也就是说单片机应用的出现是对传统控制技术的革命。它在工业控制、数据采集、智能化仪表、机电一体化、家用电器等领路得到了广泛应用,极大的提高了这些领域的技术水平和自动化控制。因此单片机的开发应用已成为高技术工程领域的一项重大课题。因此了解单片机知识,掌握单片机的应用技术具有重大的意义。 8.程序清单 8.1引入、函数声明和初始化变量: #pragma sfr #pragma NOP #pragma DI #pragma EI #pragma interrupt INTKR OnKeyPress void delay(); void InitKey_INTKR(void); unsigned char gModel = 0; unsigned char gFlag = 1; 8.2软件延时函数: void delay(int k) {int i,j; for(i = 0; i < k; i++) for(j = 0;j < k; j++ );} 8.3蜂鸣器调用: void a(int m) {switch(m){case 1:CKS=0x80; case 2:CKS=0xA0; case 3:CKS=0xC0;case 4:CKS=0xE0;}} void b(){BZOE=0;} 8.4按键中断初始化函数: void InitKey_INTKR(void) {PM4 = 0x3F; PU4 = 0x3F; KRM = 0x3F; KRMK = 0;} 8.4按键中断服务函数: __interrupt void OnKeyPress(void) { DI(); gFlag = 0;

《FPGA设计与应用》实验指导书全(Verilog版)

《FPGA设计与应用》实验指导书 某某编 武汉理工大学华夏学院 2011年9月

前言 一、实验课目的 数字电路与系统设计实验课是电子工程类专业教学中重要的实践环节,包括了ISE开发环境基本操作及FPGA的基本原理、基带传输系统的设计、Uart串口控制器电路的设计、PS/2接口的设计、VGA显示接口设计。要求学生通过实验学会正确使用EDA技术,掌握FPGA器件的开发,熟练使用ISE开发环境,掌握Verilog语言的编程,掌握数字电路和系统的设计。 通过实验,使学生加深对课堂专业教学内容的理解,培养学生理论联系实际的能力,实事求是,严谨的科学作风,使学生通过实验结果,利用所学的理论去分析研究EDA技术。培养学生使用Basys 2开发板的能力以及运用实验方法解决实际问题的能力。 二、实验要求: 1.课前预习 ①认真阅读实验指导书,了解实验内容; ②认真阅读有关实验的理论知识; ③读懂程序代码。 2.实验过程 ①按时到达实验室; ②认真听取老师对实验内容及实验要求的讲解; ③认真进行实验的每一步,观察程序代码与仿真结果是否相符; ④将实验过程中程序代码和仿真结果提交给老师审查; ⑤做完实验后,整理实验设备,关闭实验开发板电源、电脑电源后方可离开。 3.实验报告 ①按要求认真填写实验报告书; ②认真分析实验结果; ③按时将实验报告交给老师批阅。

三、实验学生守则 1.保持室内整洁,不准随地吐痰、不准乱丢杂物、不准大声喧哗、不准吸烟、不准吃东西; 2.爱护公务,不得在实验桌及墙壁上书写刻画,不得擅自删除电脑里面的文件; 3.安全用电,严禁触及任何带电体的裸露部分,严禁带电接线和拆线; 4.任何规章或不按老师要求操作造成仪器设备损坏须论价赔偿。

单片机的电子时钟设计说明

《单片机应用系统设计》课程设计报告 标题:基于单片机的电子时钟设计 学生:XXX 系部:汽车电子系 专业:应用电子技术 班级: XXXX 指导教师:XXXX

目录 摘要........................................................................... (Ι) 1、方案选择 (1) 1.1 DS1302+液晶显示屏……………………………………… 2、设计方框图………………………………………… 2.1 电路设计总体框图……………………………………… 2.2 整体设计思路框图……………………………………… 2.3 程序设计框图……………………………………… 3、硬件电路设计………………………………………… 3.1 51单片机最小系统设计…………… 3.2 电源供电电路设计…………… 3.3 串口通信电路设计…………… 3.4 时钟芯片电路设计…………… 3.5 LCD显示电路设计…………… 3.6 报警电路设计…………… 4、软件设计………………………………………… 4.1 系统程序流程图设计…………… 4.2 系统程序设计…………… 结论………………………………………………………………… 参考文献…………………………………………………………… 附录…………………………………………………………………

摘要 基于单片机设计的电子时钟精确度较高,因为在程序执行过程中,任何指令都不影响定时器的正常计数,即使程序很复杂也不会影响到中断时间。单片机是集CPU,RAM,ROM,定时器,计数器和多种接口于一体的微控制器。它体积小、重量轻、抗干扰能力强、环境要求不高、价格低、可靠性高、灵活性好、开发较为容易,广泛应用于智能生产和工业自动化上。 本系统为基于DS1302的多功能电子钟,以STC89C51单片机作为主控芯,采用实时时钟芯片DS1302,使用1602液晶作为显示输出。该系统走时精确,具有闹钟设置,时间模式切换,秒表以与可同时显示时间、日期等多种功能。 关键词: SCT89C51 单片机液晶屏时钟芯片蜂鸣器

相关主题
相关文档
最新文档