ImageVerifierCode 换一换
格式:DOCX , 页数:25 ,大小:399.46KB ,
资源ID:12070374      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-12070374.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(STC12C5A60S2单片机课程设计报告.docx)为本站会员(b****8)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

STC12C5A60S2单片机课程设计报告.docx

1、STC12C5A60S2单片机课程设计报告一、 课程设计基本情况介绍1.1课程设计的基本目的与任务本课程设计旨在驾驭本专业学生理论指导实践能力以及电子产品工程设计与开发能力。 本实践课所要达到的主要目的是: G07ct。1、 通过本次课程设计,是对学生综合能力的检,提高学生综合运用专业知识,强化单片机 应用系统设计与防震能力。39O3G2、 本次课程设计是在生产实习所完成的 “单片机核心板+电子钟模块+MP3模块+RFID模块+无线传输模块+GPS模块+脉搏传感模块”的基础上设计该硬件系统的工作程序。 rqxEp。1.2课程设计的基本内容1、 在生产实习设计单片机硬件系统的基础上,设计相应的应

2、用软件系统。2、 在LCD1602上显示学号程序设计。3、 基于DS1302的实时时钟软件设计。4、 基于DS18B20的温度测量软件设计。5、 基于TL1838A的红外遥控解码软件设计。6、 设计应用软件系统框图和流程图,完成所设计软件的调试。1.3课程设计的教学要求1、 通过资料查阅及学习了解单片机应用系统的软件设计方法及单片机编程、软硬件联机调试技巧。2、 独立设计并编写下列应用程序:(1) LCD1602学号显示程序;(2) DS1302实时时钟程序;(3) DS18B20温度测量程序;(4) TL1838A红外遥控解码程序;3、 独立完成所设计程序与硬件系统的联机仿真。二、 整机系统

3、框图(硬件、软件)该设计方案是以STC12C5A60S2单片机为核心,采用LCD液晶屏幕显示模块、实时时 钟模块、温度测量模块、红外遥控解码等模块所构建的系统,能在 LCD1602液晶屏上显示当前的日期(年、月、日)、时间(时、分、秒)数据、当前环境温度值和红外遥控解码值。 用户可通过遥控器或单片机核心板上的按键来进行日期和时间的设置。 本系统设计大部分功能由软件来实现,电路简单明了,系统稳定性也得到大大提高。 GXF7b1、总体硬件设计框架图:总粹哽件说计眶架田2、总体软件设计框架图/三、 整机硬件电路原理图(见 99SE图)1、 核心板电路原理图2、 蜂鸣器驱动电路3、 按键电路4、 单片

4、机复位电路5、 LCD1602液晶显示电路6、 电子钟模块接口电路四、 软件系统设计思想/五、 系统软件资源分配表(调试程序、工作程序)/六、 显示学号的调试程序流程图、程序源代码1 、程序流程图/2、程序源代码 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+);/* 函数功能:延时若干毫秒入口参数

5、: n */void Lcd_delay(unsigned int n)unsigned int i;for(i=0;i:* I-兀屁功台旨巫呈序(二)程序源代码1、实时时钟模块/*DSi302#in clude#in clude#i nclude#defi ne uint un sig ned int#defi ne uchar un sig ned char/变量定义sbit SCLK=P1A4;sbit DATA_IO=P1A5;sbit RESET=P1A6;sbit ACC0=ACCA0;sbit ACC7=ACCA7;uchar table116;uchar table216;uc

6、har sec ond,minu te,hour,day, mon th,year; 定义秒分时日月年变量 /*DS1302 寸寸钟部分子程序 */向DS1302写入一个字节的函数时寸钟显示程序 */DS1302时钟控制总线/DS1302数据传送总线/DS1302复位总线移位时的第0位移位时的第7位ivjYT。PeuzH。void SentByte(uchar byte)uchar i;ACC=byte; for(i=8;i0;i-) / 相当于汇编中的 RRC DATA_IO=ACC0;/ 将自己的最低位传到时钟的数据总线上SCLK=1;/ 时钟上升沿发送数据有效SCLK=0;/ 清时钟总线

7、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:要写

8、入数据的 DS1302 地址;Data:要写的 数据 DSE4d。RESET=0;/ 复位引脚为低电平所有数据传送中止SCLK=0;/ 清时钟总线RESET=1;复位引脚为高电平逻辑控制有效delay(10);Sen tByte(Address);/ 写入地址命令Se ntByte(Data);/写入1字节数据SCLK=1;时钟总线置高RESET=0;/逻辑操作完毕,清复位总线/读取 DS1302 某地址的数据uchar ReadClock(uchar Address)/Address: 要读取数据的 DS1302 地址 NptBl 。uchar Data;/ 定义数据变量RESET=0;/复

9、位引脚为低电平所有数据传送终止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(0

10、x8e,0x00);/ 写入允许WriteClock(0x8c,0x11);/ 一下写入初始化时间 11年 11月 25日 15:05:00 WriteClock(0x88,0x11);WriteClock(0x86,0x25);WriteClock(0x84,0x15);WriteClock(0x82,0x05);WriteClock(0x80,0x00);WriteClock(0x8e,0x80);/ 禁止写入void Read_Date(void) uchar ReadValue;/ 定义变量ReadValue=ReadClock(0x81);second=(ReadValue&0x70

11、)4)*10 + (ReadV alue&0x0F);/ 将读取的秒数据的 BCD 码转 换成十进制数据GGFaOReadValue=ReadClock(0x83);if (ReadValue0x60)ReadValue=ReadClock(0x83);minute=(ReadValue&0x70)4)*10 + (ReadValue&0x0F); /将读取的分数据的 BCD 码 转换成十进制数据 rDczK。ReadValue=ReadClock(0x85);if (ReadValue0x24)ReadValue=ReadClock(0x85);hour=(ReadValue&0x70)4)

12、*10 + (ReadValue&0x0F); /将读取的时数据的 BCD 码转 换成十进制数据 16KBJ。ReadValue=ReadClock(0x87); day=(ReadValue&0x70)4)*10 + (ReadValue&0x0F); / 将读取的日数据的 BCD 码转换 成十进制数据 YcjtR 。ReadValue=ReadClock(0x89);month=(ReadValue&0x70)4)*10 + (ReadV alue&0x0F); / 将读取的月数据的 BCD 码转 换成十进制数据 lvdkY 。ReadValue=ReadClock(0x8d);year=

13、(ReadValue&0xf0)4)*10 + (ReadValue&0x0F); /将读取的年数据的 BCD 码转换成十进制数据 vwTxL。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;tabl

14、e115= ;table20= ;table21= ;table22= ;table23= ;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()1 个字1 个字uint i;Lcd_WriteAd

15、dress(0x00); /设置显示位置为第一行的第for(i=0;i16;i+) / 显示字符 Lcd_WriteData(table1i);delay(10); Lcd_WriteAddress(0x40); /设置显示位置为第二行的第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

16、();2、温度测量模块/*DS18B29温度显示程序*#include#include #include #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)/ 延时 1 微秒 while(i-);_nop_();_nop_();void delay1ms(uint m)/ 延时 m 毫秒 while(m-)delay_

17、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 char i;unsigned char dat;DQ = 1;for (i=8;i0;i-) dat=1;DQ = 0; / 给脉冲信号_nop_();_nop_()

18、;_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; 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_(); r

19、ead_temp()/* 读取温度值并转换 */ DS18B20rst();DS18B20wr(0xcc);/* 跳过读序列号 */ DS18B20wr(0x44);/* 启动温度转换 */ delay1ms(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.62

20、5); 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); / 设置显示位置为第二行

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2