|
AT89C52 12MHz
LCD1602編程部分
sbit RS=P3^0;
sbit RW=P3^1;
sbit E=P3^2;
void delay(unsigned int t)
{
unsigned int i=0,j=0;
for(i=0;i<t;i++)
{
for(j=0;j<120;j++);
}
}
void writedat(unsigned char dat)
{
RS=1;
RW=0;
E=0;
P2=dat;
delay(5);
E=1;
E=0;
}
void writecom(unsigned char com)
{
RS=0;
RW=0;
E=0;
P2=com;
delay(5);
E=1;
E=0;
}
void init_lcd(void)
{
writecom(0x38);//設置8位格式,2行,5*7 0x38
writecom(0x0c);//整體顯示,無光標。不閃爍 0x0c 0x0e 有光標不閃
writecom(0x06); //設定輸入方式,增加不位移,0x06
writecom(0x01); //清屏 0x01 //0x10 光標左移 0x14 右移
}
心得:對LCD1602的DDRAM進行讀寫都要先確定其地址 我這邊的程序為 writecom(0x80); writedat(0x41);或者writedat('A');這樣就是選擇到屏幕的第一排第一個.顯示大寫字母A writecom(0xC0);第二排第一個,后面的直接加就行。writecom(0x10); writecom(0x14); 只是左右移動光標,只是用來看的,光標指示到的地方并不是你寫數據就能在那個地方顯示,還是要確定地址才能寫入你需要的數值。
DHT11溫濕度傳感器編程部分
sbit Data=P3^6; //定義數據線
int R_H,R_L,T_H,T_L,RH,RL,TH,TL,revise;
void DHT11_delay_us(unsigned char n) // 1 7us 2 9us 3 11us
{
while(--n);
}
void DHT11_delay_ms(unsigned int z)
{
unsigned int i,j;
for(i=z;i>0;i--)
for(j=110;j>0;j--);
}
void delay_us(unsigned int a)
{
unsigned int i,j;
for(i=a;i>0;i--)
for(j=110;j>0;j--);
}
void DHT11_start()
{
Data=1;
DHT11_delay_us(2);
Data=0;
DHT11_delay_ms(20); //延時18ms以上 20MS DHT22 500us
Data=1;
DHT11_delay_us(30); //30us
}
char DHT11_rec_byte() //接收一個字節
{
unsigned char i,dat=0;
for(i=0;i<8;i++) //從高到低依次接收8位數據
{
while(!Data); ////等待50us低電平過去
DHT11_delay_us(8); //延時60us,如果還為高則數據為1,否則為0 8us
dat<<=1; //移位使正確接收8位數據,數據為0時直接移位
if(Data==1) //數據為1時,使dat加1來接收數據1
dat+=1;
while(Data); //等待數據線拉低
}
return dat;
}
void DHT11_receive() //接收40位的數據
{
DHT11_start();
if(Data==0)
{
while(Data==0); //等待拉高
DHT11_delay_us(40); //拉高后延時80us
R_H=DHT11_rec_byte(); //接收濕度高八位
R_L=DHT11_rec_byte(); //接收濕度低八位
T_H=DHT11_rec_byte(); //接收溫度高八位
T_L=DHT11_rec_byte(); //接收溫度低八位
revise=DHT11_rec_byte(); //接收校正位
DHT11_delay_us(25); //結束
if((R_H+R_L+T_H+T_L)==revise) //校正
{
RH=R_H;
RL=R_L;
TH=T_H;
TL=T_L;
}
}
}
心得:DHT11在仿真的時候 DATA角不用接上拉,我接上拉的時候不能測量,沒接的時候正常,不知道是不是我proteus哪里設置的問題,然后就是DHT11測量不是很穩,容易卡死,剛上電不穩定,需要延時1S左右再測。
proteus仿真是,最小系統的復位電路要的是電解電容,然后電阻的設置很特殊,設置方法看我上傳的那個圖片。
keil4在編程的時候,如果你寫的代碼很多,內部的存儲不夠,就要改一下配置,如圖,然后也得在proteus的那邊更改相應的配置,不然仿真不能出現象。
第一次寫這個啥都不會,隨便看看吧,其他程序都在壓縮包里了,小課設結束啦!
|
-
單片機擴容.png
(41.17 KB, 下載次數: 45)
下載附件
2020-5-15 10:54 上傳
-
復位電路電阻設置.png
(34.14 KB, 下載次數: 63)
下載附件
2020-5-15 10:54 上傳
-
仿真圖.png
(84.3 KB, 下載次數: 49)
下載附件
2020-5-15 10:54 上傳
-
111.png
(6.17 KB, 下載次數: 37)
下載附件
2020-5-15 11:15 上傳
-
-
obj.zip
2020-5-15 10:52 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
47.42 KB, 下載次數: 53, 下載積分: 黑幣 -5
keil4 程序
-
-
仿真.zip
2020-5-15 10:53 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
59.51 KB, 下載次數: 46, 下載積分: 黑幣 -5
proteus8.6仿真
評分
-
查看全部評分
|