单片机家用多功能定时器设计与制作

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
TimeTab[2]=Tab[(50-second1)/10];
TimeTab[3]=Tab[(50-seቤተ መጻሕፍቲ ባይዱond1)%10];}
}
/******************************************************************/
/*按键处理子程序*/
/******************************************************************/
1.2
主要内容和任务:完成单片机最小系统板设计与制作,在此基础上通过编程设计家用多路定时控制器。
目标:通过编写程序,使单片机最小系统具有正常数字钟功能,包括时间校正,具有至少三路定时开关控制功能,每路定时时间可以任意设置。
第二章
2.1 设计框架介绍
按键输入电路:对定时器输入定时时间、时钟时间,并对其调整。
通过在MCS-51系列的单片机中增设了全双工串行口I/O、片内数据存储器采用寻址范围为256kb的8位地址、均有四种工作方式的2个16位的定时/计数器、增加了中断系统、增设了颇具特色的布尔处理机、让单片机具有较强的指令寻址和运算功能这些技术,使单片机拥有了完善的外部并行总线(AB、DB、CB)具有多机识别功能的串行通信接口,规范了功能单元的特殊功能寄存器控制模式及适应控制器特点的布尔处理系统和指令系统,位发展具有良好兼容性的新一代单片机奠定了良好的基础。
2.2.2
该时钟电路是由晶体振荡器和两个微调电容组成的。在单片机芯片内部有一个高增益反相放大器,其输入端为引脚XTAL1,其输出端为引脚XTAL2。只需要在片外通过XTAL1和XTAL2引脚跨接晶体振荡器或在引脚与地之间加接微调电容,形成反馈电路,振荡器即可工作。由于该晶振使用的是12MHZ的晶体,因此它的时钟周期是0.167us,机器周期为1us。
延时子函数
*************************************************/
void Delay( uint x) //自定义延时约0.1ms
{
uint t;
while(--x)
for(t=0;t<120;t++)
;
}
/******************************************************************/
单片机被广泛地应用在各种领域。例如用来作家用电器中如洗衣机、电冰箱、微波炉、电饭煲、电视机、录像机以及其他视频音像设备的控制器;在办公室中用作大量通信、信息的承载体,比如磁盘驱动、打印机、复印机、电话等;它还可以来构成电子秤、收款机、仓储安全检测系统、空气调节系统等冷冻保鲜系统等的专用系统;在工业中,像工业过程控制、过程监制以及机电一体化控制等系统都是以单片机为核心火多网络系统;它还可以构成一些智能仪表与集成智能传感器传统的控制电路,实现一些像存储、数据处理、查找、判断、联网和语音功能等智能化功能,还可以构成一些电子系统中的集中显示系统、动力检测控制系统、自动驾驶系统、通信系统以及运行监视器等的冗余网络系统。
TimeTab[2]=Tab[minute/10];
TimeTab[3]=Tab[minute%10];}
if(flag==1)
{TimeTab1[0]=Tab[h/10];
TimeTab1[1]=Tab[h%10];
TimeTab1[2]=Tab[m/10];
TimeTab1[3]=Tab[m%10];
sbit LED3=P1^3;
sbit LED4=P1^4;
sbit LED5=P1^5;
sbit LED6=P1^6;
sbit LED7=P1^7;
sbit Line1=P2^1;
sbit Line2=P2^0;
/******************定义缓冲区及初始化********************/
void Key_Process(void)
{
switch(STATE)
{
case 0: if(Keyno==1){STATE=1;}
break;
case 1: if(Keyno==2){hour++;if(hour==24)hour=0;}
if(Keyno==3){hour--;if(hour==-1)hour=23;}
if(Keyno==1){STATE=2;}
break;
case 2: if(Keyno==2){minute++;if(minute==60)minute=0;}
if(Keyno==3){minute--;if(minute==-1)minute=59;}
if(Keyno==1){STATE=3;flag=1;}
}
if(flag==2)
{TimeTab2[0]=Tab[h1/10];
TimeTab2[1]=Tab[h1%10];
TimeTab2[2]=Tab[m1/10];
TimeTab2[3]=Tab[m1%10];
}
if(flag==4)
{TimeTab[0]=0x00;
TimeTab[1]=0x00;
if(Keyno==1){STATE=7;}
break;
case 7: if(Keyno==2){m1++;if(m1==60)m1=0;}
if(Keyno==3){m1--;if(m1==-1)m1=59;}
if(Keyno==1){STATE=8;flag=0;}
break;
case 8:if(Keyno==4){STATE=9;flag=3;}
3.2
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
/******************定义管脚**********************/
sbit RELAY=P1^0;
sbit LED1=P1^1;
sbit LED2=P1^2;
char hour=12,minute=34,second=0,h=0,m=0,h1=0,m1=0;char second1;
char flag=0,flag1=0,flag2=0;
uchar Keyno=0;
uchar num=0,count=0;
uchar STATE=0;
/************************************************
{STATE=12;second1=30;}
if(second1==50&&STATE==12)
{STATE=10;second1=20;}
}
/******************************************************************/
家用多功能定时器的设计
专业年:电子信息工程
学 号:201130040307
学生姓名:廖义忠
指导教师:谢勇勤
报告完成日期2014年5月28日
第一章
1.1
1.1.1
单片机是将CPU、RAM\ROM\定时器/计数器以及输入输出(I/O)接口等计算机的主要部件集成在一块的集成电路芯片,作为微机系统它还可以实现模/数转换、脉宽调制、计数器捕获/比较逻辑、高速I/O口和WDT各种控制功能。
1.1.2
人类最早使用的定时工具是沙漏或水漏,但在钟表诞生发展成熟之后,人们开始尝试使用这种全新的计时工具来改进定时器,达到准确控制时间的目的。
1876年,英国外科医生索加取得一项定时装置的专利,用来控制煤气街灯的开关。它利用机械钟带动开关来控制煤气阀门。
定时器确实是一项了不起的发明,使相当多需要人控制时间的工作变得简单了许多,家用电器都安装了定时器来控制开关或工作时间。
break;
case 9:if(Keyno==5){STATE=10;second1=20;flag=4;}
if(Keyno==1){STATE=0;flag=0;}
break;
case 10:if(Keyno==1){STATE=0;flag=0;}
break;
case 11:if(Keyno==1){STATE=0;flag=0;}
时钟电路:给单片机一个时钟信号,让其工作。
复位电路:使单片机为初始状态,并从初态开始工作。
数码管:显示时间或者其它。
2.2 系统硬件单元电路设计
2.2.1 复位电路设计
复位操作有上电自动复位、按键电平复位和外部脉冲复位三钟方式,本次实验用的是按键电平复位,利用电容的充放电公式来选择所需的电容、电阻,能保证复位信号高电平持续时间大于2个机器周期。
2.2.4
实验中所用的数码管为共阴极数码管,当给其引脚加入高电平时,数码管中对应的那一段就亮。
2.3 系统硬件总电路
第三章
3.1 系统软件流程图
主程序在执行时,通过单片机内部中断对程序不断的扫描判断、刷新显示,当有键按下时,将数字钟中的时间与定时时间相比较,然后根据比较程序显示状态,并且还要延时消除抖动,之后进行按键处理,从而显示不同的状态,如此周期循环。
void SEG_Display(void)
{ if(flag==0)
P0=TimeTab[num];
if(flag==1)
{
P0=TimeTab1[num];}
if(flag==2)
{
P0=TimeTab2[num];}
if(flag==3)
{P0=0x49;}
if(flag==4)
{P0=TimeTab[num];}
}
/****************************红绿灯*******************************/
void hlhd(void)
{if(second1==50&&STATE==10)
{STATE=11;second1=45;}
if(second1==50&&STATE==11)
2.2.3
本课程设计要用数码管显示数字钟、定时时间。这就需要键盘来设定,键盘可以分为独立连接式和矩阵式。本实验用的是矩阵式。为了减少所以的I/O口,利用三——八译码器来实现12个键盘的连接。
对于这种矩阵式的键盘连接,扫描时依次将行线置为低电平,即在置某根行线为低电平时,其它都线为高电平。在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。注意在按键时一定要调延时子程序来消除抖动。
if(Keyno==1){STATE=5;flag=0;}
break;
case 5: if(Keyno==1){STATE=6;flag=2;}
break;
case 6:if(Keyno==2){h1++;if(h1==24)h1=0;}
if(Keyno==3){h1--;if(h1==-1)h1=23;}
uchar data TimeTab[6]={0x06,0x5b,0x4f,0x66};
uchar data Tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar data TimeTab1[4],TimeTab2[4];
/*****************定义参数及初始化********************/
break;
case 12:if(Keyno==1){STATE=0;flag=0;}
break;
default:break;
}
}
/******************************************************************/
/*数码管显示子程序*/
/******************************************************************/
/*刷新缓冲区子程序*/
/******************************************************************/
void RefreshTab(void)
{if(flag==0)
{TimeTab[0]=Tab[hour/10];
TimeTab[1]=Tab[hour%10];
break;
case 3: if(Keyno==2){h++;if(h==24)h=0;}
if(Keyno==3){h--;if(h==-1)h=23;}
if(Keyno==1){STATE=4;}
break;
case 4: if(Keyno==2){m++;if(m==60)m=0;}
if(Keyno==3){m--;if(m==-1)m=59;}
相关文档
最新文档