![STC12C5A60S2单片机课程设计报告_第1页](http://file2.renrendoc.com/fileroot_temp3/2021-4/24/2949b9d4-28eb-40be-96ba-3c781921a9e2/2949b9d4-28eb-40be-96ba-3c781921a9e21.gif)
![STC12C5A60S2单片机课程设计报告_第2页](http://file2.renrendoc.com/fileroot_temp3/2021-4/24/2949b9d4-28eb-40be-96ba-3c781921a9e2/2949b9d4-28eb-40be-96ba-3c781921a9e22.gif)
![STC12C5A60S2单片机课程设计报告_第3页](http://file2.renrendoc.com/fileroot_temp3/2021-4/24/2949b9d4-28eb-40be-96ba-3c781921a9e2/2949b9d4-28eb-40be-96ba-3c781921a9e23.gif)
![STC12C5A60S2单片机课程设计报告_第4页](http://file2.renrendoc.com/fileroot_temp3/2021-4/24/2949b9d4-28eb-40be-96ba-3c781921a9e2/2949b9d4-28eb-40be-96ba-3c781921a9e24.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、-一、课程设计基本情况介绍1.1 课程设计的基本目的与任务本课程设计旨在驾驭本专业学生理论指导实践能力以及电子产品工程设计与开发能力。本实践课所要达到的主要目的是:1、通过本次课程设计,是对学生综合能力的检,提高学生综合运用专业知识,强化单片机应用系统设计与防震能力。2、本次课程设计是在生产实习所完成的“单片机核心板+电子钟模块 +MP3 模块 +RFID 模块+无线传输模块+GPS 模块 +脉搏传感模块”的基础上设计该硬件系统的工作程序。1.2 课程设计的基本内容1、在生产实习设计单片机硬件系统的基础上,设计相应的应用软件系统。2、在 LCD1602 上显示学号程序设计。3、基于 DS130
2、2 的实时时钟软件设计。4、基于 DS18B20 的温度测量软件设计。5、基于 TL1838A 的红外遥控解码软件设计。6、设计应用软件系统框图和流程图,完成所设计软件的调试。1.3 课程设计的教学要求1、通过资料查阅及学习了解单片机应用系统的软件设计方法及单片机编程、软硬件联机调试技巧。2、独立设计并编写下列应用程序:( 1) LCD1602 学号显示程序;( 2) DS1302 实时时钟程序;( 3) DS18B20 温度测量程序;( 4) TL1838A 红外遥控解码程序;3、独立完成所设计程序与硬件系统的联机仿真。二、整机系统框图(硬件、软件)该设计方案是以STC12C5A60S2 单
3、片机为核心,采用 LCD 液晶屏幕显示模块、实时时钟模块、温度测量模块、红外遥控解码等模块所构建的系统,能在 LCD1602 液晶屏上显示当前的日期(年、月、日) 、时间(时、分、秒)数据、当前环境温度值和红外遥控解码值。用户可通过遥控器或单片机核心板上的按键来进行日期和时间的设置。本系统设计大部分功能由软件来实现,电路简单明了,系统稳定性也得到大大提高。1、总体硬件设计框架图:2、总体软件设计框架图/三、整机硬件电路原理图(见99SE 图)1、核心板电路原理图2、蜂鸣器驱动电路3、按键电路4、单片机复位电路5、 LCD1602 液晶显示电路6、电子钟模块接口电路四、软件系统设计思想/五、系统
4、软件资源分配表(调试程序、工作程序)/六、显示学号的调试程序流程图、程序源代码-1、程序流程图/2、程序源代码/*LCD1602*/#include#includesbit RS=P37;sbit RW=P36;sbit E=P27;sbit BF=P07;#define LCD_Data P0/*函数声明 */void Lcd_Int(void);void huanying_show(void);void dongtai_show(void);char string1=LIU JING;/LIU JINGchar string2=080104020013;/080104020013/*函数功
5、能:主函数*/void main()Lcd_Int();/1602 初始化while(1)huanying_show();dongtai_show();/*函数功能:延时1ms注:不同单片机不同晶振需要对此函数进行修改*/void Lcd_delay1ms()unsigned char i,j;for(i=0;i90;i+)for(j=0;j33;j+);/*函数功能:延时若干毫秒入口参数: n*/void Lcd_delay(unsigned int n)unsigned int i;for(i=0;in;i+)Lcd_delay1ms();/*函数功能:判断液晶模块的忙碌状态返回值: re
6、sult。 result=1, 忙碌 ;result=0, 不忙*/bit Lcd_BusyTest(void)bit result;RS=0; / 根据规定, RS 为低电平, RW 为高电平时,可以读状态 RW=1;E=1;/E=1 ,才允许读写_nop_(); / 空操作_nop_();_nop_();_nop_(); / 空操作四个机器周期,给硬件反应时间result=BF; / 将忙碌标志电平赋给resultE=0;return result;/*-函数功能:将模式设置指令或显示地址写入液晶模块入口参数: dictate*/void Lcd_WriteCom(unsigned cha
7、r dictate)while(Lcd_BusyTest()=1);/忙就等待RS=0; /根据规定, RS 和 RW 同时为低电平时,可以写入指令 RW=0;E=0;/E 置低电平(写指令时,就是让E 从 0 到 1 发生正跳变,所以应先置0_nop_();_nop_(); / 空操作两个机器周期,给硬件反应时间LCD_Data=dictate;_nop_();_nop_();_nop_();_nop_(); / 空操作四个机器周期,给硬件反应时间E=1;/E 置高电平_nop_();_nop_();_nop_();_nop_(); / 空操作四个机器周期,给硬件反应时间E=0;/当 E 由
8、高电平跳变成低电平时,液晶模块开始执行命令/*函数功能:指定字符显示的实际地址入口参数: x注:此函数已经加上了0x80,故只需写上实际地址就行*/void Lcd_WriteAddress(unsigned char x)Lcd_WriteCom(x|0x80); /显示位置的确定方法规定为80H+ 地址码 x/*函数功能:将数据(字符的标准 ASCII 码)写入液晶模块入口参数: y(为字符常量)*/void Lcd_WriteData(unsigned char y)while(Lcd_BusyTest()=1);RS=1;/RS 为高电平, RW 为低电平时,可以写入数据RW=0;E=
9、0;/E 置低电平(写指令时,就是让E从0到1发生正跳变,所以应先置 0LCD_Data=y; / 将数据送入 P0 口,即将数据写入液晶模块_nop_();_nop_();_nop_();_nop_(); / 空操作四个机器周期,给硬件反应时间E=1;/E 置高电平_nop_();_nop_();_nop_();_nop_(); / 空操作四个机器周期,给硬件反应时间E=0; /当 E 由高电平跳变成低电平时,液晶模块开始执行命令/*函数功能:对 LCD 的显示模式进行初始化设置 */void Lcd_Int(void)Lcd_delay(15);/ 延时 15ms,首次写指令时应给 LCD
10、一段较长的反应时间Lcd_WriteCom(0x38);/ 显示模式设置: 16*2显示, 5*7点阵, 8 位数据接口Lcd_delay(5);/ 延时 5msLcd_WriteCom(0x38);Lcd_delay(5);-Lcd_WriteCom(0x38); /3次写设置模式Lcd_delay(5);Lcd_WriteCom(0x0C); / 显示模式设置:显示开,有光标,光标不闪烁Lcd_delay(5);Lcd_WriteCom(0x06);/ 显示模式设置:光标右移,字符不移Lcd_delay(5);Lcd_WriteCom(0x01);/ 清屏幕指令,将以前的显示内容清除Lcd
11、_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_i16;Lcd_i+) /显示字符LIU JING Lcd_WriteData(string1Lcd_i);Lcd_delay(150);Lcd_WriteAddress(0x40);/设置显示位置为第二行的第1 个字for(Lcd_
12、i=0;Lcd_i16;Lcd_i+) /显示字符080104020013 Lcd_WriteData(string2Lcd_i); Lcd_delay(150); Lcd_delay(1000);/右侧移位进来void dongtai_show(void)unsigned int Lcd_i;Lcd_WriteCom(0x01);/ 清显示:清屏幕指令Lcd_delay(2);Lcd_WriteAddress(0x10);/设置显示位置为最右侧Lcd_delay(2);for(Lcd_i=0;Lcd_i16;Lcd_i+)/ 显示字符LIU JINGLcd_WriteData(string1
13、Lcd_i);Lcd_delay(2);Lcd_WriteAddress(0x50);/设置显示位置为最右侧for(Lcd_i=0;Lcd_i16;Lcd_i+)/显示字符080104020013 Lcd_WriteData(string2Lcd_i); Lcd_delay(2); for(Lcd_i=0;Lcd_i16;Lcd_i+) /开始左移 Lcd_WriteCom(0x18); / 左移指令Lcd_delay(400);Lcd_delay(1000);Lcd_WriteCom(0x08);Lcd_delay(400);Lcd_WriteCom(0x0c);Lcd_delay(400)
14、;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(1);-Lcd_WriteCom(0x01); / 清显示:清屏幕指令Lcd_delay(1);七、实时时钟、温度测量、红外遥控解码等程序的流程图、程序源代码(一)流程图1、实时时钟模块图 7.1.1
15、 为电子时钟设计框图,系统由主控制器 STC12C5A60S2 、时钟电路 DS1302、显示电路 LCD1602 及键扫描电路组成。电子万年历的程序主要包括 3 个方面的内容:一是 DS1302从单片机中读取数据进行计数, 二是利用按键进行时间的调整, 三是 MAX7219从单片机中读取数据驱动 LED 数码管显示时间。图 7.1.1 电子时钟设计框图STC12C5A60S2 单片机主要I/O 口的分配,P1.4、 P1.5、P1.6 分别接DS1302 的 SCLK ,MCUIO ,RST 端,P0 口接 LCD1602 八位数据口, P2.7 、P3.6、P3.7 分别接 LCD1602
16、 的 E、RW、 RS 端, P2.0-P2.3 分别接按键K1-K4. 下图 7.1.2 为电子时钟程序设计流程图。图 7.1.2 电子时钟程序设计流程图2、温度测量模块温度测量程序主要包括主程序,读出温度子程序,温度转换子程序,计算温度子程序,显示-数据子程序等。主程序的主要功能是负责温度的实时显示、读出并处理DS18B20 的测量的当前温度值,温度测量每1s 进行一次。这样可以在一秒之内测量一次被测温度,其系统程序流程见图7.2.1所示。初 始发 DS18B20 复位命令调用显示发跳过 ROM 命令N1S发读取温度命令YY读取操作, CRC 校验初 次NYN读 出 温8 字节完?度 值
17、温Y度 计 算NCRC 校验正?确?发温度转换移入温度暂存器图 7.2.1温度测量主程序流程图结束图 7.2.2 读温度流程图3、红外遥控解码模块(1)遥控器发射端程序流程图:-(2)遥控器接收端程序流程图:(二)程序源代码1、实时时钟模块/*DS1302时钟显示程序*/#include#include#include#define uint unsigned int#define uchar unsigned char/变量定义sbit SCLK=P14;/DS1302 时钟控制总线sbit DATA_IO=P15;/DS1302 数据传送总线sbit RESET=P16;/DS1302 复
18、位总线sbit ACC0=ACC0;/移位时的第0 位sbit ACC7=ACC7;/移位时的第7 位uchartable116 ;uchartable216 ;uchar second,minute,hour,day,month,year;/ 定义秒分时日月年变量/*DS1302时钟部分子程序*/向 DS1302 写入一个字节的函数-void SentByte(uchar byte)uchar i;ACC=byte;for(i=8;i0;i-) /相当于汇编中的RRC DATA_IO=ACC0;/ 将自己的最低位传到时钟的数据总线上 SCLK=1;/ 时钟上升沿发送数据有效SCLK=0;/
19、清时钟总线ACC=ACC1;/ 将累加器中的数据右移1 位/从 DS1302 读取一个字节函数uchar ReceiveByte(void)uchar i;for(i=8;i0;i-) /相当于汇编中的RRC ACC=ACC1;/将累加器中的数据右移1 位ACC7=DATA_IO;/将数据线上的1 位数据存入累加器中SCLK=1;/ 时钟上升沿发送数据有效SCLK=0;/ 清时钟总线return(ACC);/ 函数最终返回读取的1 字节数据/向 DS1302 的某个地址里写入数据函数void WriteClock(uchar Address,uchar Data)/Address: 要写入数据
20、的DS1302 地址; Data:要写的数据RESET=0;/ 复位引脚为低电平所有数据传送中止SCLK=0;/ 清时钟总线RESET=1;/ 复位引脚为高电平逻辑控制有效delay(10);SentByte(Address);/ 写入地址命令SentByte(Data);/ 写入 1 字节数据SCLK=1;/ 时钟总线置高RESET=0;/ 逻辑操作完毕,清复位总线/读取 DS1302 某地址的数据uchar ReadClock(uchar Address)/Address: 要读取数据的DS1302 地址uchar Data;/ 定义数据变量RESET=0;/ 复位引脚为低电平所有数据传送
21、终止SCLK=0;/ 清时钟总线RESET=1;/ 复位引脚为高电平逻辑控制有效delay(1);SentByte(Address|0X01);/ 写入地址命令,读取地址为写入地址+1HData=ReceiveByte();/ 读取 1 字节数据SCLK=1;/ 时钟总线置高RESET=0;/ 逻辑操作完毕,清复位总线return(Data);/ 返回读取的数据/时钟芯片初始化函数void Init_Clock(void) uchar Second=ReadClock(0x81);/ 读取秒数据if(Second&0x80)/ 判断时钟芯片是否关闭 WriteClock(0x8e,0x00);
22、/写入允许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);/ 禁止写入-voidRead_Date(void)uchar ReadValue;/定义变量ReadValue=ReadClock(0x81);second=(ReadValue&0x70)4)*10 + (R
23、eadV alue&0x0F);/ 将读取的秒数据的BCD 码转换成十进制数据ReadValue=ReadClock(0x83);if (ReadV alue0x60)ReadValue=ReadClock(0x83);minute=(ReadValue&0x70)4)*10+ (ReadValue&0x0F);/将读取的分数据的BCD 码转换成十进制数据ReadValue=ReadClock(0x85);if (ReadV alue0x24)ReadValue=ReadClock(0x85);hour=(ReadValue&0x70)4)*10+ (ReadValue&0x0F);/将读取的
24、时数据的BCD 码转换成十进制数据ReadValue=ReadClock(0x87);day=(ReadValue&0x70)4)*10 + (ReadValue&0x0F); / 将读取的日数据的 BCD 码转换成十进制数据ReadValue=ReadClock(0x89);month=(ReadValue&0x70)4)*10 + (ReadV alue&0x0F); / 将读取的月数据的 BCD 码转换成十进制数据ReadValue=ReadClock(0x8d);year=(ReadValue&0xf0)4)*10 + (ReadValue&0x0F); /将读取的年数据的 BCD 码
25、转换成十进制数据table10=D;table11=a;table12=t;table13=a;table14=:;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= ;table23= ;table24=0x30+hour/10
26、;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;Lcd_WriteAddress(0x00);/设置显示位置为第一行的第1 个字for(i=0;i16;i+) /显示字符 Lcd_WriteData(table1i);dela
27、y(10);Lcd_WriteAddress(0x40);/设置显示位置为第二行的第1 个字for(i=0;i16;i+)/显示字符 Lcd_WriteData(table2i); delay(10); void main()Lcd_Int();/1602 初始化huanying_show();Lcd_WriteCom(0x01);Init_Clock();/将 1302 初始化while(1) Read_Date();show_Data();2、温度测量模块/*DS18B29温度显示程序*/#include#include#include#define uchar unsigned char
28、#define uint unsigned intsbit DQ=P17;/DS18B20 与单片机连接口unsigned char a,b;uint tvalue;/ 温度值uchar disdata12;void delay_18B20(unsigned int i)/ 延时 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;/
29、DQ 拉低delay_18B20(600);DQ = 1;/拉高_nop_();_nop_();while(DQ);_nop_();_nop_();while(DQ);_nop_();uchar DS18B20rd()/* 读数据 */ unsigned char i;-unsigned char dat;DQ=1;for (i=8;i0;i-)dat=1;DQ = 0; / 给脉冲信号 _nop_();_nop_(); _nop_(); _nop_();DQ = 1; / 给脉冲信号 delay_18B20(5);if(DQ)dat|=0x80;delay_18B20(50); return
30、(dat);void DS18B20wr(uchar wdata)/*写数据 */ unsigned char d; int i;DQ=1;for (i=8; i0; i-) d=wdata&0x01; wdata=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);/*启动温度转换*/d
31、elay1ms(30);DS18B20rst();DS18B20wr(0xcc);/*跳过读序列号*/DS18B20wr(0xbe);/* 读取温度 */a=DS18B20rd();b=DS18B20rd();tvalue=b;tvalue=tvalue8;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=.;disdata10=(int)tvalue%10+0x30;/小数位disdata11=C;Lcd_WriteAddress(0x40);/ 设置显示位置为第二行的第1 个字for(i=0;i12;i+)/ 显示字符 Lcd_WriteData(disdata
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 朝阳2024年辽宁朝阳师范学院招聘37人笔试历年参考题库附带答案详解
- 攀枝花2025年四川攀枝花市民政局直属事业单位考调4人笔试历年参考题库附带答案详解
- 2025年中国冲天炉数字式综合检测仪市场调查研究报告
- 2025至2031年中国高压均质机行业投资前景及策略咨询研究报告
- 2025至2031年中国耐低温型不干胶行业投资前景及策略咨询研究报告
- 2025至2031年中国直流脉宽调速器行业投资前景及策略咨询研究报告
- 2025年活门项目可行性研究报告
- 2025至2031年中国易洗除渍素行业投资前景及策略咨询研究报告
- 2025至2031年中国婴儿玩具拉琴行业投资前景及策略咨询研究报告
- 2025年女装牛仔中裤项目可行性研究报告
- 高三一本“临界生”动员会课件
- 浙江省2023年中考科学真题全套汇编【含答案】
- 《公益性公墓管理章程》-
- C++面向对象程序设计双语教程(第3版)课件全套 ch01Introduction-ch08Templates
- 小说标题作用探究省名师优质课赛课获奖课件市赛课一等奖课件
- dk胶原蛋白培训课件
- 短视频拍摄时间计划表
- 动物检疫技术-动物检疫处理(动物防疫与检疫技术)
- 英语经典口语1000句
- PDCA案例降低心脏介入手术并发症
- 完整,沪教版小学四年级英语上册单词表
评论
0/150
提交评论