欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
單片機仿真時候LM016L一直不顯示數據只亮而已,試了幾個例子也是這樣,請問問題在哪
[打印本頁]
作者:
萌新一個
時間:
2019-3-14 16:11
標題:
單片機仿真時候LM016L一直不顯示數據只亮而已,試了幾個例子也是這樣,請問問題在哪
1.png
(53.97 KB, 下載次數: 46)
下載附件
2019-3-14 16:07 上傳
作者:
wc86110
時間:
2019-3-14 21:33
空白芯片還能怎樣
作者:
wulin
時間:
2019-3-15 16:35
在沒有充分經驗的情況下不要試圖一下子把復雜的程序調通,你可以先把1602調通,再把按調通,然后調一路DS18b20,調通后再加到4路。要循序漸進。給你一個單路DS18b20測溫LCD1602顯示程序和仿真圖參考。
無標題.jpg
(160.24 KB, 下載次數: 44)
下載附件
2019-3-15 16:33 上傳
/*-----------------------------------------------
名稱:DS18b20測溫LED顯示(-55~128度)
------------------------------------------------*/
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define DataPort P0 //定義數據端口
/************定義端口*************/
sbit LCD_RS=P3^5; //液晶屏RS口 寫指令低,寫數據高
sbit LCD_EN=P3^4; //液晶屏EN口 高脈沖使能寫指令/數據,低跳變執行
sbit DQ=P2^2; //DS18B20 端口
/************定義全局變量*************/
uchar TempData[7]; //存儲顯示值的全局變量
bit ReadTempFlag; //讀時間標志
/*------------------------------------------------
函數聲明
------------------------------------------------*/
void WriteOneChar(uchar dat); //寫入DS18B20一個字節
uchar ReadOneChar(void); //讀取DS18B20一個字節
uint ReadTemperature(void); //讀取DS18B20溫度值
bit Init_DS18B20(void); //初始化DS18B20
void Init_Timer0(void); //定時器初始化
void DelayUs2x(uchar t); //uS延時函數
void DelayMs(uchar t); //mS延時函數
void LCDinit();
void write_com(uchar com);
void write_date(uchar date);
void delay(uint x);
/*------------------------------------------------
主函數
------------------------------------------------*/
void main()
{
uchar i;
uint temp;
long tempM;
bit negative;//負數標志
uchar TempH,TempL,TempK;
Init_Timer0();
LCDinit();
while(1) //主循環
{
if(ReadTempFlag==1)//定時標志
{
ReadTempFlag=0;
temp=ReadTemperature();//讀取溫度
if(temp&0x8000)
{
negative=1; //負號標志
temp=~temp; //取反加1
temp +=1;
}
else negative=0; //正數
tempM=temp*0.0625*100; //換算為10進制溫度值再放大100倍
TempH=tempM/100; //分解出整數值
TempL=tempM%100; //分解出小數值
TempL=(TempL+TempK)/2+0.5;//小數取兩次平均值加四舍五入
TempK=TempL;
/* TempH=temp>>4; //分解為整數
TempL=temp&0x0F; //分解為小數
TempL=TempL*6/10; //保留一位小數
*/
if(negative==1)
TempData[0]='-';//顯示負號
else if(TempH/100==0)//小于100
TempData[0]=' '; //百位消隱
else
TempData[0]=TempH/100+'0'; //顯示百位溫度
if((TempH/100==0)&&((TempH%100)/10==0))
TempData[1]=' '; //十位消隱
else
TempData[1]=(TempH%100)/10+'0'; //顯示十位溫度
TempData[2]=(TempH%100)%10+'0'; //顯示個位溫度
TempData[3]='.'; //顯示小數點
TempData[4]=TempL/10+'0'; //顯示溫度小數1位
TempData[5]=TempL%10+'0'; //顯示溫度小數2位
TempData[6]='C'; //顯示C
write_com(0x80); //數據指針第一行起始0x80位置
for(i=0;i<7;i++) //每循環一次寫一個字節數據
{
write_date(TempData[i]); //寫一個字節數據
}
}
}
}
/*------------------------------------------------
定時器初始化子程序
------------------------------------------------*/
void Init_Timer0(void)
{
TMOD |= 0x01; //使用模式1,16位定時器,使用"|"符號可以在使用多個定時器時不受影響
TH0=(65536-5000)/256; //給定初值
TL0=(65536-5000)%256;
EA=1; //總中斷打開
ET0=1; //定時器中斷打開
TR0=1; //定時器開關打開
}
/*------------------------------------------------
定時器中斷子程序
------------------------------------------------*/
void Timer0_isr(void) interrupt 1
{
static uint num;
TH0=(65536-5000)/256; //重新賦值 2ms
TL0=(65536-5000)%256;
num++;
if(num>=25) //500ms
{
num=0;
ReadTempFlag=1; //讀標志位置1
}
}
/*------------------------------------------------
uS延時函數,含有輸入參數 unsigned char t,無返回值
unsigned char 是定義無符號字符變量,其值的范圍是
0~255 這里使用晶振12M,精確延時請使用匯編,大致延時
長度如下 T=tx2+5 uS
------------------------------------------------*/
void DelayUs2x(uchar t)
{
while(--t);
}
/*------------------------------------------------
mS延時函數,含有輸入參數 unsigned char t,無返回值
unsigned char 是定義無符號字符變量,其值的范圍是
0~255 這里使用晶振12M,精確延時請使用匯編
------------------------------------------------*/
void DelayMs(uchar t)
{
while(t--)
{
//大致延時1mS
DelayUs2x(245);
DelayUs2x(245);
}
}
/*------------------------------------------------
18b20初始化
------------------------------------------------*/
bit Init_DS18B20(void)
{
bit dat=0;
DQ = 1; //DQ復位
DelayUs2x(5); //稍做延時
DQ = 0; //單片機將DQ拉低
DelayUs2x(200); //精確延時 大于 480us 小于960us
DelayUs2x(200);
DQ = 1; //拉高總線
DelayUs2x(50); //15~60us 后 接收60-240us的存在脈沖
dat=DQ; //如果x=0則初始化成功, x=1則初始化失敗
DelayUs2x(25); //稍作延時返回
return dat;
}
/*------------------------------------------------
讀取一個字節
------------------------------------------------*/
uchar ReadOneChar(void)
{
uchar i=0;
uchar dat = 0;
for (i=8;i>0;i--)
{
DQ = 0; // 給脈沖信號
dat>>=1;
DQ = 1; // 給脈沖信號
if(DQ)
dat|=0x80;
DelayUs2x(25);
}
return(dat);
}
/*------------------------------------------------
寫入一個字節
------------------------------------------------*/
void WriteOneChar(uchar dat)
{
uchar i=0;
for(i=8; i>0; i--)
{
DQ = 0;
DQ = dat&0x01;
DelayUs2x(25);
DQ = 1;
dat>>=1;
}
DelayUs2x(25);
}
/*------------------------------------------------
讀取溫度
------------------------------------------------*/
uint ReadTemperature(void)
{
uchar a=0;
uint b=0;
uint t=0;
Init_DS18B20();
WriteOneChar(0xCC); // 跳過讀序號列號的操作
WriteOneChar(0x44); // 啟動溫度轉換
DelayMs(10);
Init_DS18B20();
WriteOneChar(0xCC); //跳過讀序號列號的操作
WriteOneChar(0xBE); //讀取溫度寄存器等(共可讀9個寄存器) 前兩個就是溫度
a=ReadOneChar(); //低位
b=ReadOneChar(); //高位
b<<=8;
t=a+b;
return(t);
}
/*******100us延時程序********/
void delay(uint x)
{
uint a,b;
for(a=x;a>0;a--)
for(b=10;b>0;b--);
}
/*******液晶寫指令程序********/
void write_com(uchar com)
{
LCD_EN=0; //初始設置LCD_EN低電平
LCD_RS=0; //允許寫指令
P0=com; //傳遞指令
delay(10); //延時1ms
LCD_EN=1; //使能寫入
delay(10); //延時1ms
LCD_EN=0; //低跳變執行
}
/*******液晶寫數據程序********/
void write_date(uchar date)
{
// LCD_EN=0; //初始設置LCD_EN低電平
LCD_RS=1; //允許寫數據
P0 =date; //傳遞數據
delay(10); //延時1ms
LCD_EN=1; //使能寫入
delay(10); //延時1ms
LCD_EN=0; //低跳變執行
}
/*******液晶初始化程序********/
void LCDinit() //設置顯示模式、
{
write_com(0x38);//設置16*2顯示,5*7點陣,8位數據接口
write_com(0x01);//顯示清零,數據指針清零
// write_com(0x0f);//設置開顯示,顯示光標,光標閃爍
// write_com(0x0e);//設置開顯示,顯示光標,光標不閃
write_com(0x0c);//設置開顯示,不顯光標
write_com(0x06);//設置寫一個字符后地址指針加1
// write_com(0x07);//設置寫一個字符后整屏左移
write_com(0x80);//數據指針初始化,設置顯示初始位置
}
復制代碼
作者:
春風十里吹
時間:
2019-3-16 07:31
暈,你這個網上都有一模一樣的例子,不知道你為什么不先在網上找一找,看看別人的例子,再敲代碼!
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1