資源簡介
本程序是對溫濕度采集系統,顯示器件為12864,傳感器為dht11。單片機為at89c51。
代碼片段和文件信息
#include?
#define?OK?1?
#define?ERROR?0?
#define?NUMBER?20? //防止在與硬件通信時發生死循環設置的計數范圍
#define?SIZE?5?
#define?uint?unsigned?int?
#define?uchar?unsigned?char
static?uchar?status;?
uchar?value_array[SIZE];
uint??temp_value?humi_value;
/*------------用戶自定義-----------------------------------------------*/
sbit?rs=P2^4; //RS=“H“表示DB7--DB0為顯示數據
//RS=“L“表示DB7--DB0為顯示指令數據
sbit?rw=P2^5;???????????????????//R/W=“H“E=“H“數據被讀到DB7--DB0
//R/W=“L“E=“H→L“?DB7--DB0的數據被寫到IR或DR
sbit?e=P2^6; //使能信號
sbit?dht11?=?P2^0;//溫濕度傳感器接口
sbit?psb=P2^3; //H:8位或4位并口方式,L:串口方式
??????
?void?Delay_1ms(unsigned?int?ms)?//延時1ms
{?
unsigned?int?x?y;?
for(x?=?ms;?x?>?0;?x--)?
{?
for(y?=?114;?y?>?0;?y--);?
}?
}?
extern?void?Delay_10us(void)? //延時10us
{?
unsigned?char?i;?
i--;?
i--;?
i--;?
i--;?
i--;?
i--;?
}?
//****************************************************
//延時函數,在12MZ的晶振頻率下
//大約50us的延時
//****************************************************
void?delay_50us(uint?t)
{
uchar?j;
for(;t>0;t--)
for(j=19;j>0;j--);
}
//****************************************************
//延時函數,在12MZ的晶振頻率下
//大約50ms的延時
//****************************************************
void?delay_50ms(uint?t)
{
uint?j;
for(;t>0;t--)
for(j=6245;j>0;j--);
}
void?chk_busy() //判忙函數
{
????rs=0?;
????rw=1?;
????e=1?;
????P0=0xff?;
????while((P0&0x80)==0x80);
????e=0?;
}
void?lcd_write_cmd(uchar?com)?//LCD12864寫命令
{
????chk_busy();
????rs=0?;
????rw=0?;
????e=1?;
????P0=com;
????delay_50us(1);
????//------------------在數據寫入的時候加入適當的延時
????e=0?;
}
void?lcd_write_data(uchar?dat) ?//LCD12864寫數據
{
????chk_busy();
????rs=1?;
????rw=0?;
????e=1?;
????P0=dat;
????delay_50us(1);
????//------------------在數據寫入的時候加入適當的延時
????e=0?;
}
/**********************************************************************
*?名稱:??Addr_Set()
*?函數功能:字符位置確定
*?入口參數:?x(0~7)??指定點所在列的位置
*????????????y(0~3)???指定點所在行的位置
*?出口參數:無
*?說明:漢字必須是存在在液晶字庫中的
**********************************************************************/
void?Addr_Set(uchar?xuchar?y)??
{??
uchar?address;
????switch(x)
????{??
case?0:??x?=?0x80?;?break;
?????? case?1:??x?=?0x90?;?break;
????? case?2:??x?=?0x88?;?break;
?????? case?3:??x?=?0x98?;?break;
?????? default:?return;
????}
???address?=?x+y;
???lcd_write_cmd(address);
}
void?LCD_12864_initinal(void)
{
delay_50ms(2);
lcd_write_cmd(0x30);?//Function?set?基本指令操作
lcd_write_cmd(0x0c);???//顯示狀態開/關00001DCB?????
//D=1:?整體顯示?ON?C=1:?游標ON?B=1:游標位置反白允許
lcd_write_cmd(0x01);
??//清除顯示?將DDRAM填滿“20H“并且設定DDRAM的地址計數器(AC)到“00H“
lcd_write_cmd(0x06);
//進入點設定0001I/DS
//指定在數據的讀取與寫入時設定游標的移動方向及指定顯示的移位
}
/*------------------顯示字符串--------------------------*/
void?string_dis(uchar?code?*s)
{
????while(*s>0)?????????????//“\0“結束
????{
????????lcd_write_data(*s);
????????s++;
????????//delay_1ms(500); //慢速顯
//delay_1ms(200); /
- 上一篇:IDL分類代碼
- 下一篇:pyOpenSSL+zope.interface
評論
共有 條評論