| 注册
home doc ppt pdf
请输入搜索内容

热门搜索

年终总结个人简历事迹材料租赁合同演讲稿项目管理职场社交

单片机课程设计报告基于单片机的温控系统

文***品

贡献于2020-11-08

字数:15460

职业学院
机械电子工程学院
基单片机温控系统课程设计报告
班 级 电信班
学生姓名
学 号
指导教师
时 间 2011


















目录


摘 I
1系统方案设计组成 I
2系统设计 1
21温度传感器工作原理单片机连接 1
22 DS1302原理脚 2
23单片机报警电路 3
24显示电路 3
241基操作时序 4
3系统软件设计 4




课题介绍基AT89C51单片机DS18B20数字温度传感器温度测量系统该系统利AT89C51单片机分采集温度点温度实现温度显示报警等功DS1302时钟芯片液晶显示前时间日期直观实AT89C51单片机控制芯片采数字温度传感器DS18B20实现温度检测测量精度达05℃该系统采1602显示模块形象直观显示测出温度值基AT89C51单片机单总线温度测控系统具硬件组成简单读数方便精度高测温范围广等特点实际工程中广泛应
关键词:温度传感器单片机温度控制DS1302 LCD


1系统方案设计组成
该方案AT89C51单片机作控制核心智温度传感器DS18B20温度测量元件点温度进行检测设置温度限超温度值报警DS1302时钟芯片液晶显示前时间日期显示电路采1602液晶模块显示三极电阻蜂鸣器组成报警电路钮处理模块等具温度控制实时时钟报警等功

89C52CPU

控制模块
键处理模块
温度采集模块

报警电路


LCD显示模块
DS1302时钟
采集模块




图21温度控制系统方案框


























2系统设计
21温度传感器工作原理单片机连接
温度传感器单总线(1Wire)单片机P2.7连接P2.7单片机高位址线P2端口带部拉电阻8位双I/O输出缓级驱动(吸收输出电流)4TTL逻辑门电路该端口写1通部拉电阻端口拉高电时作输入口部存拉电阻某引脚外部信号拉低时会输出电流
1示:DS18B20单片机接口电路非常简单DS18B20三引脚接接电源数字输入输出引脚接单片机IO口电源数字输入输出脚间需接47K电阻

图1温度传感器单片机连接图
DS18B20工作原理
DS18B20工作程
a.初始化:
DS18B20数交换初始化序列开始机发出复位脉DS18B20发出应答脉构成DS18B20发出响应机应答脉时机表明已处总线准备工作
b ROM命令:
ROM命令通器件64bitROM码机指定某特定器件(果器件挂总线)进行通信DS18B20ROM表36示ROM命令8 bit长
c 功命令:
机通功命令DS18B20进行读写Scratchpad存储器者启动温度转换 DS18B20信号方式
DS18B20采严格单总线通信协议保证数完整性该协议定义种信号类型:复位脉应答脉写0写1读0读1应答脉信号机发出步信号总线传输数命令字节低位前
a初始化序列:复位脉应答脉
b读写时序
写时序期间机DS18B20写入指令读时序期间机读入DS18B20指令时序总线传输位数读写时序图34示
写时序
存两种写时序:写1写0机写1时序DS18B20写入逻辑1写0时序DS18B20写入逻辑0写时序少需60µs两次写时序间少需1µs恢复时间两种写时序均机拉低总线开始
读时序
DS18B20机发出读时序时机传送数机发出读数命令必须马产生读时序便DS18B20够传送数读时序少60µs两次独立读时序间少需1µs恢复时间
22 DS1302原理脚
1DS1302引脚排列图

2 DS1302控制字节
  DS1302 控制字图示

控制字节高效位(位7)必须逻辑1果0数写入DS1302中位6果0表示存取日历时钟数1表示存取RAM数位5位1指示操作单元址低效位(位0)0表示进行写操作1表示进行读操作控制字节总低位开始输出 
 3数输入输出(IO)
  控制指令字输入SCLK时钟升时数写入DS1302数输入低位位0开始样紧8位控制指令字SCLK脉降读出DS1302数读出数时低位0位高位7
  

23单片机报警电路
系统中报警电路三极蜂鸣器发光二极限流电阻组成单片机P23端口连接温度超预设高温度低温度时蜂鸣器发出响声

报警电路

24显示电路
采技术成熟价格便宜1602液晶显示器做输出显示次设计1602液晶显示器5V电压驱动带背光显示两行行16字符显示汉字置128字符ASCII字符集字库行接口串行接口
241基操作时序
读状态 输入:RSL RWHEH 输出:D0~D7状态字
读数 输入:RSH RWHEH 输出:
写指令 输入:RSL RWLD0~D7指令码E高脉 输出:D0~D7数
写数 输入:RSH RWL D0~D7数E高脉 输出:

25 键处理模块
键处理调整前准确时间日期调整需监控温度限达温度限蜂鸣器报警图示键分布图

硬件安装两继电器温度报警时触发继电器控制外围电路

3系统软件设计
次软件采模块化编程程序中函数定义等代码进行分类实际两文件Ch文件名通常相h文件声明定义C文件函数实现采模块化编程处:
1 整工程脉络清晰代码规划合理
2 程序模块化利代码积累重复快速建立工程
3 程序模块编译未LIB库文件利源代码保密
31程序流程图

_MAIN_H_

#ifndef _MAIN_H_
#define _MAIN_H_

#include reg52h
#include INTRINSH
#include STRINGH
#include Delayh
#include Lcdh
#include DS1302h
#include DS18B20h
#include Keyh
#include DispMeauh

#define uchar unsigned char
#define uint unsigned int
extern char DispFlag
extern uint LTemper
extern uint HTemper
extern uchar Temper[10]
extern uchar Time[10]
extern uchar Date[10]

#endif



_MAIN_C_

#include Mainh

char DispFlag 允许显示标志 0允许 1允许
uchar Temper[10] 保存温度数
uchar Time[10] 保存时分秒数
uchar Date[10] 保存年月日数

uint LTemper2000
uint HTemper5000
uchar TimeStatus0

sbit bellP2^3
sbit led1P2^4
sbit led2P2^5
sbit led3P2^6

void WarnDisp(uint tpTmp)
{
if(tpTmp {
led11
led20
led30
bell0
}
else if(tpTmp>HTemper)
{
led10
led20
led31
bell0
}
else
{
led10
led21
led30
bell1
}
}
void main()
{
uint Tmp0
Init1302() 初始化 DS1302
Int_lcd() 初始化 lcd

ET01 时间中断0 允许中断
EA1 中断 允许
TMOD0x01 时间0 记数
TH0(6553615536)256
TL0(6553615536)256
TR01 允许记数0记数

DispFlag0 允许显示
led10
led20
led30
bell1
Tmpreadtmp() 取温度
delay(40000)
Tmpreadtmp() 取温度
delay(40000)
TimeStatus 0
while(1)
{
if(DispFlag0)
{
if(TimeStatus0) 时间调整状态
{
DealTime(Time Date) 获取需显示时间数
}


DealKey() 键处理

Tmpreadtmp() 取温度
WarnDisp(Tmp) 警报指示

DealTemper(Tmp Temper) 温度值转化成显示数
DispFlag1 允许显示
}
}
}
void t(void) interrupt 1 using 0
{
TH0(6553615530)256
TL0(6553615530)256
if(DispFlag1)
{
ScrDisp(0x80Date) 显示 日期(位置数)
ScrDisp(0xc0Time) 显示 时间
ScrDisp(0x89Temper) 显示 温度
DispFlag0
}
}

32 子程序流程图
DS1302

_DS1302_H_

#ifndef _DS1302_H_
#define _DS1302_H_

#include Mainh
void v_WTInputByte(unsigned char ucDa)
unsigned char uc_RTOutputByte(void)
void v_W1302(unsigned char ucAddr unsigned char ucDa)
unsigned char uc_R1302(unsigned char ucAddr)
void Init1302(void)
void DealTime(unsigned char *tpTime unsigned char *tpDate)
void SaveDate(unsigned char *tpDate)
void SaveTime(unsigned char *tpTime)

#endif

_DS1302_C_

#include Mainh

sbit T_RST P2^0 *实时时钟复位线引脚 *
sbit T_IO P2^1 *实时时钟数线引脚 *
sbit T_CLK P2^2 *实时时钟时钟线引脚 *

sbit ACC0ACC^0
sbit ACC7ACC^7


********************************************************************
*
* 名称 v_RTInputByte
* 说明
* 功 DS1302写入1Byte数
* 调
* 输入 ucDa 写入数
* 返回值
***********************************************
void v_WTInputByte(uchar ucDa)
{
uchar i
ACC ucDa
for(i8 i>0 i)
{
T_IO ACC0 *相汇编中 RRC
T_CLK 1
T_CLK 0
ACC ACC>> 1
}
}
***********************************************
*
* 名称 uchar uc_RTOutputByte
* 说明
* 功 DS1302读取1Byte数
* 调
* 输入
* 返回值 ACC
***********************************************
uchar uc_RTOutputByte(void)
{
uchar i
for(i8 i>0 i)
{
ACC ACC>>1 *相汇编中 RRC
ACC7 T_IO
T_CLK 1
T_CLK 0
}
return(ACC)
}
***********************************************
*
* 名称 v_W1302
* 说明 先写址写命令数
* 功 DS1302写入数
* 调 v_RTInputByte()
* 输入 ucAddr DS1302址 ucDa 写数
* 返回值
***********************************************
void v_W1302(uchar ucAddr uchar ucDa)
{
T_RST 0
T_CLK 0
T_RST 1
v_WTInputByte(ucAddr) * 址命令 *
v_WTInputByte(ucDa) * 写1Byte数*
T_CLK 1
T_RST 0
}
*********************************************** 名称 uc_R1302
* 说明 先写址读命令数
* 功 读取DS1302某址数
* 调 v_RTInputByte() uc_RTOutputByte()
* 输入 ucAddr DS1302址
* 返回值 ucDa 读取数
*********************************************
uchar uc_R1302(uchar ucAddr)
{
uchar ucDa
T_RST 0
T_CLK 0
T_RST 1
v_WTInputByte(ucAddr) * 址命令 *
ucDa uc_RTOutputByte() * 读1Byte数 *
T_CLK 1
T_RST 0
return(ucDa)
}

***********************************************
* 名称 Init1302
* 说明
* 功 初始化DS1302
* 调
* 输入
* 返回值
***********************************************
void Init1302(void)
{
v_W1302(0x8e0x00) 控制写入WP0
v_W1302(0x900xa5)
}
+48转换ACSII 码
void DealTime(uchar *tpTime uchar *tpDate)
{
uchar d 时间处理

tpTime[8] 0x00 数组结束符 '\0'
tpDate[8] 0x00 数组结束符 '\0'

duc_R1302(0x81) 读取时间 秒
tpTime[6](d>>4&0x0f)+48 处理十秒
tpTime[7](d&0x0f)+48 处理 秒

duc_R1302(0x83) 读取时间 秒
tpTime[3](d>>4&0x0f)+48 处理十分
tpTime[4](d&0x0f)+48 处理 分

duc_R1302(0x85) 读取 时
tpTime[0](d>>4&0x0f)+48 处理十时
tpTime[1](d&0x0f)+48 处理 时

duc_R1302(0x8D) 读取 年
tpDate[0](d>>4&0x0f)+48 处理十年
tpDate[1](d&0x0f)+48 处理 年

duc_R1302(0x89) 读取 月
tpDate[3](d>>4&0x0f)+48 处理十月
tpDate[4](d&0x0f)+48 处理 月

duc_R1302(0x87) 读取 日
tpDate[6](d>>4&0x0f)+48 处理十日
tpDate[7](d&0x0f)+48 处理 日
}

void SaveDate(uchar *tpDate)
{
uchar ymd

y (((tpDate[0]48)<<4)&0xf0)+(tpDate[1]48)
m (((tpDate[3]48)<<4)&0xf0)+(tpDate[4]48)
d (((tpDate[6]48)<<4)&0xf0)+(tpDate[7]48)

v_W1302(0x8e0x00) 控制写入WP0
v_W1302(0x900xa5)

v_W1302(0x86d) 日
v_W1302(0x88m) 月
v_W1302(0x8cy) 年
}

void SaveTime(uchar *tpTime)
{
uchar hms

h (((tpTime[0]48)<<4)&0xf0)+(tpTime[1]48)
m (((tpTime[3]48)<<4)&0xf0)+(tpTime[4]48)
s (((tpTime[6]48)<<4)&0xf0)+(tpTime[7]48)

v_W1302(0x8e0x00) 控制写入WP0
v_W1302(0x900xa5)

v_W1302(0x80s) 秒
v_W1302(0x82m) 分
v_W1302(0x84h) 时

delay(100)
}

二DS18B20

DS18B20读取温度程
_DS18B20_H_

#define _DS18B20_H_

void reset(void)
unsigned char readbyte(void)
void writebyte(unsigned char indata)
unsigned int readtmp(void)
void DealTemper(unsigned int tpTemper unsigned char *tpStr)

#endif

_DS18B20_C

#include Mainh
sbit DQP3^7

******************复位********************
void reset(void)
{ uchar flag0
DQ1
delay_10us(1)
DQ0
delay_10us(70) 少延时22us
DQ1
delay_10us(8)
flagDQ
delay_10us(15)
}

****************读字节*********************
uchar readbyte(void)
{
uchar ioutdata0
for(i0i<8i++)
{
DQ1
delay_10us(1)
DQ0
outdata>>1 必须15us读取
DQ1
if(DQ)
outdata|0x80
delay_10us(4)
}
return(outdata)
}

*****************写字节********************
void writebyte(uchar indata)
{
uchar i
for(i0i<8i++)
{
DQ1
delay_10us(1)
DQ0
DQindata&0x01 必须15us写入
delay_10us(5)
DQ1
indata>>1
}
delay_10us(4)
}

****************读温度***********************
uint readtmp(void)
{
uint tmp
uchar tlthtemptemp1
reset()
writebyte(0xcc) 跳序列号
writebyte(0x44) 启动温度转换
reset()
writebyte(0xCC)
writebyte(0xBE) 读9寄存器前两温度
tlreadbyte() 低位
threadbyte() 高位
temptl&0x0f 取低四位
temptemp*625 数部分
tl>>4
th<<4
temp1tl|th 整数部分
tmptemp1*100+temp 四位数高两位整数低两位数
delay(200)
return (tmp)
}

*******************************************
功 温度数处理
输入
uint tpTempe 温度值 高字节温度整位低字节温度数位
uchar *tpStr 整形数转化显示数输出
uchar *tpStr 整形数转化显示数返回
返回
***********************************************
void DealTemper(uint tpTemper uchar *tpStr)
{
tpStr[7] 0x00 数组结束符 '\0'
tpStr[6] 'C'
tpStr[5] 0xdf '度' 符号

tpStr[4]tpTemper10+48 取位 数位第二位
tpTemper10
tpStr[3]tpTemper10+48 取十位 数位第位
tpStr[2]'' 数点
tpTemper10
tpStr[1]tpTemper10+48 取百位 位
tpStr[0]tpTemper10+48 取千位 十位
}

三LCD1602
_LCD_H_

#ifndef _LCD_H_
#define _LCD_H_

void Int_lcd(void) 初始化
unsigned char lcd_r_start(void)
void lcd_w_cmd(unsigned char com)
void lcd_w_dat(unsigned char dat)

#endif

_LCD_C_

#include Mainh

sbit RSP3^4
sbit RWP3^5
sbit EP3^6

void Int_lcd(void)
{
lcd_w_cmd(0x3c) 设置工作方式
lcd_w_cmd(0x0c) 设置光标
lcd_w_cmd(0x01) 设置清屏
lcd_w_cmd(0x06) 设置输入方式
lcd_w_cmd(0x00) 设置初始显示位置
}

unsigned char lcd_r_start(void)
{
unsigned char s
RW1 RW1RS0读lcd状态
delay1()
RS0
delay1()
E1 E端时序 低高低
delay1()
sP1 lcd数口读状态
E0
delay1()
RW0
delay1()
return(s) 返回读取lcd状态字
}

void lcd_w_cmd(unsigned char com)
{
unsigned char i
do 查lcd忙操作
{
ilcd_r_start() 调读状态字函数
ii&0x80 操作屏蔽掉低7位
delay(2)
}
while(i0) lcd忙继续查询否退出循环
RW0
delay1()
RS0 RW1RS0写lcd命令字
delay1()
E1 E端时序
delay1()
P1com com中命令字写入lcd数口
delay1()
E0
delay1()
RW1
delay(255)
}

void lcd_w_dat(unsigned char dat)
{
unsigned char i
do 查忙操作
{
ilcd_r_start() 调读状态字函数
ii&0x80 操作屏蔽掉低7位
delay(2)
}
while(i0)
RW0
delay1()
RS1 RW1RS0写lcd命令字
delay1()
E1 E端时序
delay1()
P1dat dat中命令字写入lcd数口
delay1()
E0
delay1()
RW1
delay(255)
}




四.延时函数

_DELAY_H

#ifndef _DELAY_H_
#define _DELAY_H_

void delay_10us(unsigned int time)
void delay(unsigned int t)
void delay1(void)

#endif



_DELAY_C

#include Mainh

******************10us延时*****************************
名称: delay_10us
功: 延时10us
127us
237us
345us
456us
566us
676us
786us
10115us
1001ms
**********************************************
}
void delay_10us(unsigned int time)


{
while(time)
}

void delay(unsigned int t)
{
unsigned int n
n0
while(n return

void delay1(void)
{
_nop_()
_nop_()
_nop_()
}

五.键控制

_KEY_H_

#ifndef _KEY_H_
#define _KEY_H_

unsigned char DealKey(void)

#endif





_KEY_C_

#include Mainh

sbit key1P2^7 调整时间 时 年
sbit key2P3^0 调整时间 分 月
sbit key3P3^1 保存时间 秒 日
sbit key4P3^2 确定保存进入菜单选择模式
sbit key5P3^3 取消

uchar TimeStatus 0

uchar GetKey(void)
{
if (0key1)
{
if(TimeStatus 0) return 0
delay(100)
if (0key1)
{
while(1)
{
if(1key1)
{
delay(50)
if(1key1) break
}
}
return 1
}
}
else if (0key2)
{
if(TimeStatus 0) return 0
delay(100)
if (0key2)
{
while(1)
{
if(1key2)
{
delay(50)
if(1key2) break
}
}
return 2
}
}
else if (0key3)
{
if(TimeStatus 0) return 0
delay(100)
if (0key3)
{
while(1)
{
if(1key3)
{
delay(50)
if(1key3) break
}
}
return 3
}
}
else if (0key4)
{
delay(100)
if (0key4)
{
while(1)
{
if(1key4)
{
delay(50)
if(1key4) break
}
}
return 4
}
}
else if (0key5)
{
delay(100)
if (0key5)
{
while(1)
{
if(1key5)
{
delay(50)
if(1key5) break
}
}
return 5
}
}

return 0
}

uchar SetDate(uchar *tpDate)
{
uchar DispFlag0

ClrScr()
DispSetDate(0x80)
ScrDisp(0xc0tpDate)

while(1)
{
switch(GetKey())
{
case 0
break
case 1 调整年
if(tpDate[0]'9')
{
if(tpDate[1]<'9')
{
tpDate[1]++
}
else
{
tpDate[0] '0'
tpDate[1] '0'
}
}
else
{
if(tpDate[1]<'9')
{
tpDate[1]++
}
else
{
tpDate[0]++
tpDate[1] '0'
}
}
DispFlag 1
break
case 2 调整月

if (tpDate[3]<'1')
{
tpDate[4]++
if(tpDate[4]>'9')
{
tpDate[3]++
tpDate[4]'0'
}
}
else
{
if (tpDate[3]'1')
{
if(tpDate[4]<'1')
{
tpDate[4]++
}
else
{
tpDate[3]'0'
tpDate[4]'0'
}
}
else
{
tpDate[3]'0'
tpDate[4]'0'
}
}

DispFlag 1
break
case 3 调整日
if(tpDate[6]<'3')
{
tpDate[7]++
if(tpDate[7]>'9')
{
tpDate[6]++
tpDate[7]'0'
}
}
else
{
if(tpDate[6]>'3')
{
if(tpDate[7]<'1')
{
tpDate[7]++
}
else
{
tpDate[6]'0'
tpDate[7]'0'
}
}
}

DispFlag 1
break
case 4
SaveDate(tpDate)
return 4 保存时间
break
case 5
return 5 取消
break
default
break
}

if(DispFlag1)
{
DispFlag 0
ScrDisp(0xc0tpDate)
}
}
}

uchar SetTime(uchar *tpTime)
{
uchar DispFlag0

ClrScr()
DispSetTime(0x80)
ScrDisp(0xc0tpTime)

while(1)
{
switch(GetKey())
{
case 0
break
case 1 调整时间 时 位
if(tpTime[0]>'2')
{
if(tpTime[1]<'3')
{
tpTime[1]++
}
else
{
tpTime[0] '0'
tpTime[1] '0'
}
}
else
{
if(tpTime[1]<'9')
{
tpTime[1]++
}
else
{
tpTime[0]++
tpTime[1] '0'
}
}
DispFlag 1
break
case 2 调整时间 分 位
if(tpTime[4]<'9')
{
tpTime[4]++
}
else
{
if(tpTime[3]<'5')
{
tpTime[3]++
tpTime[4] '0'
}
else
{
tpTime[3] '0'
tpTime[4] '0'
}
}
DispFlag 1
break
case 3
if(tpTime[7]<'9')
{
tpTime[7]++
}
else
{
if(tpTime[6]<'5')
{
tpTime[6]++
tpTime[7] '0'
}
else
{
tpTime[6] '0'
tpTime[7] '0'
}
}
DispFlag 1
break
case 4
SaveTime(tpTime)
return 4 保存时间
break
case 5
return 5 取消
break
default
break
}

if(DispFlag1)
{
DispFlag 0
ScrDisp(0xc0tpTime)
}
}
}

uchar SetTMP(uchar LHmodeuint *tpTEMP)
{
uchar DispFlag0
uchar tpTMP[10]
uint tpTemper0

ClrScr()
switch(LHmode)
{
case 1
DispSetLTMP(0x80)
break
case 2
default
DispSetHTMP(0x80)
break
}


DealTemper(tpTempertpTMP)
ScrDisp(0xc0tpTMP)

while(1)
{
switch(GetKey())
{
case 0
break
case 1 调整温度 整数 位
if(tpTemper<10000) tpTemper + 100
else tpTemper tpTemper100
DispFlag 1
break
case 2 调整温度 数 位
if(tpTemper100<99) tpTemper ++
else tpTemper tpTemper100*100
DispFlag 1
break
case 3
break
case 4
*tpTEMP tpTemper
return 1 保存时间
break
case 5
return 0 取消
break
default
break
}

if(DispFlag1)
{
DispFlag 0
DealTemper(tpTempertpTMP)
ScrDisp(0xc0tpTMP)
}
}
return 0
}


uchar DealKey(void)
{
uchar MenuDeep0

while(1)
{
switch(GetKey())
{
case 0
TimeStatus 0
break
case 1 移动光标
if(TimeStatus 0) break
if(MenuDeep>0)
{
MenuDeep
DispMeau(MenuDeep)
}
break
case 2 移动光标
if(TimeStatus 0) break
if(MenuDeep<3)
{
MenuDeep++
DispMeau(MenuDeep)
}
break
case 3
break
case 4 确定
if(TimeStatus 1)
{
switch(MenuDeep)
{
case 0
SetDate(Date)
break
case 1
SetTime(Time)
break
case 2
SetTMP(1<emper)
break
case 3
SetTMP(2&HTemper)
break
}
TimeStatus 0
}
else
{
DispMeau(MenuDeep)
TimeStatus 1
}
break
case 5 取消
TimeStatus 0
break
default
break
}

if(TimeStatus 0) return 0
}
return 0
}


六.菜单显示

功:菜单显示出性化易操作
_DISPMEAU_H_

#ifndef _DISPMEAU_H_
#define _DISPMEAU_H_

void ScrDisp(unsigned char tpAddr unsigned char *tpStr)
void DispSetDate(unsigned char tpAddr)
void DispSetTime(unsigned char tpAddr)
void DispSetLTMP(unsigned char tpAddr)
void DispSetHTMP(unsigned char tpAddr)
void DispCursor(unsigned char tpAddr)
void DispMeau(unsigned char tpDeep)
void ClrScr(void)

#endif

_DISPMEAU_C_

#include Mainh

******************************
功:tpStr数组数tpAddr位置开始显示
输入参数
uchar tpAddr 显示起始位置
uchar *tpStr 显示容
输出

返回

************************************
void ScrDisp(uchar tpAddr uchar *tpStr)
{
uchar ilen

len strlen((char*)tpStr) 获取显示容字节数
lcd_w_cmd(tpAddr) 设置显示位置
for(i0i {
lcd_w_dat(tpStr[i])
}
}

void ClrScr(void) 清屏幕
{
ScrDisp(0x80 )
ScrDisp(0xc0 )
}

void DispSetDate(uchar tpAddr)
{
ScrDisp(tpAddrSet Date )
}

void DispSetTime(uchar tpAddr)
{
ScrDisp(tpAddrSet Time )
}

void DispSetLTMP(uchar tpAddr)
{
ScrDisp(tpAddrSet Low TMP )
}

void DispSetHTMP(uchar tpAddr)
{
ScrDisp(tpAddrSet High TMP )
}

void DispCursor(uchar tpAddr) 显示尖头指示符号
{
lcd_w_cmd(tpAddr) 设置显示位置
lcd_w_dat(0x7f)
}

void DispMeau(uchar tpDeep)
{
DispCursor(0x8d)

switch(tpDeep2)
{
case 0
DispSetDate(0x80)
DispSetTime(0xc0)
if(tpDeep20) DispCursor(0x8d)
else DispCursor(0xcd)
break
case 1
DispSetLTMP(0x80)
DispSetHTMP(0xc0)
if(tpDeep20) DispCursor(0x8d)
else DispCursor(0xcd)
break
default
break
}
}



文档香网(httpswwwxiangdangnet)户传

《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 5 香币 [ 分享文档获得香币 ]

该文档为用户出售和定价!

购买文档

相关文档

基于51单片机的定时闹钟设计单片机课程设计

单片机 课 程 设 计 报 告 院系: 信息工程学院 专业: 电子信息工程 课程设计题目: 基于51单片机的定时闹钟设计

文***品 2年前 上传497   0

基于单片机的交通灯显示系统的设计与研究课程设计

 XX学院课程设计课 程 单片机课程设计 题 目 交通灯系统 院 系 机电系 专业班级 学生姓名

文***品 3年前 上传901   0

基于单片机的自动节水灌溉系统课程设计

 数理与信息工程学院应用系统设计 题 目: 基于单片机的自动节水灌溉系统 专 业: 计算机科学与技术(专升本) 班 级: 计算机班 姓 名: 学号: 指导老师:

文***享 3年前 上传613   0

基于单片机的智能温控风扇设计毕业设计

XX职业技术学院毕业设计论文作者 学号 系部 电子信息学院 专业 物联网应用技术 题目 基于单片机的智能温控风扇设计

文***品 4年前 上传859   0

单片机课程设计报告

1 方案设计与论证1.1 硬件总体设计设计并制作一个基于单片机的数字电压表的电路其结构框图如图 1-1 所示: 图1-1 硬件结构框图(1)单片机最小系统电路部分 (2)数码管显示部分(3) PCF8591芯片 AD转换部分(4)外部电压采集部分

文***享 5年前 上传1671   0

基于单片机的北斗定位系统

现代社会空巢老人越来越多,老人因意外发生不能及时呼救给健康甚至生命安全带来威胁,因而,老人安全监护受到越来越多的关注。为了解决这一问题,本次设计使用了STC12C5A60S2单片机作为主处理器,以UM220模块作为核心,结合LCD12864显示模块、蜂鸣器、SIM900模块,实现了多功能报警系统。

爱***享 3年前 上传1103   0

基于单片机的时钟设计

随着时间的推移,事物的发展越来越趋向于高科技,单片机的出现,受到了社会各界的广泛关注,这是由于单片机具备丰富的功能。单片机的特点为:尺寸小,价格低,抗干扰强,开发容易等。运用的范围也很广,如检测,仪表,电子,机电等设备的各方面都有不可或缺的作用。

王***朝 4年前 上传1036   0

单片机课程设计实习报告

单片机课程设计实习报告  实训任务:  做单一灯的左移右移,八个发光二极管l1-l8分别接在单片机的p1.0→p1.2→p1.3┅→p1.7→p1.6→┅→p1.0亮,重复循环3次。然后左移2次,右移2次,闪烁2次(延时的时间0.2秒)。  一、 实训目的和要求:  (1) 熟练掌握keil c51集成开发环境的使用方法  (2) 熟悉keil c51集成开发环境调试功能的使

a***冰 11年前 上传820   0

开题报告-基于单片机的交通灯设计

开题报告电气工程及自动化基于单片机的交通灯设计一、综述本课题国内外研究动态,说明选题的依据和意义当今社会,随着日益增长的社会发展,人们对于社活的水平也日益提高,不仅在物质享受方面有所提高,在精神享受方面也逐渐增长。最明显的就是汽车的增长。现在几乎每户人家都有一辆汽车,以至于道路经常堵塞,频繁出现交通事故。由于这种状况的出现,这就要求能有效的管理交通,其中十字路口的交通灯起着巨大的作用。因

毕***阁 4年前 上传1254   0

基于单片机的智能小车设计开题报告

电气与信息学院毕业设计(论文)开题报告 基于单片机的智能小车设计 电子 题目名称:报 告 人:专业班级:指导教师:《基于单片机的智能小车设计》开题报告一、课题的

文***品 5个月前 上传312   0

最新研究报告-基于单片机的步进控制系统的开发

常 州 工 学 院PROTEL应用实践 题 目 用ProtelDXP软件设计的步进电机二级学院 电子信息与电气工程学院 班 级 09 信 姓 名 孙冰笑 学 号 09020123

教育的乐趣 2年前 上传289   0

开题报告-基于单片机的汽车超速报警系统设计

开题报告电气工程及自动化基于单片机的汽车超速报警系统设计一、综述本课题国内外研究动态,说明选题的依据和意义随着我国改革开放的继续深入以及国家经济战略的实施下,我国的市场经济不断发展,人民生活水品不断提高,普通老百姓的购买力也越来越高。以前对于大家来说还是很遥远的很奢侈的汽车已经走进千家万户,成为大家出行的主要交通工具。但是伴随而来的问题也逐步显现出来,那就是近几年我国的交通事故次数越来越

毕***阁 4年前 上传1036   0

基于单片机的遥控窗帘课程设计

《单片机应用与仿真训练》设计报告基于单片机的遥控窗帘设计姓 名: 学 号: 专业班级: 11电气升班 指导老师:   所在学院: 电气工程与自动化系

z***u 1年前 上传294   0

基于单片机的拔河游戏机设计课程设计

××大学××学院××课程设计基于单片机的拔河游戏机设计学生姓名学 号所 在 系专业名称班 级指导教师成 绩 ××大学××学院二○一二年X月摘要:近年来随着计算机在社会领域的渗透和大规模集成电

文***享 3年前 上传585   0

基于单片机的数字温度计设计课程设计

基于单片机的数字温度计设计引言随着现代信息技术的飞速发展和传统工业改造的逐步实现.能够独立工作的温度检测和显示系统应用于诸多领域。传统的温度检测以热敏电阻为温度敏感元件。热敏电阻的成本低,但需后续信号处理电路,而且可靠性相对较差,测温准确度低,检测系统也有一定的误差。与传统的温度计相比,这里设计的数字温度计具有读数方便,测温范围广,测温精确,数字显示,适用范围宽等特点。选用AT89C51型单

文***享 3年前 上传939   0

基于单片机的数字温度计课程设计

摘要 本文提出了关于MCS-51系列单片机的数字温度计的制作电路方法和编程思想。设计一直灌输着电子电路制作软硬结合,以硬件为主的理念。采用模块化的设计思想。硬件模块分为温度的感应模块、时钟模块、控制模块、显示模块。软件同样采用模块化设计,分为中断模块、温度转化模块、时间调整模块。控制器采用单片机AT89S51,时钟电路采用万年历芯片DS1302,温度传感器采用DS18B20,用数码管并行

文***享 3年前 上传784   0

基于51单片机数字温度计设计课程设计

课 题: 基于51单片机数字温度计设计专 业: 电子信息工程班 级: 班学 号: 姓 名: 指导教师: 设计日期:成 绩:XX大学XX学院电气学院 基于51单片机数字温度计设计一、设计目的 1、掌握单片机电路的设计原理

文***品 3年前 上传977   0

基于单片机的“叮咚”门铃设计课程设计

基于单片机的“叮咚”门铃设计摘要:本文设计了一种基于单片机的“叮咚”门铃,主要有键盘,音频功率放大器LM386,AT89S51单片机,扬声器等构成,通过单片机定时/计数器t0来产生700Hz和500Hz的频率来使扬声器发出“叮咚”声音。关键词:AT89C51单片机 ;扬声器 ;频率;前言:1在现代电子产品中,“叮咚”门铃以它成本低,方便快捷等优点占据了很大的市场空间。本课程设计是基于

文***品 3年前 上传760   0

基于单片机淬火炉温温度控制课程设计

基于PID控制的淬火炉炉温控制系统设计1总体方案设计 这次课程设计针对PID控制的淬火炉进行温度控制,设计步骤分为以下几步。 首先进行控制系统的建模和数字控制器设计,设计方案为:选用Ziegler-Nichols方法进行PID参数整定,建立闭环控制系统,用MATLAB仿真,得到达到要求的PID参数。A/D转换温度采集加热电路D/A转换AT89C52单片机硬件的设计与

文***品 1年前 上传342   0

基于单片机的直流稳压电源设计课程设计

课程设计论文 设计题目:单片机控制直流稳压电源设计学校:院系:专业:年级:2013级姓名学号: 指导教师 单片机控制的直流稳压电源设计摘要: 本系统以 AT89S52 单片机作为系统的核心,由D/A数字模拟转换模块、按键、LED串口显示模块等模块组成一个

文***享 4年前 上传906   0

基于51单片机音乐盒课程设计

基于51单片机音乐盒课程设计 课程名称: 微机原理课程设计 题 目: 基于51单片机的音乐盒设计 摘要 随着人类社会的发展,人们对视觉、听觉方面的享受提出了越来越高的要求。小小的音乐盒可以给人们带来美好的回忆,提高人们的精神文化享受。传统音乐盒多是机械型的,体积笨重,发音单调,不能实现批量生产。本设计是一个基于STC89C52RC系列单片机的音乐盒,依据单片机技术原理,通过硬件电路

l***金 5年前 上传1274   0

单片机简易电子琴单片机课程设计

XX学院课程设计报告课程名称:单片机原理及应用课程设计设计题目: 电子琴设计 系 别: 通信与控制工程系 专 业: 电子信息工程 班 级: 学生姓名:

文***品 2年前 上传493   0

基于单片机的温湿度控制器设计课程设计报告

《智能仪器仪表设计与调试》课程设计报告 学 院: 电气与信息工程学院 专业班级: 测控10-01 学生姓名: 学 号: 设计地点(单位)_________ __I506_ _____ ___ __设计题目:_____ _

文***品 1年前 上传310   0

单片机课程设计心得(精选多篇)

单片机课程设计心得(精选多篇)第一篇:单片机课程设计心得单片机课程设计实训体会两周的单片机课程设计实训 ,真是让我们受益匪浅,学到了很多东西,不管怎么样,先感谢学校给我的这么多机会.真正的学到了东西.此次课程设计软件与硬件相结合,考察了我们的焊接水平与编程能力.因为以前做过关于焊接的电工实习,所以对于我们机械设计专业的学生而言焊接是不成问题,也很顺利;可到了编程时就出现了很大的障

y***l 9年前 上传675   0

单片机原理及应用课程设计

单片机课程设计数字音频频率测试仪班级:电气姓名:学号:日期:2010年X月X日 目录一、课程设计要求···········································1软硬件设计要求············································1二、设计思路 2.1.程序设计基本思路···················

文***品 3年前 上传804   0