单片机课程设计家用多功能定时器设计与制作.docx
- 文档编号:4169140
- 上传时间:2023-05-06
- 格式:DOCX
- 页数:18
- 大小:223.55KB
单片机课程设计家用多功能定时器设计与制作.docx
《单片机课程设计家用多功能定时器设计与制作.docx》由会员分享,可在线阅读,更多相关《单片机课程设计家用多功能定时器设计与制作.docx(18页珍藏版)》请在冰点文库上搜索。
单片机课程设计家用多功能定时器设计与制作
《单片机技术》课程设计报告
项目名称:
家用多功能定时器设计与制作第一章绪论
1.1设计任务及目标
本次课程设计的任务如下:
1,完成单片机最小系统板设计与制作。
2,编程设计家用多路定时控制器
目标:
1,具有正常数字钟功能,包括时间校正,具有至少三路定时开关控制功能,每路定时时间可以任意设置
2,自主创新的功能。
第二章系统电路设计
2.1系统总体设计框架结构
2.2系统硬件单元电路设计
2.2.1时钟电路设计
该电路为时钟电路,主要功能为:
与单片机内部振荡器构成振荡电路,为单片机工作提供时序。
晶体是12MHz,电容选用33pf,时钟周期为1/12us,机器周期为1/12*12=1us
2.2.2复位电路设计
电阻为10k,电容为0.1uf,由于电容的阻抗对直流而言比较大,当复位开关未按下时,通过电容和电阻分压使得RESET端为低电平,当按下复位键时,通过两个电阻分压在RESET为高电平,从而实现复位.电阻的作用不是限制电流的大小,而是控制复位时间.电容充电时间与RC的值成正比.
2.2.3按键电路设计
按键电路为2行6列式矩阵键盘,例如,Shift键将Y0与Line1连接起来,当Y0口为低电平时,如果此时检测到Line1为低电平,则唯一说明Shift键按下,
此时记录当前按键键值为1.
2.3系统硬件总电路
系统总体电路图
第三章系统软件设计
3.1系统软件流程图
主程序流程图
主程序在初始化参数后进入while循环,不断调用子程序进行刷新缓冲区,刷新显示LED,定时时间检测,按键处理等操作。
定时器0中断计时子程序流程图:
定时器0中断计时子程序流程图
定时器0中断主要用于计时,首先设定一次中断所需的时间,这里为50MS,故初始值为TH0=0x3C;TL0=0xB0;
检测50ms计数单元是否加满10次,若是,则LED取反闪烁,若不是则跳过。
检测50ms计数单元是否加满20次,若是,则秒计数单元+1,若不是则结束。
检测秒计数单元是否加满60次,若是,则分计数单元+1,若不是则结束。
检测分计数单元是否加满60次,若是,则时计数单元+1,若不是则结束。
检测时计数单元是否加满24次,若是,则时计数单元清零,若不是则结束。
结束返回主程序
定时器1中断计时子程序流程图
定时器1中断主要用于刷新缓冲区按键扫描记录
重装定时器初值后,判断扫描显示位NUM
送相应数码管低电平点亮,同时检测P2^1与P2^2是否出现低电平,
若有则结合当前数码管低电平列线唯一确定一个按键,并将赋予它的键值记录下来
最后NUM++,结束返回主程序。
刷新缓冲区子程序流程图:
根据当前状态STATE判断应刷新哪个缓冲区,例如:
Case1:
刷新时分显示缓冲区
Case2:
刷新定时时间显示缓冲区
Case3:
刷新年月日显示缓冲区
这样做的好处是:
1,条理清晰,一目了然。
2,不用刷新没有变化的缓冲区,如定时时间单元在非定时状态下。
3,提高程序效率,为单片机省电。
LED显示子程序:
根据当前状态选择LED显示方式,例如:
Case1:
LED1半秒取反,其他不变。
Case2:
LED2常亮,其他不变。
Case3:
LED3常亮,其他不变。
数码管显示子程序:
根据当前状态选择数码管显示方式,例如:
Case1:
显示时分缓冲区的值。
Case2:
显示定时时间缓冲区的值。
Case3:
显示年月日缓冲区的值。
按键处理子程序:
根据当前状态选择按键处理方式,例如:
Case1:
时分状态下按键处理。
Case2:
定时状态下按键处理。
Case3:
年月日状态下按键处理。
定时检测子程序:
定时检测,定时开始时间到后,启动相应定时报警状态;定时结束时间到后,关闭相应定时报警状态.
3.2系统程序设计
3.2.1系统主程序
/******************************************************************/
/*主程序*/
/******************************************************************/
voidmain(void)
{
P1=0x00;
STATE=12;
EA=1;
TMOD|=0x01;//定时器0计时50msin12Mcrystal
TH0=0x3C;//初值
TL0=0xB0;
ET0=1;
TR0=1;
TMOD|=0x10;//定时器1用于动态扫描
TH1=0xFa;//初值
TL1=0xF0;
ET1=1;
TR1=1;
while
(1)
{
RefreshTab();
LED_Display();
SetTime_test();
if(!
Line1||!
Line2){Delay(300);Key_Process();}
}
}
3.2.2定时中断子程序
/******************************************************************/
/*定时器0中断用于计时*/
/******************************************************************/
voidTimer0(void)interrupt1
{
TH0=0x3C;//重新赋值50ms溢出
TL0=0xB0;
count++;
if(count==10&&STATE!
=13)
LED1=~LED1;
if(count==20)
{
count=0;
second++;//秒加1
if(second==60)
{
second=0;
minute++;//分加1
if(minute==60)
{
minute=0;
hour++;//时加1
if(hour==24)
{
hour=0;
day++;
if(day==30)
{
day=0;
month++;
if(month==12)
{
month=0;
yearL++;
if(yearL==99)
yearL=0;
}
}}
}
}
}
}
/******************************************************************/
/*定时器1中断扫描显示+键值判断*/
/******************************************************************/
voidTimer1(void)interrupt3
{
TH1=0xFa;//定时1ms显示下一个数码管
TL1=0xF0;
switch(num)
{
case0:
P2=0x0f;//点亮第一个数码管
if(!
Line1||!
Line2)
{
if(!
Line1)Keyno=1;
if(!
Line2)Keyno=2;
Keyage_Record();
}elseKEYT=0;
SEG_Display();
break;
case1:
P2=0x1f;//点亮第二个数码管
if(!
Line1||!
Line2)
{
if(!
Line1)Keyno=3;
if(!
Line2)Keyno=4;
Keyage_Record();
}
SEG_Display();
break;
case2:
P2=0x2f;//点亮第三个数码管
if(!
Line1||!
Line2)
{
if(!
Line1)Keyno=5;
if(!
Line2)Keyno=6;
Keyage_Record();
}
SEG_Display();
break;
case3:
P2=0x3f;//点亮第四个数码管
if(!
Line1||!
Line2)
{
if(!
Line1)Keyno=7;
if(!
Line2)Keyno=8;
Keyage_Record();
}
SEG_Display();
break;
case4:
P2=0x4f;
if(!
Line1||!
Line2)
{
if(!
Line1)Keyno=9;
if(!
Line2)Keyno=10;
Keyage_Record();
}
SEG_Display();
break;
case5:
P2=0x5f;
if(!
Line1||!
Line2)
{
if(!
Line1)Keyno=11;
if(!
Line2)Keyno=12;
Keyage_Record();
}
SEG_Display();
break;
default:
break;
}
num++;//计数循环
if(num==6)
num=0;
}
第四章实验结果和分析
3.1实验使用的仪器设备
直流电源,万用表,烧程器,螺丝刀等
3.2测试结果分析
1,上电以后,开机显示字幕及初始化显示时间均正常。
2,按键调时,定时均有效。
3,3,定时时间到后相应灯点亮,继电器吸合。
4,开机状态长按shift键关机后,数码管,LED均熄灭。
5,关机状态长按shift键开机后,数码管,LED均正常显示。
测试结果:
与预期相符合。
结束语
通过本次课程设计,基本完成了设计任务,并且达到了预期目标。
本次课程设计主要收获集中在编程方面:
1,编程序,多练是王道。
编程序要求逻辑严密,滴水不漏,任何思路上的不清晰都会导致一些莫名其妙的错误,非常耽误调试时间。
这种情况下就要求多上机实践,多用开发板实验。
2,编程序就是画程序流程图。
没有从整体到局部的程序思路,上机就敲耗时耗力,往往弄得一团糟。
正确的做法是画程序流程图,程序流程图出来了再敲上机就是直接将图形转化为代码,清晰易懂。
3,编程序,相互交流很重要。
同一个功能可以用很多不同的方法实现,多听听别人的意见有助于拓展思路,发现思维漏洞;给别人讲代码有助于自己深入理解程序,理清条理。
参考文献
[1]张俊谟.单片机中级教程。
北京航空航天大学出版社。
2006.
[2]夏路易,石宗义。
电路原理图与电路板设计教程。
希望电子出版社。
2002
[3]杨欣,电子设计从零开始。
清华大学出版社。
2005
[4]BrianW.Kernighan,DennisM.Ritchie.TheCProgrammingLanguage.
ChinaMachinePress.2010
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 课程设计 家用 多功能 定时器 设计 制作