


版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、一、课程设计基本情况介绍1.1课程设计的基本目的与任务本课程设计旨在驾驭本专业学生理论指导实践能力以及电子产品工程设计与开发能力。 本实践课所要达到的主要目的是:1、通过本次课程设计,是对学生综合能力的检,提高学生综合运用专业知识,强化单片机 应用系统设计与防震能力。2、 本次课程设计是在生产实习所完成的“单片机核心板+电子钟模块+MP3模块+RFID模 块+无线传输模块+GPS模块+脉搏传感模块”的基础上设计该硬件系统的工作程序。1.2课程设计的基本内容1、在生产实习设计单片机硬件系统的基础上,设计相应的应用软件系统。2、在LCD1602上显示学号程序设计。3、基于DS1302的实时时钟软件
2、设计。4、基于DS18B20的温度测量软件设计。5、基于TL1838A的红外遥控解码软件设计。6、设计应用软件系统框图和流程图,完成所设计软件的调试。1.3课程设计的教学要求1、通过资料查阅及学习了解单片机应用系统的软件设计方法及单片机编程、软硬件联机调试技巧。2、独立设计并编写下列应用程序:(1)LCD1602学号显示程序;(2)DS1302实时时钟程序;(3)DS18B20温度测量程序;(4)TL1838A红外遥控解码程序;3、独立完成所设计程序与硬件系统的联机仿真。二、整机系统框图(硬件、软件)该设计方案是以 STC12C5A60S2单片机为核心,采用 LCD液晶屏幕显示模块、实时时 钟
3、模块、温度测量模块、红外遥控解码等模块所构建的系统,能在LCD1602液晶屏上显示当前的日期(年、月、日)、时间(时、分、秒)数据、当前环境温度值和红外遥控解码值。 用户可通过遥控器或单片机核心板上的按键来进行日期和时间的设置。本系统设计大部分功能由软件来实现,电路简单明了,系统稳定性也得到大大提高。1、总体硬件设计框架图:总粹哽件说计眶架田2、总体软件设计框架图/三、整机硬件电路原理图(见 99SE图)1、核心板电路原理图2、蜂鸣器驱动电路3、按键电路4、单片机复位电路5、LCD1602液晶显示电路6、电子钟模块接口电路四、软件系统设计思想/五、系统软件资源分配表(调试程序、工作程序)/六、
4、显示学号的调试程序流程图、程序源代码1、程序流程图 /2、程序源代码* *LCD1602 *#include<reg51.h>#include<intrins.h>sbit RS=P3A7; sbit RW=P3A6;sbit E=P2A7;sbit BF=P0A7;#define LCD_Data P0*函数声明 *void Lcd_Int(void);void huanying_show(void);void dongtai_show(void);char string1=" LIU JING"/LIU JINGchar string2=&quo
5、t;080104020013 "/080104020013*函数功能:主函数 *void main()Lcd_Int(); /1602 初始化 while(1) huanying_show(); dongtai_show(); *函数功能:延时 1ms注:不同单片机不同晶振需要对此函数进行修改* void Lcd_delay1ms()unsigned char i,j;for(i=0;i<90;i+)for(j=0;j<33;j+);/* 函数功能:延时若干毫秒 入口参数: n*/ void Lcd_delay(unsigned int n) unsigned int i
6、; for(i=0;i<n;i+) Lcd_delay1ms(); /* 函数功能:判断液晶模块的忙碌状态 返回值:result。result=1,忙碌;result=O,不忙 */ bit Lcd_BusyTest(void)bit result;RS=0;/根据规定,RS为低电平,RW为高电平时,可以读状态RW=1;E=1;/E=1 ,才允许读写_nop_(); / 空操作_nop_();_nop_();_nop_(); / 空操作四个机器周期,给硬件反应时间result=BF; / 将忙碌标志电平赋给 result E=0;return result;/*函数功能:将模式设置指令或
7、显示地址写入液晶模块入口参数: dictate */ void Lcd_WriteCom(unsigned char dictate) while(Lcd_BusyTest()=1); / 忙就等待RS=O; /根据规定,RS和RW同时为低电平时,可以写入指令RW=0;E=0;/E置低电平(写指令时,就是让 E从0到1发生正跳变,所以应先置"0"_nop_();_nop_(); / 空操作两个机器周期,给硬件反应时间LCD_Data=dictate;_nop_();_nop_();_nop_();_nop_(); / 空操作四个机器周期,给硬件反应时间E=1;/E 置高电平
8、_nop_();_nop_();_nop_();_nop_(); / 空操作四个机器周期,给硬件反应时间E=0;/ 当 E 由高电平跳变成低电平时,液晶模块开始执行命令 /* 函数功能:指定字符显示的实际地址 入口参数: x注:此函数已经加上了0x80,故只需写上实际地址就行*/ void Lcd_WriteAddress(unsigned char x)Lcd_WriteCom(x|0x80); / 显示位置的确定方法规定为 "80H+ 地址码 x" /* 函数功能:将数据(字符的标准 ASCII 码)写入液晶模块 入口参数: y (为字符常量)*/void Lcd_Wr
9、iteData(unsigned char y) while(Lcd_BusyTest()=1);RS=1; /RS为高电平,RW为低电平时,可以写入数据RW=0;E=0;/E置低电平(写指令时,就是让 E从0到1发生正跳变,所以应先置"0"LCD_Data=y; / 将数据送入 P0 口,即将数据写入液晶模块_nop_();_nop_();_nop_();_nop_(); / 空操作四个机器周期,给硬件反应时间E=1;/E 置高电平_nop_();_nop_();_nop_();_nop_(); / 空操作四个机器周期,给硬件反应时间E=0;/ 当 E 由高电平跳变成低电
10、平时,液晶模块开始执行命令/* 函数功能:对 LCD 的显示模式进行初始化设置 */ void Lcd_Int(void)Lcd_delay(15); /延时15ms,首次写指令时应给 LCD 段较长的反应时间Lcd_WriteCom(0x38);/ 显示模式设置: 1 6*2显示, 5*7 点阵, 8位数据接口 Lcd_delay(5); / 延时 5msLcd_WriteCom(0x38);Lcd_delay(5);Lcd_WriteCom(0x38); /3 次写设置模式Lcd_delay(5);Lcd_WriteCom(0x0C); / 显示模式设置:显示开,有光标,光标不闪烁 Lcd
11、_delay(5);Lcd_WriteCom(0x06); / 显示模式设置:光标右移,字符不移Lcd_delay(5);Lcd_WriteCom(0x01); / 清屏幕指令,将以前的显示内容清除 Lcd_delay(5); /*函数功能: LCD 的显示 */void huanying_show(void)unsigned int Lcd_i;Lcd_WriteCom(0x01); / 清显示:清屏幕指令 Lcd_delay(1);Lcd_WriteAddress(0x00); / 设置显示位置为第一行的第 1 个字 Lcd_delay(1);for(Lcd_i=0;Lcd_i<16
12、;Lcd_i+) / 显示字符 LIU JING Lcd_WriteData(string1Lcd_i);Lcd_delay(150); Lcd_WriteAddress(0x40); / 设置显示位置为第二行的第 1 个字 for(Lcd_i=0;Lcd_i<16;Lcd_i+) / 显示字符 080104020013 Lcd_WriteData(string2Lcd_i);Lcd_delay(150); Lcd_delay(1000);/ 右侧移位进来void dongtai_show(void)unsigned int Lcd_i;Lcd_WriteCom(0x01); / 清显示
13、:清屏幕指令 Lcd_delay(2);Lcd_WriteAddress(0x10); / 设置显示位置为最右侧Lcd_delay(2); for(Lcd_i=0;Lcd_i<16;Lcd_i+) / 显示字符 LIU JING Lcd_WriteData(string1Lcd_i); Lcd_delay(2); Lcd_WriteAddress(0x50); / 设置显示位置为最右侧 for(Lcd_i=0;Lcd_i<16;Lcd_i+)/ 显示字符 080104020013 Lcd_WriteData(string2Lcd_i);Lcd_delay(2); for(Lcd_i
14、=0;Lcd_i<16;Lcd_i+) / 开始左移 Lcd_WriteCom(0x18); / 左移指令 Lcd_delay(400); Lcd_delay(1000);Lcd_WriteCom(0x08);Lcd_delay(400);Lcd_WriteCom(0x0c);Lcd_delay(400);Lcd_WriteCom(0x08);Lcd_delay(400);Lcd_WriteCom(0x0c);Lcd_delay(400);Lcd_WriteCom(0x08);Lcd_delay(400);Lcd_WriteCom(0x0c);Lcd_delay(400);Lcd_Wri
15、teCom(0x08);Lcd_delay(400);Lcd_WriteCom(0x0c);Lcd_delay(1);程序的流程图、程序源代码显示驱动(DS1302) 、实时时钟、温度测童 一)流程图Lcd_deiayd 躋 七时钟电路(DS1J02)主控电路SK12C5A6D521); /60S2时钟电路 DS1302、显示电1、实时时钟模块图为电子时钟设计框图,系统由主控制制LCDSTC12C5A 路LCD1602及键扫描电路组成。数据驱动LED数码管显示时间。图电子时钟设计框图STC12C5A60S2单片机主要 I/O 口的分配,P1.4、P1.5、P1.6分别接 DS1302 的 SC
16、LK,MCUIO, RST 端,P0 口接 LCD1602 八位数据口, P2.7、P3.6、P3.7 分别接 LCD1602 的 E、RW、RS 端,分别接按键K1-K4.下图为电子时钟程序设计流程图。图电子时钟程序设计流程图2、温度测量模块温度测量程序主要包括主程序,读出温度子程序, 温度转换子程序,计算温度子程序,显示数据子程序等。主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量的当前温度值,温度测量每1s进行一次。这样可以在一秒之内测量一次被测温度,其系统程序流程见图所示。图温度测量主程序流程图图读温度流程图3、红外遥控解码模块(1)遥控器发射端程序流程图:逐厅扫描
17、按卩门值査键号匸戶序斤升女台_I±_- - Ft电月打 耳-Y扌老辰裁彳氐半平月氷沖十蚁一丄一* ij H=*t * I3tJv ' -_>3 MS*d层列台巨松序 , 1 | +断血g(二)程序源代码1、实时时钟模块/*DS1302寸寸钟显示程序 */#in clude<reg51.h>#in clude< intrin s.h>#i nclude<LCD1602.h>/DS1302时钟控制总线/DS1302数据传送总线 /DS1302复位总线/移位时的第0位/移位时的第7位#defi ne uint un sig ned int#
18、defi ne uchar un sig ned char/变量定义sbit SCLK=P1A4;sbit DATA_IO=P1A5;sbit RESeT=P"6;sbit ACC0=ACCA0;sbit ACC7=ACCA7;uchar table116;uchar table216;uchar sec ond,minu te,hour,day, mon th,year; 定义秒分时日月年变量/*DSi302 时寸钟部分子程序 */向DS1302写入一个字节的函数 void Sen tByte(uchar byte)uchar i;ACC=byte;for(i=8;i>0;i
19、-) /相当于汇编中的 RRC DATA_IO=ACC0;/将自己的最低位传到时钟的数据总线上SCLK=1;/时钟上升沿发送数据有效SCLK=0;/清时钟总线ACC=ACC>>1;/将累加器中的数据右移1位/从DS1302读取一个字节函数uchar ReceiveByte(void) uchar i;for(i=8;i>0;i-) /相当于汇编中的 RRC ACC=ACC>>1;/将累加器中的数据右移1位ACC7=DATA_IO;/ 将数据线上的1位数据存入累加器中SCLK=1;/时钟上升沿发送数据有效SCLK=0;/清时钟总线return(ACC);/ 函数最终
20、返回读取的 1 字节数据Data要写的/ 向 DS1302 的某个地址里写入数据函数void WriteClock(uchar Address,uchar Data)/Address: 要写入数据的 DS1302 地址; 数据RESET=0;/ 复位引脚为低电平所有数据传送中止SCLK=0;/ 清时钟总线RESET=1;/ 复位引脚为高电平逻辑控制有效delay(10);SentByte(Address);/ 写入地址命令SentByte(Data);/ 写入 1 字节数据SCLK=1;/ 时钟总线置高RESET=0;/ 逻辑操作完毕,清复位总线/ 读取 DS1302 某地址的数据uchar
21、ReadClock(uchar Address)/Address:要读取数据的 DS1302 地址uchar Data;/ 定义数据变量RESET=0;/ 复位引脚为低电平所有数据传送终止SCLK=0;/ 清时钟总线RESET=1;/ 复位引脚为高电平逻辑控制有效delay(1);SentByte(Address|0X01);/ 写入地址命令,读取地址为写入地址 +1HData=ReceiveByte();/ 读取 1 字节数据SCLK=1;/ 时钟总线置高RESET=0;/ 逻辑操作完毕,清复位总线return(Data);/ 返回读取的数据/ 时钟芯片初始化函数void Init_Cloc
22、k(void)uchar Seco nd=ReadClock(0x81); 读取秒数据if(Second&0x80)/ 判断时钟芯片是否关闭 WriteClock(0x8e,0x00);/ 写入允许WriteClock(0x8c,0x11); 一下写入初始化时间11 年 11 月 25 日 15: 05: 00WriteClock(0x88,0x11);WriteClock(0x86,0x25);WriteClock(0x84,0x15);WriteClock(0x82,0x05);WriteClock(0x80,0x00);WriteClock(0x8e,0x80);/ 禁止写入vo
23、id Read_Date(void)uchar ReadValue;/ 定义变量BCD 码转BCD 码转BCD 码转换BCD 码转换ReadValue=ReadClock(0x81);second=(ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);/ 将读取的秒数据的 换成十进制数据ReadValue=ReadClock(0x83);if (ReadValue>0x60)ReadValue=ReadClock(0x83); minute=(ReadValue&0x70)>>4)*10 + (ReadVal
24、ue&0x0F); / 将读取的分数据的 换成十进制数据ReadValue=ReadClock(0x85);if (ReadValue>0x24)ReadValue=ReadClock(0x85);hour=(ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); / 将读取的时数据的 成十进制数据ReadValue=ReadClock(0x87);day=(ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); /将读取的日数据的成十进制数据BCD 码转BCD 码
25、转ReadValue=ReadClock(0x89);month=(ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); / 将读取的月数据的 换成十进制数据ReadValue=ReadClock(0x8d);year=(ReadValue&0xf0)>>4)*10 + (ReadValue&0x0F); / 将读取的年数据的 换成十进制数据table10='D'table11='a'table12='t'table13='a'table14=
26、':'table15='2'table16='0'table17=0x30+year/10;table18=0x30+year%10;table19='-'table110=0x30+month/10;table111=0x30+month%10;table112='-'table113=0x30+day/10;table114=0x30+day%10;table115=' 'table20=' 'table21=' 'table22=' 'table
27、23=' 'table24=0x30+hour/10;table25=0x30+hour%10;table26=':'table27=0x30+minute/10;table28=0x30+minute%10;table29=':'table210=0x30+second/10;table211=0x30+second%10;table212=' 'table213=' 'table214=' 'table215=' '/ 时钟显示函数void show_Data()uint i;L
28、cd_WriteAddress(0x00); / 设置显示位置为第一行的第 1 个字 for(i=0;i<16;i+) / 显示字符 Lcd_WriteData(table1i);delay(10); Lcd_WriteAddress(0x40); / 设置显示位置为第二行的第 1 个字 for(i=0;i<16;i+)/ 显示字符 Lcd_WriteData(table2i);delay(10); void main() Lcd_Int(); /1602 初始化 huanying_show(); Lcd_WriteCom(0x01); Init_Clock(); / 将 1302
29、 初始化 while(1) Read_Date();show_Data();*2、温度测量模块/*DS18B29 温度显示程序#include<reg51.h>#include<intrins.h>#include<LCD1602.H> #define uchar unsigned char#define uint unsigned intsbit DQ=P1A7;/DS18B20 与单片机连接口unsigned char a,b;uint tvalue;/ 温度值uchar disdata12;void delay_18B20(unsigned int i
30、)/ 延时 1 微秒while(i-);_nop_();_nop_();void delay1ms(uint m)/ 延时 m 毫秒while(m-)delay_18B20(1000);void DS18B20rst()/*ds18b20 复位*/ DQ = 1;/DQ 复位delay_18B20(10); / 延时 DQ = 0;/DQ 拉低delay_18B20(600);DQ = 1;/ 拉高_nop_();_nop_();while(DQ);_nop_();_nop_();while(DQ);_nop_();uchar DS18B20rd()/* 读数据 */ unsigned cha
31、r i;unsigned char dat;DQ = 1;for (i=8;i>0;i-)dat>>=1;DQ = 0; / 给脉冲信号_nop_();_nop_();_nop_();_nop_();DQ = 1; / 给脉冲信号delay_18B20(5);if(DQ)dat|=0x80;delay_18B20(50); return(dat);void DS18B20wr(uchar wdata)/* 写数据 */ unsigned char d;int i;DQ = 1;for (i=8; i>0; i-) d=wdata&0x01;wdata>&g
32、t;=1;if(d)DQ = 0;delay_18B20(2);DQ=1;delay_18B20(60); elseDQ=0;delay_18B20(60);DQ=1;_nop_();_nop_(); read_temp()/* 读取温度值并转换 */ DS18B20rst();DS18B20wr(0xcc);/* 跳过读序列号 */DS18B20wr(0x44);/* 启动温度转换 */delay1ms(30);DS18B20rst();DS18B20wr(0xcc);/* 跳过读序列号 */DS18B20wr(0xbe);/* 读取温度 */a=DS18B20rd();b=DS18B20r
33、d();tvalue=b;tvalue=tvalue<<8;tvalue=tvalue|a;if(tvalue&0x8000)tvalue=tvalue+1;tvalue=tvalue*(0.625);return(tvalue);void DS18B20disp()/ 温度值显示 uint i;disdata0='T'disdata1='e'disdata2='m'disdata3='p'disdata4='t'disdata5=':'disdata6=(int)tvalue/1000+0x30;/ 百位数 disdata7=(int)(tvalue%1000)/100+0x30;/ 十位数 disdata8=(int)(tvalue%100)/10+0x30;/ 个位数 disdata9='.'1 个字disdata10=(int)tvalue%10+0x30;/ 小数位 disdata11='C'Lcd_WriteAddress(0x40); / 设置显示位置为第二行的第 for(i=0;i<12;i+) / 显示字符 Lcd_WriteData(disdatai);delay(100); void initLC
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 桁架搭建合同协议书范本
- 【正版授权】 IEC 60335-2-50:2021/AMD1:2025 EN-FR Amendment 1 - Household and similar electrical appliances - Safety - Part 2-50: Particular requirements for commercial electric bains-mar
- 重庆甘頔课件
- 图形的轴对称A(含详解)-2024北师大版七年级数学暑假作业
- 新解读《GB-T 5447-2014烟煤黏结指数测定方法》
- 热工仪表高级工复习题与答案
- 老年人肿瘤防治知识培训课件
- 老年人白内障课件
- 重力多媒体课件
- 社会科学研究方法 课件 第一章 导论
- 中学生宿舍日常与管理
- 使用拐杖操作流程及评分标准
- 2025苏教版小学数学二年级上册教学计划
- 《民法概述》课件
- 景观设计客户需求洞察
- 2023年福建公务员录用考试《行测》真题卷及答案解析
- DB11 1488-2018 餐饮业大气污染物排放标准
- 2024年卷烟封装设备操作工职业鉴定考试题库(浓缩500题)
- 人教版九年级化学上册《第一、二单元》综合测试卷(附答案)
- 中职机械专业《变压器》单元测试题
- 2024年四川省大竹县级机关和事业单位考调人员75人历年(高频重点提升专题训练)共500题附带答案详解
评论
0/150
提交评论