期末课题关于嵌入式设计洗衣机
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一.实验目的
1.回顾本学期所学的各模块作用,熟悉MT-IDE嵌入式开发系统的环境、汇编、C语言、调试方式。
2.设计较为完整的应用系统,其中至少包括三个模块(定时器、串行口、键盘、数码管、液晶显示、传感器模数转换、PWM等),进一步熟悉本学期所学的知识。
二.实验原理
随着人们生活水平的不断提高,自动洗衣机成为了我们在日常生活中不可或缺的一部分,他给我们带来方便的同时,也体现了高速发展社会的科学成果。我们本次大作业要模拟的就是洗衣机的洗衣自动计时功能。
1.设计初,设想自动洗衣机洗衣时限为60秒,每20秒有不同的灯亮着,
说明洗衣的程序正在运行;最后5秒蜂鸣声报警,提醒注意洗衣即将结束;
(具体效果如下图)
时间60—40秒40—20秒20—15秒5—0秒灯0 亮灭灭灭
灯1 灭亮灭灭
灯2 灭灭亮亮
蜂鸣不响不响不响响
2.并设置3个拨码开关,功能分别为:
开关1 暂停程序
开关2 开启程序
开关3 重启程序
操控洗衣的开启、暂停。
3、利用数码管来显示洗衣机剩余时间。
4、利用定时器输入捕捉来模拟计时。
5、多追加一个开关模拟在洗完后重洗,计时器回位到初始状态。
6、由于实验设备和我们设计的种种限制,不能像现实中一样做,我们只能通过预先设定好的定时器等模块共同工作大致模拟出洗衣机计时的工作原理。
三.实验设备及其连接
1.PC 机
一台 2.MT-IDE 嵌入式开发系统
一台
3. 导线 数根
4. 接线图(连接PWM1到蜂鸣器)
GND
拨码开关
导线接插点
PTA0 PTA1 PTA2 PTA3 PTA4 PTA5 PTA6 PTA7
PTA 口(KEY1-8)
导线接插点
Vcc
导线接插点
四.程序代码注释(摘选)
//主函数
int main()
{
DISABLE_INTERRUPTS; //禁止总中断 //1. 芯片初始化
MCUInit();
//2. 模块初始化
SCIInit(); //(1) 串行通信初始化
LEDInit(); //(2) LED控制引脚初始化
ICInit();
TimerInit();
//3. 内存初始化
//(1) LED显示缓存初始化为"0123"
LEDbuf[0] = '6';
LEDbuf[1] = '0';
//4. LED初始显示"0123"
LEDShow(LEDbuf);
//EnableT1OVInt;
//6. 开放总中断
ENABLE_INTERRUPTS;
time[0]=60;
DDRA=0xff;
//总循环
while (1)
{
LEDShow(LEDbuf);
if(time[0]>00&&time[0]<03)
{PWMSetting(0,255,100);
PWME |= 0x01; //允许通道0
Delay(5500); //延时
}
else if(time[0]==00)
{DisableT1OVInt;
PWMSetting(0,0,0);
PWME |= 0x01; //允许通道0
Delay(5500); //延时
}
}
}
ISR.C
void __attribute__ ((interrupt)) isrTimOver(void)
{
INT8U i;
DISABLE_INTERRUPTS; //关总中断
TimInterCount++; //中断次数加一,中断38次为一秒
if (TimInterCount == 19)
{
TimerUpDate(); //定时器更新
LEDbuf[1]=time[0]%10+'0';
LEDbuf[0]=time[0]/10+'0';
if(time[0]>40&&time[0]<60)
{
PTA=0xfb;
}
if(time[0]>20&&time[0]<40)
{
PTA=0xfd;
}
if(time[0]>0&&time[0]<20)
{
PTA=0xFe;//PTA<<1;
}
}
TFLG2 = 0x80; //清除定时器溢出标志位
ENABLE_INTERRUPTS; //开总中断
}
void __attribute__ ((interrupt)) ISR_TimerChan0(void)
{
DISABLE_INTERRUPTS;
PTA=0xfd;
Delay(1000);
time[0]=40;
TFLG1 |= (1< EnableT1OVInt; } void __attribute__ ((interrupt)) ISR_TimerChan1(void) { DISABLE_INTERRUPTS; PTA=0xFe; Delay(1000); time[0]=20; TFLG1 |= (1< EnableT1OVInt; } INT8U state; void __attribute__ ((interrupt)) ISR_TimerChan2(void) { DISABLE_INTERRUPTS; PTA=0xff; Delay(1000); TFLG1 |= (1< if(state==1) { state=0; DisableT1OVInt; } else { state=1; EnableT1OVInt; } } INT8U state; void __attribute__ ((interrupt)) ISR_TimerChan3(void) { DISABLE_INTERRUPTS; PTA=0xff; Delay(1000); EnableT1OVInt; TFLG1 |= (1< if(state==1) { state=0;