机械电子工程学院
基单片机温控系统课程设计报告
班 级 电信班
学生姓名
学 号
指导教师
时 间 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
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)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档