课程设计报告 - 万年历++温度 - 图文
更新时间:2024-04-06 16:27:01 阅读量: 综合文库 文档下载
- 课程设计报告推荐度:
- 相关推荐
天津职业技术师范大学电子工程学院
电子信息工程 课程设计报告
课程设计题目: 基于单片机的电子万年历设计 同组学生姓名(学号):王珂09900120405、王飞龙09900120402
班 级: 电信12技术1班
任务分工: 王 珂:编写程序、软件调试、整理报告
王飞龙:查找资料、硬件连接、整理报告 设计时间: 2013年1月7 日 —— 2013 年 1月18日
指导教师: 姜德宁、王天慧
目 录
题目:基于单片机的电子万年历设计
目 录 ........................................... 1 一、 课程设计的目的与要求(含设计指标) ............ 1 二、 方案论证及选择 ................................ 1 1. 单片机芯片的选择方案和论证 ................... 1 2. 显示模块选择方案和论证 ....................... 1 3. 时钟芯片的选择方案和论证 ..................... 1 4. 电路设计最终方案决定 ......................... 2 三、 原理设计(或基本原理) ........................ 2 1. 基本原理: ................................... 2 2. 总体框图..................................... 2 3. 单元电路设计 ................................. 2 4. 元件列表..................................... 4 四、 方案实现与测试(或调试) ...................... 5 五、 总结 ......................................... 6 六、 个人总结 ..................................... 6 七、 参考书目: .................................... 6
附录:C程序
一、 课程设计的目的与要求(含设计指标)
1. 要有完整的设计过程及设计图 2. 最终的设计结果。 3. 个人总结不少于1000字。
二、 方案论证及选择
1. 单片机芯片的选择方案和论证
方案一:
采用89C51芯片作为硬件核心,采用Flash ROM,内部具有4KB ROM 存储空间,能于3V的超低压工作,而且与MCS-51系列单片机完全兼容,但是运用于电路设计中时由于不具备ISP在线编程技术, 当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,对芯片的多次拔插会对芯片造成一定的损坏。 方案二:
采用AT89S52,片内ROM全都采用Flash ROM;能以3V的超底压工作;同时也与MCS-51系列单片机完全该芯片内部存储器为8KB ROM 存储空间,同样具有89C51的功能,且具有在线编程可擦除技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,不需要对芯片多次拔插,所以不会对芯片造成损坏,所以选择采用AT89S52作为主控制系统。
2. 显示模块选择方案和论证
方案一:
采用LED数码管动态扫描,LED数码管价格适中,对于显示数字合适,采用动态扫描法与单片机连接时,虽然占用的单片机口线少,但连线还需要花费一点时间,所以也不用此种作为显示。 方案二:
采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较适合,如采用在显示数字显得太浪费,且价格也相对较高,所以也不用此种作为显示。 方案三:
采用LCD液晶显示屏,液晶显示屏的显示功能强大,可显示大量文字,图形,显示多样,清晰可见,并且我做的最小系统上带一个TS1620-1,和AT89S52已经接好,省了很多麻烦,所以在此设计中采用LCD液晶显示屏。
3. 时钟芯片的选择方案和论证
方案一:
采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年进行计数,而且精度高,位的RAM做为数据暂存区,工作电压2.5V~5.5V范围内,2.5V时耗电小于300nA。 方案二:
直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、星期、时、分、秒
第 1 页
计数。采用此种方案虽然减少芯片的使用,节约成本。虽然实现的时间误差较大,但是,考虑到需要采购芯片,综合考虑,对于课程设计来说能用较省事的方法达到目的最好。
4. 电路设计最终方案决定
综上各方案所述,对此次作品的方案选定: 采用AT89S52作为主控制系统; 直接采用单片机定时计数器提供秒信号;LCD液晶显示屏作为显示。
三、 原理设计(或基本原理)
1. 基本原理:
本电路是由AT89S52单片机为控制核心,具有在线编程功能,低功耗,能在3V超低压工作;时钟电路直接采用单片机定时计数器提供秒信号;温度的采集由DS18B20构成;显示部份由LCD液晶显示屏显示。同时还添加了提醒功能,通过蜂鸣器实现。
2. 总体框图
Lcd1602液晶屏显示模块 STC89C52 主控制模块 图1
晶振振荡模块 键盘模块
3. 单元电路设计
? 单片机主控制模块的设计
AT89S52单片机为40引脚双列直插芯片,有四个I/O口P0,P1,P2,P3, MCS-51单片机共有4个8位的I/O口(P0、P1、P2、P3),每一条I/O线都能独立地作输出或输入。单片机的最小系统如下图2所示,18引脚和19引脚接时钟电路,XTAL1接外部晶振和微调电容的一端,在片内它是振荡器倒相放大器的输入,XTAL2接外部晶振和微调电容的另一端,在片内它是振荡器倒相放大器的输出。第9引脚为复位输入端,接上电容,电阻及开关后够上电复位电路,20引脚为接地端,40引脚为电源端。 ? 显示模块的设计
如图3为LCD显示模块: 此模块需要注意上拉电阻。
第 2 页
图2
图3
? 温度模块
考虑到在单片机属于数字系统,容易想到数字温度传感器,可选用DS18B20数字温度传感器,此传感器为单总线数字温度传感器,起体积小、构成的系统结构简单,它可直接将温
第 3 页
度转化成串行数字信号给单片机处理,即可实现温度显示。另外DS18B20具有3引脚的小体积封装,测温范围为-55~+125摄氏度,测温分辨率可达0.0625摄氏度,其测量范围与精度都能符合设计要求。 DS18B20性能
? ? ? ? ? ? ?
独特的单线接口仅需一个端口引脚进行通信 简单的多点分布应用 无需外部器件 可通过数据线供电 零待机功耗
测温范围-55~+125℃,以0.5℃递增
可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃
? 温度数字量转换时间200ms,12位分辨率时最多在750ms内把温度
转换为数字
? 应用包括温度控制、工业系统、消费品、温度计和任何热感测系统 ? 负压特性:电源极性接反时,传感器不会因发热而烧毁,但不能正
常工作
? GND:地
? DQ:单线运用的数据输入/输出引脚 ? VD:可选的电源引脚
4. 元件列表
器件 光汇51单片机开发板 杜邦线 DS18B20 LCD1602液晶屏 数量 1 若干 1 1 第 4 页
四、 方案实现与测试(或调试)
此方案由于只用到51单片机芯片,因此各个功能都是由编程来实现。 大体程序流程框图如下
第 5 页
在本成电子万年历的设计调试中遇到了很多的问题。回想这些问题只要认真多思考都是可以避免的,以下为主要的问题:
1)烧入程序后,LCD液晶显示屏显示亮度不好。
解决:一边旋转KT1滑动变阻器,一边观看LCD显示屏,知道看到合适的亮度 为止。
2)蜂鸣器声音过小或没声。
解决:在相应管脚接上拉电阻。
3)液晶屏显示乱码,显示字符错行。
解决:程序在合并时起冲突,调试程序,重新定义变量等;仔细检查程序错误。
五、 总结
经过多次的反复测试与分析,可以对电路的原理及功能更加熟悉,同时提高了设计能力与及对电路的分析能力。同时在软件的编程方面得到更多的提高,对编程能力得到加强,同时对所学的知识得到很大的提高与巩固。
六、 个人总结 另附
七、 参考书目:
[1] 柴诚敬,刘国维,李阿娜,《化工原理课程设计》,天津,天津科学技术出版社,1994
年
[2] 网络参考文献资料
附录:程序源代码:
#include
#define uchar unsigned char #define uint unsigned int
#define DS18B20
#ifdef DS18B20
#define READROM (0x33) #define MATCHROM (0x55) #define SKIPROM (0xCC) #define SEARCHROM (0xF0) #define ALARMSEARCH (0xEC)
#define WIRTESCRATCHPAD (0x4E) #define READSCRATCHPAD (0xBE) #define COPYSCRATCHPAD (0x48)
第 6 页
#define CONVETT (0x44) #define RECALLE2 (0xB8) #define READPOWERSUPPLY (0xB4) sbit DS18B20_Port = P2^6;
unsigned char T;
unsigned char flag_t = 0;
unsigned char Buffer_DS18B20[9];
unsigned long Temperature_DS18B20_LONG;
unsigned char Temperature_DS18B20_STRING[9] = {0x00}; unsigned char flag_temp = 0;
unsigned char Board_InputOutput_DS18B20(unsigned char _mode);//模式选择:Read_Temp(读取温度),Updata_Info(更新所有信息) #endif
sbit rs=P2^2; sbit rw=P2^1; sbit lcden=P2^0; sbit s1=P3^0; sbit s2=P3^1; sbit s3=P3^2;
uchar count,s1num;
char nian_1,nian_0,yue,ri,week,miao,shi,fen,b,a,c; uchar code table[]=%uchar code table1[]=\void delay(uint z) {
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--); }
void write_com(uchar com) {
rs=0; lcden=0; P0=com; delay(5); lcden=1; delay(5); lcden=0; }
第 7 页
void write_date(uchar date) {
rs=1; lcden=0; P0=date; delay(5); lcden=1; delay(5); lcden=0; }
void init() {
uchar num;
lcden=0; rw=0;
write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01); write_com(0x80);
for(num=0;num<16;num++) {
write_date(table[num]); delay(5); }
write_com(0x80+0x40); for(num=0;num<12;num++) {
write_date(table1[num]); delay(5); } TMOD=0x01;
TH0=(65536-50000)/256; TL0=(65536-50000)%6; EA=1; ET0=1; TR0=1; }
void write_sfm(uchar add,uchar date) {
uchar shi,ge; shi=date/10;
第 8 页
ge=date;
write_com(0x80+0x40+add); write_date(0x30+shi); write_date(0x30+ge); }
void write_sfm1(uchar add,uchar date) {
write_com(0x80+add); write_date(0x30+date); }
void write_sfm2(uchar add,uchar date) {
uchar shi,ge; shi=date/10; ge=date;
write_com(0x80+add); write_date(0x30+shi); write_date(0x30+ge); }
void keyscan() {
if(s1==0) {
delay(5); if(s1==0) { s1num++; while(!s1); if(s1num==1) { a=0; TR1=0; TR0=0;
write_com(0x80); write_com(0x0f); } }
if(s1num==2) {
write_com(0x80+2); }
if(s1num==3) {
第 9 页
write_com(0x80+5); }
if(s1num==4) {
write_com(0x80+8); }
if(s1num==5) {
write_com(0x80+15); }
if(s1num==6) {
write_com(0x80+0x40+0); }
if(s1num==7) {
write_com(0x80+0x40+3); }
if(s1num==8) {
write_com(0x80+0x40+6); }
if(s1num==9) {
s1num=0;
write_com(0x0c); TR0=1; TR1=1; a=1; }
}
if(s1num!=0) {
if(s2==0) {
delay(5); if(s2==0) {
while(!s2); if(s1num==1) {
nian_1++;
第 10 页
while(nian_1==99)nian_1=0; write_sfm2(0,nian_1); write_com(0x80+0); }
if(s1num==2) {
nian_0++;
while(nian_0==100)nian_0=0; write_sfm2(2,nian_0); write_com(0x80+2); }
if(s1num==3) {
yue++;
if(yue==13) yue=1;
write_sfm2(5,yue); write_com(0x80+5); }
if(s1num==4) {
ri++;
if(ri==32) ri=1;
write_sfm2(8,ri); write_com(0x80+8); }
if(s1num==5) {
week++;
if(week==8) week=1;
write_sfm1(15,week); write_com(0x80+15); }
if(s1num==6) {
shi++;
if(shi==24) shi=0;
write_sfm(0,shi);
write_com(0x80+0x40+0); }
第 11 页
if(s1num==7) {
fen++;
if(fen==60) fen=0;
write_sfm(3,fen);
write_com(0x80+0x40+3); }
if(s1num==8) {
miao++;
if(miao==60) miao=0;
write_sfm(6,miao);
write_com(0x80+0x40+6); } } }
if(s3==0) {
delay(5); if(s3==0) {
while(!s3); if(s1num==1) {
nian_1--;
if(nian_0==-1) nian_0=99;
write_sfm2(0,nian_1); write_com(0x80+0); }
if(s1num==2) {
nian_0--;
if(nian_0==-1) nian_0=99;
write_sfm2(2,nian_0); write_com(0x80+2); }
if(s1num==3) {
yue--;
if(yue==0)
第 12 页
yue=12;
write_sfm2(5,yue); write_com(0x80+5); }
if(s1num==4) {
ri--; if(ri==0) ri=31;
write_sfm2(8,ri); write_com(0x80+8); }
if(s1num==5) {
week--;
if(week==0) week=7;
write_sfm1(15,week); write_com(0x80+15); }
if(s1num==6) {
shi--;
if(shi==-1) shi=23;
write_sfm(0,shi);
write_com(0x80+0x40+0); }
if(s1num==7) {
fen--;
if(fen==-1) fen=59;
write_sfm(3,fen);
write_com(0x80+0x40+3); }
if(s1num==8) {
miao--;
if(miao==-1) miao=59;
write_sfm(6,miao);
write_com(0x80+0x40+6); }
第 13 页
} } } }
void main() {
init();
nian_1=20;nian_0=14;yue=12;ri=30;week=2;shi=23;fen=59;miao=55; write_sfm2(0,nian_1); write_sfm2(2,nian_0); write_sfm2(5,yue); write_sfm2(8,ri); write_sfm1(15,week); write_sfm(0,shi); write_sfm(3,fen); write_sfm(6,miao); a=1;
while(1) {
if(a==1) {
#ifdef DS18B20 flag_t = 1; while(flag_t){ EA = 0; TR1 = 0;
write_com(0x80+0x40+9);
Board_InputOutput_DS18B20(0x01);
write_date(Temperature_DS18B20_STRING[1]); write_date(Temperature_DS18B20_STRING[2]); write_date(Temperature_DS18B20_STRING[3]); write_date(Temperature_DS18B20_STRING[4]); write_date(Temperature_DS18B20_STRING[5]); write_date(Temperature_DS18B20_STRING[6]); write_date(Temperature_DS18B20_STRING[7]); T = (Temperature_DS18B20_STRING[1]-0x30)*10 (Temperature_DS18B20_STRING[2]-0x30);
if(T>=26||T<19)//////////////////////// {
flag_t = 1; SPK = 1; }
第 14 页
+
else {
flag_t = 0; SPK = 0; } }
EA = 1; TR1 = 1; #endif }
keyscan();
if(b==0){bee();b++;} if(c==0){bee1();c++;} } }
void timer0() interrupt 1 {
TH0=(65536-50000)/256; TL0=(65536-50000)%6; count++; if(count==15) {
count=0;
miao++;
if(miao==60) {
miao=0; fen++;
if(fen==60) {
fen=0; shi++;
if(shi==24) {
shi=0; week++;
if(week==8) {
week=1; }
第 15 页
write_sfm1(15,week); ri++; if(ri>28) {
if(nian_0%4==0) {
switch(yue)
{ case 1: if(ri==32){ri=1;yue++;}break; case 2: if(ri==30){ri=1;yue++;}break; case 3: if(ri==32){ri=1;yue++;}break; case 4: if(ri==31){ri=1;yue++;}break; case 5: if(ri==32){ri=1;yue++;}break; case 6: if(ri==31){ri=1;yue++;}break; case 7: if(ri==32){ri=1;yue++;}break; case 8: if(ri==32){ri=1;yue++;}break; case 9: if(ri==31){ri=1;yue++;}break; case 10: if(ri==32){ri=1;yue++;}break; case 11: if(ri==31){ri=1;yue++;}break; case 12: if(ri==32){ri=1;yue++;}break;} }
else{
switch(yue) {
case 1: if(ri==32){ri=1;yue++;}break; case 2: if(ri==29){ri=1;yue++;}break; case 3: if(ri==32){ri=1;yue++;}break; case 4: if(ri==31){ri=1;yue++;}break; case 5: if(ri==32){ri=1;yue++;}break; case 6: if(ri==31){ri=1;yue++;}break; case 7: if(ri==32){ri=1;yue++;}break; case 8: if(ri==32){ri=1;yue++;}break; case 9: if(ri==31){ri=1;yue++;}break; case 10: if(ri==32){ri=1;yue++;}break; case 11: if(ri==31){ri=1;yue++;}break; case 12: if(ri==32){ri=1;yue++;}break; } }
if(yue==13){ yue=1; nian_0++;
if(nian_0==100){nian_0=0;nian_1++;
if(nian_1==99){nian_1=0;} }
第 16 页
}
write_sfm2(0,nian_1); write_sfm2(2,nian_0); write_sfm2(5,yue); }
write_sfm2(8,ri); }
write_sfm(0,shi); }
write_sfm(3,fen); }
write_sfm(6,miao); } }
#ifdef DS18B20
void Delay_DS18B20_us(unsigned char _t){while(--_t);} void Delay_DS18B20_ms(unsigned
_t){while(_t--){Delay_DS18B20_us(245);Delay_DS18B20_us(245);}} void DS18B20_WriteByte(unsigned char _byte) {
unsigned char i = 0; for(i = 0; i < 8; i++) {
DS18B20_Port = 0;
DS18B20_Port = _byte & 0x01; Delay_DS18B20_us(25); DS18B20_Port = 1; _byte >>= 1; }
Delay_DS18B20_us(25); }
unsigned char DS18B20_ReadByte(void) {
unsigned char dat; unsigned char i = 0; for(i = 0; i < 8; i++) {
DS18B20_Port = 0; dat >>= 1;
DS18B20_Port = 1;
_nop_();_nop_();_nop_();_nop_();_nop_();
第 17 页
char
if(DS18B20_Port){dat |= 0x80;} Delay_DS18B20_us(25); }
return dat; }
unsigned char DS18B20_Initialization(void) {
unsigned char flag = 0; DS18B20_Port = 1; Delay_DS18B20_us(5); DS18B20_Port = 0;
Delay_DS18B20_us(200); Delay_DS18B20_us(200); DS18B20_Port = 1; Delay_DS18B20_us(50); flag = DS18B20_Port; Delay_DS18B20_us(25); return flag; }
void DS18B20_Updata_Info(void) {
unsigned char i = 0;
DS18B20_Initialization(); DS18B20_WriteByte(SKIPROM); DS18B20_WriteByte(CONVETT); Delay_DS18B20_ms(10);
DS18B20_Initialization();
DS18B20_WriteByte(SKIPROM); DS18B20_WriteByte(READSCRATCHPAD); for(i=0; i<9; i++) {
Buffer_DS18B20[i] = DS18B20_ReadByte(); } }
void DS18B20_Read_Temp(void) {
unsigned int temperature_ds18b20 = 0; DS18B20_Updata_Info();
temperature_ds18b20 = (unsigned int)Buffer_DS18B20[1] * 0x0100 + (unsigned int)Buffer_DS18B20[0];
Temperature_DS18B20_LONG = (unsigned long)temperature_ds18b20 * 625 ;
Temperature_DS18B20_STRING[8] = '\\0';
Temperature_DS18B20_STRING[7] = 0x30+(Temperature_DS18B20_LONG) /1;
第 18 页
Temperature_DS18B20_STRING[6] = 0x30+(Temperature_DS18B20_LONG0) /10;
Temperature_DS18B20_STRING[5] = 0x30+(Temperature_DS18B20_LONG00) /100;
Temperature_DS18B20_STRING[4] = 0x30+(Temperature_DS18B20_LONG000) /1000;
Temperature_DS18B20_STRING[3] = '.';
Temperature_DS18B20_STRING[2] = 0x30+(Temperature_DS18B20_LONG0000) /10000;
Temperature_DS18B20_STRING[1] = 0x30+(Temperature_DS18B20_LONG00000) /100000;
Temperature_DS18B20_STRING[0] = 0x30+(Temperature_DS18B20_LONG000000)/1000000; }
unsigned char Board_InputOutput_DS18B20(unsigned char _mode) {
switch(_mode) {
case 0x01:DS18B20_Read_Temp(); break; case 0x02:DS18B20_Updata_Info(); break; default :return 1; break; }
return 0; }
#endif
第 19 页
Temperature_DS18B20_STRING[6] = 0x30+(Temperature_DS18B20_LONG0) /10;
Temperature_DS18B20_STRING[5] = 0x30+(Temperature_DS18B20_LONG00) /100;
Temperature_DS18B20_STRING[4] = 0x30+(Temperature_DS18B20_LONG000) /1000;
Temperature_DS18B20_STRING[3] = '.';
Temperature_DS18B20_STRING[2] = 0x30+(Temperature_DS18B20_LONG0000) /10000;
Temperature_DS18B20_STRING[1] = 0x30+(Temperature_DS18B20_LONG00000) /100000;
Temperature_DS18B20_STRING[0] = 0x30+(Temperature_DS18B20_LONG000000)/1000000; }
unsigned char Board_InputOutput_DS18B20(unsigned char _mode) {
switch(_mode) {
case 0x01:DS18B20_Read_Temp(); break; case 0x02:DS18B20_Updata_Info(); break; default :return 1; break; }
return 0; }
#endif
第 19 页
正在阅读:
企业伦理与文化复习题-贸大05-13
人教版八年级物理上册:第四章 第5节 光的色散教学设计04-14
试液配制操作规程10-05
上海高中历史第六分册(会考纲要求)03-25
大学生心理健康教育文化节活动方案05-08
苏州富怡达通过式喷淋清洗机05-28
川剧《变脸》观后感10-04
杨庙中心小学校园平整验收报告及经费决算08-16
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 万年历
- 温度
- 课程
- 图文
- 报告
- 设计
- 庆祝建党90周年党的知识竞赛试题含答案
- 普通地质学试题及答案
- 气排球比赛秩序册
- 地质构造及地质图
- 中级经济法 - 第一章 经济法总论第4.5节 - 2011年版
- 《心理学》姚本先版 重点总结
- 电信学院职业生涯规划大赛设计作品
- 基站电源维护要点
- 国外著名汽车品牌标志及来由(DOC)
- 人船模型的应用与拓展—李海华
- 必修三、四情景式默写教师版
- 执法考试题库(国家赔偿法)
- 最常见的要求书写离子方程式的化学方程式集锦
- 2005年上半年网络工程师下午试卷(解析)--网络工程师试题及答案
- 计算机绘图设计CORELDRAW教学方法初探探
- 石家庄地质概况
- 天津电大外国银行制度与业务一体化考试参考答案
- 检验检测机构资质认定评审报告模板
- 水文学复习考试题
- 大连理工大学大学物理振动与波动习题