




已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机原理及应用课程设计说明书题目学校作息时间控制系统的设计系(部)专业(班级)姓名学号指导教师起止日期 系部:电信系 专业:2011级电子信息工程课题名称学校作息时间控制系统的设计设计内容及要求(1)课题内容:以单片机为核心,设计一个智能化作息时间控制器。该控制器要求的功能有:按本校作息时间接通/断开蜂鸣器,每次响铃时间为10 秒;用12864 液晶屏作显示器,第一行显示“作息时间控制系统”,第二行显示设计者姓名和学号,第三行显示实时时钟,显示的内容要求有时、分、秒各两位,第四行显示最近的闹铃时间。发挥部分:设置按键对小时和分钟调节;可以通过键盘任意调整响铃时间。(2)要求:完成该系统的硬件和软件的设计,在Proteus 软件上仿真通过后,提交一篇课程设计说明设计工作量1、汇编或C51语言程序设计;2、程序调试;3、在Proteus 上进行仿真成功后,进行实验板下载调试;4、提交一份完整的课程设计说明书,包括设计原理、程序设计、程序分析、仿真分析、调试过程,参考文献、设计总结等。进度安排起止日期设计内容(或预期目标)备注第一天课题介绍,答疑,收集材料,C51介绍第二天设计方案论证,练习编写C51程序第三天第六天程序设计第六天第八天程序调试、仿真第九天第十天系统测试并编写设计说明书教研室意见 年 月 日系(部)主管领导意见 年 月 日目录程序4一、设计内容及要求131.1 设计内容131.2 设计要求13二、设计目的13三、设计原理133.1 总的设计133.2 分模块设计133.3 设计示意图14四、仿真分析144.1 调节工作模式154.2 闹钟实现154.3 温度测量16五、心得体会17六、参考文献17程序#include reg52.h #include #define uchar unsigned char #define uint unsigned int #define IO_ADDR P2 #define delayNOP(); _nop_();_nop_();_nop_();_nop_(); sbit RS=P10; sbit RW=P11; sbit EN=P12; sbit RST=P13; sbit PSB=P15; sbit mode=P00;/key1模式 sbit inc=P01;/kye2分 sbit dec=P02;/key3 时 sbit fmq=P34;/蜂鸣器接口/= code uchar data116=作息时间控制系统; code uchar data2=吴智勇 2011026103; code uchar data3=时间: : : ; code uchar data4=打铃: : : ; uchar disp_buff416;/定义一个二维数组,4行,16个字符 uchar hour,min,sec,minisec; uchar mode_value=0 ,xf; /调节模式 uchar ds202 = 8,0,8,45,8,55,9,40,10,0,10,45,10,55,11,40,14,0,14,45,14,55,15,40,16,0,16,45,16,55,17,40,19,0,19,45,19,55,20,40;/=/*/void delay(int ms) while(ms-) uchar i; for(i=0;i250;i+) _nop_(); _nop_();_nop_();_nop_(); /=void delayus(uint i) uchar y; while(-i) for(y=0;y2;y+) ; /=uchar read_data(void)/读状态。/返回值1-空。0-忙。 uchar temp; RS=0; RW=1; delayus(2); EN=1; delayNOP(); IO_ADDR=0XFF; temp=IO_ADDR;/读输入口。 temp=temp&0x80; EN=0; if(temp=0x00) return(0); else return(1);/注:如需软件仿真,需要将此处改为1/=void write_data(uchar type,uchar date)/写命令或写数据。 while(read_data(); /delayus(100); if(type)/写数据1 RS=1; else/0/写命令 RS=0; delayus(1);/1。5US RW=0; delayus(1);/1。5US EN=0; delayus(1); delayus(1); delayus(1); IO_ADDR=date; delayNOP(); EN=1; delayNOP(); EN=0; delayus(10);/* void init_system()/12864初始化部分。 PSB=1; RST=1; delayus(4); RST=0; delay(3); RST=1; delay(3); write_data(0,0x30);/功能设定,8位并行接口 delay(5); write_data(0,0x30);/功能设定,基本指令集。 delay(5); write_data(0,0x30);/功能设定,8位并行接口 delay(5); write_data(0,0x01);/清屏, delay(5); write_data(0,0x01);/清屏, delay(5); write_data(0,0x02);/将地址指针移到开头位置。 write_data(0,0x0c);/整体显示开。 write_data(0,0x01);/清屏, write_data(0,0x01);/清屏,/= /=void display_buff()/显示2维数组内的内容。 uchar i; uchar *point; point=&disp_buff00; /write_data(0,0x01);/清屏, /delayus(5); /write_data(0,0x02);/地址归0 /delayus(10); /write_data(0,0x06);/地址归0 /一行一行的显示/ /行地址:0X80 0X90 0X88 0X98 write_data(0,0X80);/移到0X80位置。 delayus(1); for(i=0;i16;i+) write_data(1,*point); point+; delayus(1); /=/= write_data(0,0X90); delayus(1); for(i=0;i16;i+) write_data(1,disp_buff1i); delayus(1); write_data(0,0X88); for(i=0;i16;i+) write_data(1,disp_buff2i); delayus(1); write_data(0,0X98); for(i=0;i20) minisec=0;if(+sec59) sec=0; if(+min59) min=0; if(+hour24) hour=0;min=0; sec=0; void delaysj(unsigned char j)/延时程序unsigned char i;while(j-)for(i=0;i50;i+); /蜂鸣器 void s_fmq()unsigned char j=2; /蜂鸣器叫while(j-)fmq=0;delaysj(200);/*闹铃判断*/void nling() uchar i ; for(i=0;i20;i+) if(hour=dsi0&min=dsi1) /判断是否到闹铃时间 if(sec10) s_fmq(); /调用蜂铃 /调节模块 void tiaojie() uchar i;if(mode=0)while(!mode);mode_value+;/zifu(0xbc,0xb8,2,mode_value,&shu); switch(mode_value) /模式0:正常工作。显示“天天向上”case 0:/uchar i; for(i=0;i16;i+) disp_buff0i=data1i; disp_buff1i=data2i; break ;case 1: / 模式1:可以修改时间,其中inc是改分钟,dec是改小时if(inc=0) while(!inc);min+;if(min=60) min=0;if(dec=0) while(!dec);if(min=0) min=60; min-;/if(dec=0) while(!dec);hour+; if(hour=24) hour=0;/uchar i; for(i=0;i16;i+) disp_buff2i=data3i; disp_buff25=(hour/10)+0x30; disp_buff26=(hour%10)+0x30; disp_buff28=(min/10)+0x30; disp_buff29=(min%10)+0x30; disp_buff211=(sec/10)+0x30; disp_buff212=(sec%10)+0x30; display_buff(); ;break;case 2:if(inc=0) while(!inc);hour+;if(hour=24) hour=0; /模式2:选择一个需要改变的闹铃/if(inc=0) while(!inc);min+;if(min=60) min=0;if(dec=0) while(!dec);if(hour=0) hour=24;hour-; /uchar i; for(i=0;i16;i+) disp_buff2i=data3i; disp_buff25=(hour/10)+0x30; disp_buff26=(hour%10)+0x30; disp_buff28=(min/10)+0x30; disp_buff29=(min%10)+0x30; disp_buff211=(sec/10)+0x30; disp_buff212=(sec%10)+0x30; display_buff();/zifu(0xbe,0x40,2,xf/10,&shu);/zifu(0xbe,0x48,2,xf%10,&shu);/zifu(0xbe,0x68,2,2,&fuhao); /zifu(0xbe,0x70,2,dsxf1/10,&shu);/zifu(0xbe,0x78,2,dsxf1%10,&shu);/zifu(0xbe,0x50,2,0,&fuhao);/zifu(0xbe,0x58,2,dsxf0/10,&shu);/显示“调整后的闹铃时间”/zifu(0xbe,0x60,2,dsxf0%10,&shu); ;break;case 3: / 模式3:修改选定的闹铃的分钟if(inc=0) while(!inc);dsxf1+;if(dsxf1=60) dsxf1=0;if(dec=0) while(!dec);if(dsxf1=0) dsxf1=60;dsxf1-; /uchar i; for(i=0;i16;i+) disp_buff3i=data4i; disp_buff35=dsxf0/10+0x30; disp_buff36=dsxf0%10+0x30; disp_buff38=dsxf1/10+0x30; disp_buff39=dsxf1%10+0x30; disp_buff311=0+0x30; disp_buff312=0+0x30; display_buff();/显示“调整后的闹铃时间” ;break ;case 4: / 模式4:修改选定的闹铃的小时 if(inc=0) while(!inc);dsxf0+;if(dsxf0=24) dsxf0=0; if(dec=0) while(!dec);dsxf0-; if(dsxf0=0) dsxf0=23; /uchar i; /for(i=0;i16;i+) / / disp_buff3i=data4i; / disp_buff35=dsxf0/10+0x30; disp_buff36=dsxf0%10+0x30; disp_buff38=dsxf1/10+0x30; disp_buff39=dsxf1%10+0x30; disp_buff311=0+0x30; disp_buff312=0+0x30; display_buff();/ hanzi(0xbe,0x40,2,2,&zi); / 显示“时”/ zifu(0xbe,0x58,2,dsxf0/10,&shu);/显示“调整后的闹铃时间”/ zifu(0xbe,0x60,2,dsxf0%10,&shu);/ zifu(0xbe,0x68,2,2,&fuhao); / zifu(0xbe,0x70,2,dsxf1/10,&shu);/ zifu(0xbe,0x78,2,dsxf1%10,&shu); ;break;case 5: mode_value=0 ;break;/模式5:确认修改,返回正常工作状态default:break;/从打铃时间表中找出下一个要打铃的时间uchar Locate (void) /uchar xf;/n; xf=0; while(xf20) if(hourdsxf0) break; else if(hour=dsxf0)&(min=dsxf1) break; xf+; /n+; if(xf=20) xf=0;/xf=0; return(xf); void shizhong() uchar i; for(i=0;i16;i+) disp_buff0i=data1i; disp_buff1i=data2i; disp_buff2i=data3i; disp_buff3i=data4i; disp_buff25=(hour/10)+0x30; disp_buff26=(hour%10)+0x30; disp_buff28=(min/10)+0x30; disp_buff29=(min%10)+0x30; disp_buff211=(sec/10)+0x30; disp_buff212=(sec%10)+0x30; /闹铃 disp_buff35=dsxf0/10+0x30; disp_buff36=dsxf0%10+0x30; disp_buff38=dsxf1/10+0x30; disp_buff39=dsxf1%10+0x30; disp_buff311=0+0x30; disp_buff312=0+0x30; display_buff();/*/* */* 延时函数 */* /= */* void main(void) P0=0XFF; P2=0XFF; EA=1; ET0=1; TH0=0X4C; TL0=0X00; TMOD=0X01; TR0=1; init_system(); while(1) tiaojie(); shizhong(); nling(); Locate (); /s_fmq(); 一、设计内容及要求1.1 设计内容 以单片机为核心,设计一个智能化作息时间控制器。该控制器要求功能有:按本校作息时间接通/断开蜂鸣器,每次响铃时间为10秒;用12864液晶屏作显示器,第一行显示“作息时间控制系统”,第二行显示设计者姓名和学号,第三行显示实时时钟,显示的内容有时、分、秒各两位,第四行显示最近的闹钟时间。 发挥部分:设计按键对小时和分钟调节;可以通过键盘任意调整闹铃时间。 1.2 设计要求 完成该系统的硬件和软件的设计,在Proteus软件上仿真通过后,提交一篇课程设计说明书。采用汇编或者C51语言程序设计均可。二、设计目的 通过这次课程设计培养同学的独立思考和独立操作能力,更深层次的了解自己的专业和身边一些电子系统的简单设计。三、设计原理3.1 总的设计首先对设计要求有个整体了解,明白需要实现哪些功能,实现这些功能需要哪些元器件,要驱动这些元器件需要编写什么程序,怎么编写,最后进行总体调试。本次作息时间的设计,使用了单片机AT89C51,LCD和AMPIRE12864。温度元件为DS18B20,还有一个声音播放器SOUNDER。对于LCD和DS18B20要进行初始化。将本次设计分成5个模块分别进行设计,分成:温度模块、LCD显示模块、时间模块、声音模块、调节模块。分模块设计好了以后,再综合起来设计主程序,实现所需要求。3.2 分模块设计1. LCD显示模块设计:该模块包括的函数为LCD-inti()/的初始化、checkbusy()/检查LCD是 否忙碌、writecode()/写命令、writedata()/写数据、hanzi()/显示汉字、zifuz()/显示数字或字符。 2.温度模块设计:该函数为inti()/DS18B20的初始化、readchar()/读一个字节、writechar()/写一个字节、readtemp()/读取温度、worktemp()/温度计算。 3.时间模块设计:本次是采用T0中断的工作方式1获取时间的。其函数为void timer()interrupt1/T0中断函数、workhour()/时间计算。 4.声音模块设计:该模块比较简单,其函数为voids_fmq()/蜂鸣器叫、nling()/判断是否闹铃。 5.调节模块设计:该模块要实现5个模式调节和转变。模式0:正常工作状态;模式1:修改时间;模式2:选择一个需要改变的闹钟;模式3修改选定的闹钟分钟;模式4:修改选定的闹钟小时。3.3 设计示意图图1 总设计示意图四、仿真分析 通过设计程序实现课程设计要求,通过仿真验证程序是否正确,仿真所用到的元器件有AT89C51、LCD液晶屏、三个独立按键、一个发声装置、8个电阻。仿真图如图2所示:图2 仿真电路图 4.1 调节工作模式 调节模式的实现只用了三个按键,分别是mode、inc和dec按钮。如图三所示:图3 三个调节按键 开始仿真时,进入设定好的模式0,此时液晶显示屏显示的是初始值,然后按下mode按键,则进入模式1:进入修改时间,即设定闹钟时间。此时修改分钟按INC按键,修改小时按DEC按键,再次按下mode按键,则进入模式2:选择要修改的闹铃。此时液晶显示的第二个闹铃,可以按下inc按键加,也可以按下dec按键减。再次按下mode按键,则进入模式3:修改选定的闹钟分钟。此时修改的是闹钟的分钟,inc按键加,、dec按键减。再次按下mode按键,则进入模式4:修改选定的闹钟小时,inc加,dec按键减。再次按下mode按键。则回到模式0:正常工作。 4.2 闹钟实现 程序初始化的时候对10个闹钟进行了赋值,闹钟时间自己设定,我设定的分别是8:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 冬眠疗法考试题及答案
- 电子直播考试题及答案
- (正式版)DB15∕T 3232-2023 《饲用燕麦复种苜蓿高效栽培技术规程》
- 健康安全管理制度实施承诺书(3篇)
- 护理专业订单式考试题库及答案
- 湖南护理学初级考试题库及答案
- 商务合同谈判记录与合同评审表
- 大学宪法考试题及答案
- 调味品购销协议
- 行政办公文档格式及排版标准
- 班级管理中的心理学(合集7篇)
- 社区工作-徐永祥-高教出版社-全要点课件
- 肉制品工艺学-香肠类制品-课件
- 敬畏规则行有所止生命教育主题班会
- 哮病(支气管哮喘急性发作)中医护理方案
- 中小企业员工离职原因分析与对策研究
- GB/T 9728-2007化学试剂硫酸盐测定通用方法
- GB/T 2992.1-2011耐火砖形状尺寸第1部分:通用砖
- 神经系统的分级调节课件 【知识精讲+备课精研+高效课堂】 高二上学期生物人教版选择性必修1
- 三年级上册数学试卷-第一单元 混合运算 北师大版 (含答案)
- 教学课件-英语学术论文写作(第二版)
评论
0/150
提交评论