資源簡介
液晶溫度計.zip

代碼片段和文件信息
/*作者:王先生
51單片機:清華電子的板
聯系方式:QQ:2019529860*/
#include
#include
#include
typedef?unsigned?char?uchar;
typedef?unsigned?int??uint;
sbit?DS?=?P2^2;//DS18B20接口
sbit?BP?=?P2^3;//蜂鳴器
sbit?DU?=?P2^6;//數碼管段選碼
sbit?WE?=?P2^7;//數碼管位選碼
sbit?key_s1?=?P3^0;
sbit?key_s2?=?P3^1;
sbit?key_s3?=?P3^2;
sbit?EN?=?P3^4;//LCD使能端
sbit?RS?=?P3^5;//LCD數據命令選擇端
sbit?RW?=?P3^6;//LCD讀寫選擇端
uint?FF;
uint?DDLL;
uint?K=0;
uint?M=0;
uint?s=0;
void?delayus(uchar?us)
{
while(us--);//us--要6.5us進入一次函數11.95us;
}?//微秒延時
void?LCD_READ_BUSY()?//忙不忙
{
uchar?busy;
P0?=?0XFF;
RS?=?0;
RW?=?1;
do
{
EN?=?1;
busy?=?P0;
EN?=?0;
}while(busy&0X80);
EN?=?1;
} ??
void?LCD_WRITE_CMD(uchar?cmd)//寫一個字節命令流程
{
LCD_READ_BUSY();//判斷忙不忙
RS?=?0;
RW?=?0;
P0?=?cmd;
EN?=?1;
EN?=?0;
}
void?LCD_WRITE_DATE(uchar?dat)//寫一個字節數據
{
LCD_READ_BUSY();
RS?=?1;
RW?=?0;
P0?=?dat;
EN?=?1;
EN?=?0;
}
void?LCD_OneChar(uchar?x?uchar?yuchar?dat)//指定位置顯示字符
{
if(y)
x?|=?0x40;//位選或
x?|=?0x80;
LCD_WRITE_CMD(x);
LCD_WRITE_DATE(dat);
}
void?LCD_Str(uchar?x?uchar?y?uchar?*str)//指定位置顯示字符串
{
if(y)?
x?|=?0x40;
x?|=?0x80;
LCD_WRITE_CMD(x);
while(*str?!=?‘\0‘)
{
LCD_WRITE_DATE(*str++);
}
}
void?LCD_Init() ?// 初始化
{
LCD_WRITE_CMD(0x38);?// 設置16*2顯示,5*7點陣,8位數據接口
LCD_WRITE_CMD(0x0c);?//開顯示
LCD_WRITE_CMD(0x06);?//讀寫一字節后地址指針加1
LCD_WRITE_CMD(0x01);?//清除顯示
}
bit?ds_init()//單總線初始化程序
{
bit??i;
DS?=?1;
_nop_();
DS?=?0;
delayus(75);//拉低總線;保持480us以上,75*6.5+11.95=499.45ms
DS?=?1;//釋放總線
delayus(1);//1*6.5+11.95=18.45us等待發回信號(15-60us)
i?=?DS;
delayus(20);//讀取存在信號的時間20*6.5+11.95=141.95us
DS?=?1; //釋放總線
_nop_();?
return(i);//i=0代表DS18B20已經準備好了
}
void?displayN(int?c)//溫度正常顯示
{
uint?i;
uchar?M1M2M3M4;
uchar?TestStr[]?=?{“Tem:“};
uchar?TestStr1[]?=?{“DB:WYX“};
/*if(c<0)
{m?=?2;}
else?if(c>=0)
{m?=?0;}*/
i?=?abs(c);
M1?=?i/1000;//千位
M2?=?i%1000/100;//百位
M3?=?i%1000%100/10;//十位?
M4?=?i%10; //個位
DU?=?0;
WE?=?0;//關閉數碼管顯示
LCD_Init();//1602初始化
LCD_Str(0?0?&TestStr[0]); //顯示字符串
LCD_Str(0?1?&TestStr1[0]); //顯示字符串
LCD_OneChar(6??0?43+s);//正負號
LCD_OneChar(7?0?M1+48);?//顯示溫度
LCD_OneChar(8?0?M2+48);
LCD_OneChar(9??0?M3+48);//正負號
LCD_OneChar(10?0?46);
LCD_OneChar(11?0?M4+48);
LCD_OneChar(12?0?39);
LCD_OneChar(13?0?67);
LCD_OneChar(15?0?78+DD*10);??//顯示蜂鳴器開關
LCD_OneChar(15?1?78+LL*10);??//顯示指示燈開關
}
void?displayM(int?c)
{
uchar?M1M2M3M4;
int?im;
uchar?TestStr[]?=?{“Tem:“};?
uchar?TestStr1[]?=?{“High“};
if(c<0)
{m?=?2;}
else?if(c>=0)
{m?=?0;}
i?=?abs(c);
M1?=?i/1000;//千位
M2?=?i%1000/100;//百位
M3?=?i%1000%100/10;//十位?
M4?=?i%10; //個位
DU?=?0;
WE?=?0;//關閉數碼管顯示
LCD_Init();//1602初始化
LCD_Str(0?0?&TestStr[0]); //顯示字符串
LCD_Str(7?1?&TestStr1[0]); //顯示字符串
LCD_OneChar(6??0?43+m);//正負號
LCD_OneChar(7?0?M1+48);?//顯示溫度
LCD_OneChar(8?0?M2+4
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2018-09-04?10:30??液晶溫度計\
?????文件???????29876??2018-07-03?09:04??液晶溫度計\DS18B20-LCD
?????文件???????11104??2018-09-04?10:30??液晶溫度計\DS18B20-LCD.c
?????文件???????11656??2018-07-03?09:04??液晶溫度計\DS18B20-LCD.hex
?????文件??????????54??2018-07-03?09:04??液晶溫度計\DS18B20-LCD.lnp
?????文件???????27373??2018-07-03?09:04??液晶溫度計\DS18B20-LCD.LST
?????文件???????36749??2018-07-03?09:04??液晶溫度計\DS18B20-LCD.M51
?????文件???????35294??2018-07-03?09:04??液晶溫度計\DS18B20-LCD.OBJ
?????文件?????????214??2018-09-04?10:30??液晶溫度計\DS18B20-LCD.plg
?????文件???????55777??2018-09-04?10:30??液晶溫度計\DS18B20-LCD.uvopt
?????文件???????13246??2018-07-01?19:13??液晶溫度計\DS18B20-LCD.uvproj
?????文件???????55783??2018-07-03?11:11??液晶溫度計\DS18B20-LCD_uvopt.bak
?????文件???????13247??2018-06-27?13:04??液晶溫度計\DS18B20-LCD_uvproj.bak
- 上一篇:LIN總線物理層設計評估
- 下一篇:中國各省邊界shape文件
評論
共有 條評論