|
用風向傳感器和單片機連接,用LCD1602顯示風向
運行后沒有error,但有warning
捕獲8.PNG (7.95 KB, 下載次數: 85)
下載附件
2020-11-4 20:03 上傳
這是風向傳感器的說明書:
風向傳感器4.PNG (148.41 KB, 下載次數: 93)
下載附件
2020-11-4 21:44 上傳
風向傳感器5.PNG (134.94 KB, 下載次數: 77)
下載附件
2020-11-4 20:05 上傳
無法運行,求各位指點一下,程序哪里有問題,謝謝各位,非常感謝!
這是原理圖:
捕獲1.PNG (257.09 KB, 下載次數: 81)
下載附件
2020-11-4 21:40 上傳
這是源程序:
main.c程序:
- #include<stc12c5a.h>
- #include <stdio.h>
- #include <string.h>
- #include<stdlib.h>
- #include<math.h>
- #include<intrins.h>
- #include<LCD.h>
- uchar table[24]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
- uchar wind_direction[8]={0x01,0x03,0x00,0x00,0x00,0x02,0xC4,0x0B};//風向傳感器問詢幀
- uchar wind_direction1[2]={0x00,0x00};//單片機接收風向數據
- void delay(uint z)//延時函數
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=110;y>0;y--);
- }
- void init() //系統初始化
- {
- TMOD=0X10;//8位重裝定時器
- TH1=0xfa;
- TL1=0xfa;
- TR1=1;//定時器1中斷
- SCON=0x50;//方式1
- TR1=1;//定時器1中斷??
- IP=0X10;//
- EA=1;
- ES=1;
- }
- void main()
- {
- init();
- while(1)
- {
- int i;
- for(i=0;i<8;i++)
- {
- SBUF=wind_direction[i];
- while(!TI); //數據發送結束時TI置1
- TI=0;
- }
- }
- lcd1602_init();
- lcd1602_locate(0x80,wind_direction[0]);
- }
- void UART_1() interrupt 4
- {
- int i=0;
- //接收完緩沖數據后RI置1
- if(RI)//如果RI為1
- {
- RI=0,//RI置0
- //風向傳感器
-
- table[i++]=SBUF;
- if(i>8)
- {
- wind_direction1[0]=table[3];
- }
- }
- }
- LCD.c程序:
- #include<reg52.h>
- #include<intrins.h>
- #include "LCD.h"
- #define uchar unsigned char
- #define uint unsigned int
- #define IODATA P0
- sbit E=P2^2; //1602使能引腳
- sbit RW=P2^1; //1602讀寫引腳
- sbit RS=P2^0; //1602數據/命令選擇引腳
- void delay1602()
- {
- _nop_(); //延時1us
- _nop_();
- }
- void DELAY1602(uint ms)
- {
- uint i,j;
- for(i=0;i<ms;i++)
-
- for(j=0;j<148;j++)
- {
- }
- }
- void wcmd(uchar del)//寫命令函數
- {
- RS=0;//命令選擇端
- delay1602();
- RW=0;//寫命令
- delay1602();
- E=0;
- delay1602();
- IODATA=del; //把命令字寫入
- delay1602();
- E=1;//使能
- delay1602();
- E=0;
- }
- void lcd1602_writedata(uchar dat)//寫數據函數
- {
- delay1602();
- RS=1;//數據選擇端
- delay1602();
- RW=0;//寫命令
- delay1602();
- E=0;
- delay1602();
- IODATA=dat; //把要顯示的數據寫入
- delay1602();
- E=1;
- delay1602();
- E=0;
- }
- void lcd1602_init()//LCD初始化
- {
- DELAY1602(15);
- wcmd(0x38);
- DELAY1602(5);
- wcmd(0x38);
- DELAY1602(5);
- wcmd(0x38);
- wcmd(0x38);
- wcmd(0x08);
- wcmd(0x01);
- wcmd(0x06);
- wcmd(0x0c);
- }
- void lcd1602_locate(uchar a,char sign)
- {
- wcmd(a);
- lcd1602_writedata(sign);
- }
復制代碼
LCD.h:
#ifndef _1602_
#define _1602_
#define uchar unsigned char
#define uint unsigned int
void lcd1602_init();
void lcd1602_writedata(uchar del);
void lcd1602_locate(unsigned char x,unsigned char y);
#endif
編譯運行沒有錯誤,但接上傳感器完全沒有任何現象,球球各位指點,謝謝~
|
|