欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
51單片機+LCD12864溫濕度檢測只亮不顯示的問題
[打印本頁]
作者:
4546hugu
時間:
2019-4-18 12:29
標題:
51單片機+LCD12864溫濕度檢測只亮不顯示的問題
0.png
(102.57 KB, 下載次數: 26)
下載附件
2019-4-18 15:08 上傳
這個只亮不顯示,為什么?要怎么改啊?
sbit LCD_CS = P0^0; //片選信號輸入
sbit LCD_STD = P0^1; //串行數據輸入
sbit LCD_SCLK = P0^2; //串行時鐘輸入
void delay_nms(uint t)
{
uint i;
uchar j;
for(i=0;i<t;i++)
for(j=0;j<110;j++);
}
/*********************************************************
*函數功能:向lcd12864串行輸入一個字節
**********************************************************/
void send_byte(uchar Dbyte)
{
uchar i;
for(i=0;i<8;i++)
{
LCD_SCLK = 0;
Dbyte = Dbyte<<1;
LCD_STD = CY;
LCD_SCLK = 1;
_nop_();
LCD_SCLK = 0;
}
}
/*********************************************************
*函數功能:接收lcd12864輸出的一個有效字節
**********************************************************/
uchar recive_byte()
{
uchar temp1,temp2,i;
bit flag;
temp1 = 0;
temp2 = 0;
for(i=0;i<8;i++)//接收有效字節的高四位
{
temp1 = temp1<<1;
LCD_SCLK = 0;
LCD_SCLK = 1;
_nop_();
LCD_SCLK = 0;
flag = LCD_STD;
if(flag==1)
temp1 = temp1&0x01;
}
for(i=0;i<8;i++)//接收有效字節的低四位
{
temp2 = temp2<<1;
LCD_SCLK = 0;
LCD_SCLK = 1;
_nop_();
LCD_SCLK = 0;
flag = LCD_STD;
if(flag==1)
temp2 = temp2&0x01;
}
return ((temp1&0xf0)|(temp2&0x0f));//返回接收到的有效字節
}
/*********************************************************
*函數功能:檢測忙標志位
**********************************************************/
void lcd12864_checkbusy()
{
do
{
send_byte(0xfc);//1111 1【1 RW】【0 RS】0
}while(recive_byte()&0x80==0x80); //BF(.7)=1 Busy
}
/*********************************************************
*函數功能:向12864寫命令函數
**********************************************************/
void lcd12864_write_com(uchar com)
{
LCD_CS = 1;
lcd12864_checkbusy();//檢測忙信號
send_byte(0xf8);//1111 1[0 rw][0 rs]0 寫命令起始指令
send_byte(com&0xf0);
send_byte((com<<4)&0xf0);
LCD_CS = 0;
}
/*********************************************************
*函數功能:向12864寫數據函數
**********************************************************/
void lcd12864_write_dat(uchar dat)
{
LCD_CS = 1;
lcd12864_checkbusy();//檢測忙信號
send_byte(0xfa);//1111 1[0 rw][1 rs]0 寫數據起始指令
send_byte(dat&0xf0);
send_byte((dat<<4)&0xf0);
LCD_CS = 0;
}
/*********************************************************
*函數功能:設置光標位置
**********************************************************/
void lcd12864_set_cursor(uchar x,uchar y)
{
uchar addr;
switch(x)//確定行
{
case 0x00:addr = 0x80;break;//第一行
case 0x01:addr = 0x90;break;//第二行
case 0x02:addr = 0x88;break;//第三行
case 0x03:addr = 0x98;break;//第四行
default:break;
}
addr += y; //確定列
lcd12864_write_com(addr); //設置光標
}
/*********************************************************
*函數功能:lcd12864清顯示(顯示漢字、字符模式下的清屏)
**********************************************************/
void lcd12864_clear0(void)
{
lcd12864_write_com(0x01);
delay_nms(10);
}
/*********************************************************
*函數功能:lcd12864清顯示(繪圖模式下的清屏)
**********************************************************/
void lcd12864_clear1(void)
{
uchar i, j, k ;
lcd12864_write_com(0x34);//功能設置:擴充指令集動作
lcd12864_write_com(0x36);//開繪圖顯示
for( i = 0 ; i < 2 ; i++ )//分上下兩屏寫
{
for( j = 0 ; j < 32 ; j++ )
{
lcd12864_write_com( 0x80 + j ) ;//寫Y坐標(行坐標)
if( i == 0 ) //寫X坐標(列坐標)
lcd12864_write_com( 0x80 ) ;
else
lcd12864_write_com( 0x88 ) ;
for( k = 0 ; k < 16 ; k++ ) //寫一整行數據
lcd12864_write_dat(0x00) ;
}
}
lcd12864_write_com( 0x30 ) ;//功能設置:恢復為基本指令集
// 關繪圖顯示
}
/*********************************************************
*函數功能:初始化函數
**********************************************************/
void lcd12864_init()
{
delay_nms(50);
//功能設定
lcd12864_write_com(0x30); //設置為8位并行口,基本指令集
delay_nms(1);
lcd12864_write_com(0x30); //再次設置為8位并行口,基本指令集
delay_nms(1);
lcd12864_write_com(0x0c); //顯示狀態設置:整體顯示ON 游標OFF
delay_nms(10);
lcd12864_write_com(0x01); //清除顯示,并且設定地址指針為00H
delay_nms(10);
lcd12864_write_com(0x06); //設置為游標右移,DDRAM位地址加1,畫面不移動
}
/*********************************************************
*函數功能:在指定位置 顯示一個字符
**********************************************************/
void lcd12864_write_char(uchar x,uchar y,uchar chr)
{
lcd12864_set_cursor(x,y);
lcd12864_write_dat(chr);
}
/*********************************************************
*函數功能:在指定位置 顯示一個字符
**********************************************************/
void lcd12864_write_str(uchar x,uchar y,uchar *string)
{
uchar *str;
uchar i=x;
uchar j=y;
str = string;
lcd12864_set_cursor(x,y);
while(*str!='\0')
{
lcd12864_write_dat(*str);
j++;
if(j>0x0f)
{
i++;
j=0;
if(i>4)
i=0;
lcd12864_set_cursor(i,j);
}
str++;
}
}
//********************************************************
//畫滿屏圖片
//參數:dat為填充的數據
//********************************************************
void draw_full_picture (uchar *dat)
{
uchar i;
uchar j;
uchar k;
uchar bGDRAMAddrX = 0x80; //GDRAM水平地址
uchar bGDRAMAddrY = 0x80; //GDRAM垂直地址
for(i = 0; i < 2; i++)
{
for(j = 0; j < 32; j++)
{
for(k = 0; k < 8; k++)
{
lcd12864_write_com(0x34); //設置為8位MPU接口,擴充指令集
lcd12864_write_com(bGDRAMAddrY+j); //垂直地址Y
lcd12864_write_com(bGDRAMAddrX+k); //水平地址X
lcd12864_write_dat(*dat++);
lcd12864_write_dat(*dat++);
}
}
bGDRAMAddrX = 0x88; //寫下半屏幕
}
lcd12864_write_com(0x36); //打開繪圖模式
lcd12864_write_com(0x30); //恢復基本指令集,關閉繪圖模式
}
void main()
{
float temp;
delay_nms(200); //延時200ms
Init_BH1750(); //初始化BH1750
InitUART(); //初始化串口
lcd12864_init();
while(1) //循環
{
P0=0X12;
P1=0X11;
P2=0X16;
P3=0X26;
getDHT11(); //獲取溫濕度值
dis_data=BUF[0];
dis_data=(dis_data<<8)+BUF[1];//合成數據
temp=(float)dis_data/1.2;
conversion(temp); //計算數據和顯示
Usart_DHT11();
delay_nms(500); //延時500ms
}
}
/*****************串口接收中斷函數**********************/
void UARTInterrupt(void) interrupt 4
{
if(RI)
{
ES=0;
RI = 0;
Rxbuff[Rxnum++]=SBUF;
if(Rxnum>=50)
Rxnum=0;
ES=1;
}
}
復制代碼
作者:
4546hugu
時間:
2019-4-18 12:41
就是這個圖,只亮不顯示
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1