余昌乐单片机课程设计文档格式.docx

上传人:b****3 文档编号:8285721 上传时间:2023-05-10 格式:DOCX 页数:20 大小:190.79KB
下载 相关 举报
余昌乐单片机课程设计文档格式.docx_第1页
第1页 / 共20页
余昌乐单片机课程设计文档格式.docx_第2页
第2页 / 共20页
余昌乐单片机课程设计文档格式.docx_第3页
第3页 / 共20页
余昌乐单片机课程设计文档格式.docx_第4页
第4页 / 共20页
余昌乐单片机课程设计文档格式.docx_第5页
第5页 / 共20页
余昌乐单片机课程设计文档格式.docx_第6页
第6页 / 共20页
余昌乐单片机课程设计文档格式.docx_第7页
第7页 / 共20页
余昌乐单片机课程设计文档格式.docx_第8页
第8页 / 共20页
余昌乐单片机课程设计文档格式.docx_第9页
第9页 / 共20页
余昌乐单片机课程设计文档格式.docx_第10页
第10页 / 共20页
余昌乐单片机课程设计文档格式.docx_第11页
第11页 / 共20页
余昌乐单片机课程设计文档格式.docx_第12页
第12页 / 共20页
余昌乐单片机课程设计文档格式.docx_第13页
第13页 / 共20页
余昌乐单片机课程设计文档格式.docx_第14页
第14页 / 共20页
余昌乐单片机课程设计文档格式.docx_第15页
第15页 / 共20页
余昌乐单片机课程设计文档格式.docx_第16页
第16页 / 共20页
余昌乐单片机课程设计文档格式.docx_第17页
第17页 / 共20页
余昌乐单片机课程设计文档格式.docx_第18页
第18页 / 共20页
余昌乐单片机课程设计文档格式.docx_第19页
第19页 / 共20页
余昌乐单片机课程设计文档格式.docx_第20页
第20页 / 共20页
亲,该文档总共20页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

余昌乐单片机课程设计文档格式.docx

《余昌乐单片机课程设计文档格式.docx》由会员分享,可在线阅读,更多相关《余昌乐单片机课程设计文档格式.docx(20页珍藏版)》请在冰点文库上搜索。

余昌乐单片机课程设计文档格式.docx

华氏相当于是-67°

F到257华氏度-10°

C至+85°

C范围内精度为±

0.5°

3、LCD1602

1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。

它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。

1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。

市面上字符液晶大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。

3、设计功能模块

本部分主要是进行相关的软件模块的设计,因为我们都知道不可能把所有的程序都写到一个主源文件中,这样不但写程序不好写,就连可读性也大大下降了,所以模块化的程序是必须的。

模块化设计就是通过相应的头文件和源文件的设计,同时一定要注意模块的高内聚、低耦合。

1、延时模块的设计

延时模块的头文件:

#ifndef__DELAY_H

#define__DELAY_H

#include"

reg52.h"

#defineucharunsignedchar

#defineuintunsignedint

voiddelay_ms(uintms);

voiddelay_us(uintus);

#endif

延时模块的源文件:

intrins.h"

delay.h"

//毫秒的延时函数

voiddelay_ms(uintms)

{

uchari;

while(ms--)

{

for(i=0;

i<

115;

i++);

}

}

//微妙的延时函数

voiddelay_us(uintus)

while(us--)

_nop_();

2、实时时钟走时模块的设计,主要通过定时器来产生秒定时,并通过定时器中断来实现。

实时时钟走时的头文件:

#ifndef__TIME_H

#define__TIME_H

voidTIME0_Init(void);

实时时钟的源文件:

time.h"

uchartime0_count;

ucharshi,fen,miao;

voidTIME0_Init(void)

TMOD=0x01;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

EA=1;

ET0=1;

TR0=1;

voidTIME0(void)interrupt1

time0_count=time0_count+1;

if(time0_count==20)

time0_count=0;

miao=miao+1;

if(miao==60)

{

miao=0;

fen=fen+1;

if(fen==60)

{

fen=0;

shi=shi+1;

if(shi==24)

{

shi=0;

}

}

}

3、DS18B20模块设计,这部分主要的功能就是对温度传感器进行初始化。

DS18B20头文件:

#ifndef__DS18B20_H

#define__DS18B20_H

sbitDQ=P3^3;

//ds18b20数据位接口

bitds18b20_start(void);

voidds18b20_write(uchardat);

uchards18b20_read(void);

voidds18b20_init(void);

DS18B20源文件:

ds18b20.h"

uchartable_rom[8];

/*ds18b20的开始函数设置*/

bitds18b20_start(void)

uchartime;

bitflag;

DQ=1;

_nop_();

DQ=0;

for(time=0;

time<

200;

time++);

20;

flag=DQ;

100;

returnflag;

/*向ds18b20中写入数据*/

voidds18b20_write(uchardat)

uchari,time;

for(i=0;

8;

i++)

DQ=1;

DQ=0;

DQ=dat&

0x01;

for(time=0;

10;

dat=dat>

>

1;

5;

/*从ds18b20中读数*/

uchards18b20_read(void)

uchardat;

2;

if(DQ==1)

dat=dat|0x80;

else

dat=dat|0x00;

returndat;

/*ds18b20的初始化函数*/

voidds18b20_init(void)

ds18b20_start();

/*ds18b20_write(0xcc);

//跳过ROM

ds18b20_write(0x44);

//温度转换指令

delay_ms(500);

//500毫秒的延时

ds18b20_write(0xcc);

ds18b20_write(0xbe);

*///读取温度的指令

ds18b20_write(0x55);

ds18b20_write(table_rom[0]);

ds18b20_write(table_rom[1]);

ds18b20_write(table_rom[2]);

ds18b20_write(table_rom[3]);

ds18b20_write(table_rom[4]);

ds18b20_write(table_rom[5]);

ds18b20_write(table_rom[6]);

ds18b20_write(table_rom[7]);

delay_ms(400);

4、LCD1602模块设计,主要是液晶模块的初始化,为温度和实时时钟的显示提供支持。

LCD1602模块的头文件:

#ifndef__LCD1602_H

#define__LCD1602_H

voidlcd1602_write_com(ucharcom);

voidlcd1602_write_dat(uchardat);

voidlcd1602_init(void);

LCD1602模块的源文件:

lcd1602.h"

sbitlcdrs=P2^0;

//指令、数据选择位

sbitlcdrw=P2^1;

//读、写选择位

sbitlcden=P2^2;

//LCD1602使能位

/*向lcd1602中写指令的函数*/

voidlcd1602_write_com(ucharcom)

lcdrs=0;

lcdrw=0;

lcden=0;

P0=com;

delay_ms

(1);

lcden=1;

/*向lcd1602中写数据的子函数*/

voidlcd1602_write_dat(uchardat)

lcdrs=1;

P0=dat;

/*lcd1602初始化配置函数*/

voidlcd1602_init(void)

lcd1602_write_com(0x38);

delay_ms(10);

lcd1602_write_com(0x0c);

lcd1602_write_com(0x06);

lcd1602_write_com(0x01);

5、主函数模块,这部分是本次程序设计的主体,这部分通过对其他几个模块的调用可以很好地实现程序的功能。

sbitK5=P1^4;

//K5控制校时的类型

sbitK6=P1^5;

//K6加一计数

sbitK7=P1^6;

//K7减一计数

ucharflag,flag1,K5_Num;

//flag时间控制与显示的标志位,flag1温度的负号标志位

voidread_ds18b20_rom(void);

//读取DS18B20的64位ROM

voidds18b20_rom_display(void);

//DS18B20ROM显示在LCD1602上

voidds18b20_temperature_display(void);

//温度显示

voidShiZhong_display(void);

//时钟显示

voidKEY_Scan_And_Control(void);

//通过扫描按键的校时函数

externuchartable_rom[8];

//存放DS18B20的64位ROM值

externucharshi,fen,miao;

//存储时间的三个全局变量

uchardisplay_temperature[4];

//存储温度数据

ucharcodetable_number[]=

"

0123456789ABCDEF"

};

/*显示温度的单位*/

ucharcodetable_tempature_signal[]=

0x10,0x06,0x09,0x08,

0x08,0x09,0x06,0x00

voidmain(void)

lcd1602_init();

read_ds18b20_rom();

ds18b20_rom_display();

TIME0_Init();

while

(1)

ds18b20_init();

display_temperature[0]=ds18b20_read();

//读取温度低八位

display_temperature[1]=ds18b20_read();

//读取温度的八位

ds18b20_temperature_display();

ShiZhong_display();

KEY_Scan_And_Control();

voidread_ds18b20_rom(void)

uchartemp;

ds18b20_write(0x33);

for(temp=0;

temp<

temp++)

table_rom[temp]=ds18b20_read();

voidds18b20_rom_display(void)

lcd1602_write_com(0x80+0x40+0x0e);

lcd1602_write_dat(table_number[table_rom[0]/16]);

lcd1602_write_dat(table_number[table_rom[0]%16]);

lcd1602_write_com(0x80+0x40+0x0c);

lcd1602_write_dat(table_number[table_rom[1]/16]);

lcd1602_write_dat(table_number[table_rom[1]%16]);

lcd1602_write_com(0x80+0x40+0x0a);

lcd1602_write_dat(table_number[table_rom[2]/16]);

lcd1602_write_dat(table_number[table_rom[2]%16]);

lcd1602_write_com(0x80+0x40+0x08);

lcd1602_write_dat(table_number[table_rom[3]/16]);

lcd1602_write_dat(table_number[table_rom[3]%16]);

lcd1602_write_com(0x80+0x40+0x06);

lcd1602_write_dat(table_number[table_rom[4]/16]);

lcd1602_write_dat(table_number[table_rom[4]%16]);

lcd1602_write_com(0x80+0x40+0x04);

lcd1602_write_dat(table_number[table_rom[5]/16]);

lcd1602_write_dat(table_number[table_rom[5]%16]);

lcd1602_write_com(0x80+0x40+0x02);

lcd1602_write_dat(table_number[table_rom[6]/16]);

lcd1602_write_dat(table_number[table_rom[6]%16]);

lcd1602_write_com(0x80+0x40+0x00);

lcd1602_write_dat(table_number[table_rom[7]/16]);

lcd1602_write_dat(table_number[table_rom[7]%16]);

voidds18b20_temperature_display(void)

if((display_temperature[1]&

0xf8)==0xf8)

flag1=1;

display_temperature[1]=~display_temperature[1];

display_temperature[0]=~display_temperature[0];

if(display_temperature[0]==0xff)

display_temperature[0]=0;

display_temperature[1]=display_temperature[1]+1;

else

flag1=0;

display_temperature[0]=display_temperature[0]+1;

display_temperature[2]=display_temperature[1]*16+display_temperature[0]/16;

display_temperature[3]=display_temperature[0]%16*10/16;

lcd1602_write_com(0x80+0x00);

lcd1602_write_dat(table_number[display_temperature[2]/100]);

lcd1602_write_dat(table_number[display_temperature[2]%100/10]);

lcd1602_write_dat(table_number[display_temperature[2]%10]);

lcd1602_write_dat('

.'

);

lcd1602_write_dat(table_number[display_temperature[3]]);

lcd1602_write_com(0x40);

lcd1602_write_dat(table_tempature_signal[temp]);

lcd1602_write_com(0x80+0x05);

lcd1602_write_dat(0x00);

if(flag1==1)

lcd1602_write_com(0x80+0x00);

lcd1602_write_dat('

-'

voidShiZhong_display(void)

if(flag1==0)

lcd1602_write_com(0x80+0x0e);

lcd1602_write_dat(table_number[miao/10]);

lcd1602_write_dat(table_number[miao%10]);

lcd1602_

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 职业教育 > 职业技术培训

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

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