单片机多路定时器实验论文Word格式.docx
《单片机多路定时器实验论文Word格式.docx》由会员分享,可在线阅读,更多相关《单片机多路定时器实验论文Word格式.docx(19页珍藏版)》请在冰豆网上搜索。
在办公室中用作大量通信、信息的承载体,比如磁盘驱动、打印机、复印机、电话等;
它还可以来构成电子秤、收款机、仓储安全检测系统、空气调节系统等冷冻保鲜系统等的专用系统;
在工业中,像工业过程控制、过程监制以及机电一体化控制等系统都是以单片机为核心火多网络系统;
它还可以构成一些智能仪表与集成智能传感器传统的控制电路,实现一些像存储、数据处理、查找、判断、联网和语音功能等智能化功能,还可以构成一些电子系统中的集中显示系统、动力检测控制系统、自动驾驶系统、通信系统以及运行监视器等的冗余网络系统。
㈡课题设计的要求
这次课题,我们主要是完成单片机最小系统板设计与制作,然后再此基础上编程实现家用多路定时器,使该定时器还具有校准时间、至少可以三路定时开关控制,并且自定时间,还可以自主在其中加入其他功能,如日历、秒表、简易计算器等。
2.1系统总体设计框架结构
时钟电路用来计时,显示正确的时间,按键电路用来调整时间、控制数码管的显示和设置多路定时,复位电路用来将电路初始化,数码管显示时间,用led灯的变化来显示电路不同的状态和定时的效果。
2.2系统硬件单元电路设计
1.时钟电路设计
时钟电路由振荡器及定时发生器及地址锁存允许信号ALE组成。
所用的时钟电路用的是12Mhz的晶振,它的振荡周期约为0.0833µ
s,时钟周期是1/6µ
s,机器周期是1µ
s
2.复位电路设计
复位操作有上电自动复位、按键电平复位和外部脉冲三种复位方式,本次使用的是按键电平复位。
它是通过使复位端经电阻与Vcc电源接通而实现的,使用的电阻大小为10K,电容大小为10µ
f,能保证复位信号高电平持续时间大于2个机器周期。
3.按键电路设计
矩阵式键盘,当键位上有键压下时,产生中断请求,CPU响应中断,执行中断服务程序,判断键位上压下的键的键号,继而做出相应的处理。
4.数码管显示电路
显示块是由若干发光二极管组合而成的,一般的“8”字型显示块由a、b、c、d、e、f、g、h8个发光二极管组成,GND接1时均不亮,字位输出口和字形输出口采用高电压驱动。
2.3系统硬件总电路
第三章系统软件设计
3.1系统软件流程图
⒈定时部分的流程图
2.按键处理程序流程图
3.数码管显示程序流程图
3.2系统程序设计
1.系统主程序
voidmain(void)
{P1=0x00;
将P1接口初始化
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();
if(LEDS1)LED7=1;
到达定时时,LED7灯亮
elseLED7=0;
7灯熄灭
if(!
Line1||!
Line2){Delay(200);
Key_Process();
}
}
2.定时中断子程序
voidTimer0(void)interrupt1
{TH0=0x3C;
//重新赋值50ms溢TL0=0xB0;
count++;
if(count==10)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;
}}}}
voidTimer1(void)interrupt3
{TH1=0xFa;
//定时2ms显示下一个数码管
switch(num)
{case0:
P2=0x0f;
if(!
Line1)Keyno=1;
Line2)Keyno=6;
SEG_Display();
break;
case1:
P2=0x1f;
Line1)Keyno=4;
Line2)Keyno=5;
case2:
P2=0x2f;
Line1)Keyno=3;
Line2)Keyno=12;
case3:
P2=0x3f;
Line1)Keyno=7;
Line2)Keyno=8;
break;
case4:
P2=0x4f;
Line1)Keyno=2;
Line2)Keyno=9;
case5:
P2=0x5f;
Line1)Keyno=10;
Line2)Keyno=11;
default:
num++;
if(num==6)
num=0;
3.按键处理子程序
voidKey_Process(void)
{switch(STATE)
if(Keyno==1){STATE=1;
break;
case1:
if(Keyno==1)STATE=2;
按Shift后,跳到Case2执行程序
if(Keyno==4)STATE=4;
按Shift+4键后,跳到Case4执行程序
if(Keyno==5)STATE=8;
按Shift+5键后,跳到Case8执行程序
if(Keyno==6)STATE=12;
按Shift+6键后,跳到Case12执行程序
case2:
if(Keyno==2){hour++;
if(hour==24)hour=0;
}2键加时
if(Keyno==3){hour--;
if(hour==-1)hour=23;
}3键减时
if(Keyno==1){STATE=3;
}break;
Shift键跳到Case3执行程序
case3:
if(Keyno==2){minute++;
if(minute==60)minute=0;
}2键加分
if(Keyno==3){minute--;
if(minute==-1)minute=59;
}3键减分
if(Keyno==1){STATE=0;
Shift键回到初始状态
//第一路定时
case4:
if(Keyno==2){hour1++;
if(hour1==24)hour1=0;
}2键加时
if(Keyno==3){hour1--;
if(hour1==-1)hour1=23;
}3键减时
if(Keyno==1){STATE=5;
按Shift,跳到Case5执行程序
case5:
if(Keyno==2){minute1++;
if(minute1==60)minute1=0;
if(Keyno==3){minute1--;
if(minute1==-1)minute1=59;
if(Keyno==1){STATE=6;
按Shift,跳到Case5执行程序case6:
if(Keyno==2){hour2++;
if(hour2==24)hour2=0;
if(Keyno==3){hour2--;
if(hour2==-1)hour2=23;
if(Keyno==1){STATE=7;
按Shift,跳到Case7执行程序
case7:
if(Keyno==2){minute2++;
if(minute2==60)minute2=0;
if(Keyno==3){minute2--;
if(minute2==-1)minute2=59;
}3分减分
按Shift,回到初始状态
//第二路定时
case8:
if(Keyno==2){hour3++;
if(hour3==24)hour3=0;
if(Keyno==3){hour3--;
if(hour3==-1)hour3=23;
if(Keyno==1){STATE=9;
按Shift键,跳到case9
case9:
if(Keyno==2){minute3++;
if(minute3==60)minute3=0;
if(Keyno==3){minute3--;
if(minute3==-1)minute3=59;
if(Keyno==1){STATE=10;
按Shift键,跳到case10
case10:
if(Keyno==2){hour4++;
if(hour4==24)hour4=0;
if(Keyno==3){hour4--;
if(hour4==-1)hour4=23;
if(Keyno==1){STATE=11;
按Shift键,跳到case11
case11:
if(Keyno==2){minute4++;
if(minute4==60)minute4=0;
if(Keyno==3){minute4--;
if(minute4==-1)minute4=59;
按Shift键,恢复初始状态
//第三路定时
case12:
if(Keyno==2){hour5++;
if(hour5==24)hour5=0;
if(Keyno==3){hour5--;
if(hour5==-1)hour5=23;
}3键减时if(Keyno==1){STATE=13;
case13:
if(Keyno==2){minute5++;
if(minute5==60)minute5=0;
if(Keyno==3){minute5--;
if(minute5==-1)minute5=59;
if(Keyno==1){STATE=14;
按Shift键,跳到case14
case14:
if(Keyno==2){hour6++;
if(hour6==24)hour6=0;
if(Keyno==3){hour6--;
if(hour6==-1)hour6=23;
if(Keyno==1){STATE=15;
按Shift键,跳到case15
case15:
if(Keyno==2){minute6++;
if(minute6==60)minute6=0;
if(Keyno==3){minute6--;
if(minute6==-1)minute6=59;
按Shift键,恢复初始状态
default:
}}
4.数码管显示子程序
voidSEG_Display(void)
P0=TimeTab[num];
P0=SetTab[num];
第一路定时,设置初始时间
case6:
P0=EndTab[num];
第一路定时,设置终止时间
P0=SetTab[num+4];
第二路定时,设置初始时间
P0=EndTab[num+4];
第二路定时,设定终止时间
P0=SetTab[num+8];
第三路定时,设定起始时间
P0=EndTab[num+8];
第三路定时,设定终止时间
voidLED_Display(void)
LED2=0;
LED3=0;
LED4=0;
LED5=0;
LED6=0;
灯均不亮
LED2=1;
2灯亮
LED3=1;
2、3灯亮
LED4=1;
2、4灯亮
case4:
LED2=1;
LED5=1;
2、5灯亮
LED6=1;
2、6灯亮
case6:
LED3=1;
LED2=0;
3、4灯亮
case7:
3、5灯亮
3、6灯亮
case9:
LED4=1;
4、5灯亮
case10:
4、6灯亮
case11:
5、6灯亮
2、3、4灯亮
case13:
2、3、5灯亮
case14:
2、3、6灯亮
case15:
3、4、5灯亮
voidsettime(void)
{if(!
STATE)
{if(hour==hour1&
&
minute==minute1)LEDS1=1;
当到了所定时间,7灯亮
if(hour==hour2&
minute==minute2)
{RELAY=1;
LEDS1=0;
}到了指定时间,7灯灭
if(hour==hour3&
minute==minute3)LEDS1=1;
if(hour==hour4&
minute==minute4)
if(hour==hour5&
minute==minute5)LEDS1=1;
if(hour==hour6&
minute==minute6)
}
5.刷新缓冲区子程序
voidRefreshTab(void)
TimeTab[0]=Tab[hour/10];
TimeTab[1]=Tab[hour%10];
TimeTab[2]=Tab[minute/10];
TimeTab[3]=Tab[minute%10];
//第一路定时
SetTab[0]=Tab[hour1/10];
SetTab[1]=Tab[hour1%10];
SetTab[2]=Tab[minute1/10];
SetTab[3]=Tab[minute1%10];
EndTab[0]=Tab[hour2/10];
EndTab[1]=Tab[hour2%10];
EndTab[2]=Tab[minute2/10];
EndTab[3]=Tab[minute2%10];
//第二路定时
case8:
SetTab[4]=Tab[hour3/10];
SetTab[5]=Tab[hour3%10];
SetTab[6]=Tab[minute3/10];
SetTab[7]=Tab[minute3%10];
EndTab[4]=Tab[hour4/10];
EndTab[5]=Tab[hour4%10];
EndTab[6]=Tab[minute4/10];
EndTab[7]=Tab[minute4%10];
//第三路定时
SetTab[8]=Tab[hour5/10];
SetTab[9]=Tab[hour5%10];
SetTab[10]=Tab[minute5/10];
SetTab[11]=Tab[minute5%10];
EndTab[8]=Tab[hour6/10];
EndTab[9]=Tab[hour6%10];
EndTab[10]=Tab[minute6/10];
EndTab[11]=Tab[minute6%10];
第四章实验结果和分析
3.1实验使用的仪器设备
在实验中使用到了直流稳压电源和电脑,使用Keil.c编译程序,并将程序烧录到单片机中。
3.2测试结果分析
程序烧录到单片机中后,将其接到+5V左右的直流电源中,并开始按键实现时间控制或调整,设置多路定时时间,每路定时时间有起始时间和终止时间。
当设定好每路时间段后,按键恢复时钟状态并开始计时。
当到了指定的时间后,LED灯便会开始亮直至定时时间结束。
具体的显示情况如下表所示:
调整时间
状态
Led亮灯情况
实现功能
Case0
1灯闪烁
默认计时
Case1
Case2
2、3灯亮
2/3键加/减时
Case3
2/3键加/减分
第一路定时
Case4
设置起始时间2/3键加/减时
Case5
Case6
设置终止时间2/3键加/减分
Case7
第二路定时
Case8
Case9
Case10
设置起始时间2/3键加/减分
Case11
第三路定时
Case12
Case13
Case14
Case15