LCD1602液晶顯示+超聲波測距-51微控制器
阿新 • • 發佈:2019-01-05
#include <reg52.h> #include <intrins.h> #define unchar unsigned char //unchar LED_D[]= {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39}; unsigned long time,distance; unsigned int timer=0; sbit reciever=P3^2; sbit control=P3^3; bit flag=0; sbit RS = P1^5; sbit RW = P1^6; sbit E = P1^7; sbit BF = P0^7; void Time_init() { TMOD=0x11; TH1=(65536-2000)/256; TL1=(65536-2000)%256; TH0=0; TL0=0; EA=1; ET1=1; ET0=1; TR1=1; } void delay1ms() { unsigned char i,j; for(i=0; i<10; i++) for(j=0; j<33; j++); } void delay(unsigned int n) { unsigned int i; for(i=0; i<n; i++) delay1ms(); } bit busytest() { bit result; RS=0; RW=1; E=1; _nop_(); _nop_(); _nop_(); _nop_(); result=BF; E=0; return result; } void write_com(unsigned char dictate) { while(busytest()); RS=0; RW=0; E=0; _nop_(); _nop_(); P0=dictate; _nop_(); _nop_(); _nop_(); _nop_(); E=1; _nop_(); _nop_(); _nop_(); _nop_(); E=0; } void writeaddress(unsigned char x) { write_com(x|0x80); } void writedata(unsigned char y) { while(busytest()); RS=1; RW=0; E=0; P0=y; _nop_(); _nop_(); _nop_(); _nop_(); E=1; _nop_(); _nop_(); _nop_(); _nop_(); E=0; } void Lcdinit() { delay(15); write_com(0x38); delay(5); write_com(0x38); delay(5); write_com(0x38); delay(5); write_com(0x0F); delay(5); write_com(0x04); delay(5); write_com(0x01); delay(5); } void resolve() { time=TH0*256+TL0; TH0=0; TL0=0; distance=time*0.17; Lcdinit(); write_com(0x01); delay(5); writeaddress(0x80); delay(5); if(distance>7000||flag) { flag=0; writedata(0x30); delay(10); } else { unchar shu[8]; unchar i=0; while(distance) { if(i==1) { shu[++i]=0; continue; } shu[++i]=distance%10; distance/=10; } while(i) { if(i==2) { writedata(0x2e); i--; delay(10); continue; } writedata(shu[i]+0x30); i--; delay(10); } } } void Time_inter0()interrupt 1 { flag=1; } void Time_inter1()interrupt 3 { TH1=(65536-2000)/256; TL1=(65536-2000)%256; timer++; if(timer>=400) { timer=0; control=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); control=0; } } void main() { Time_init(); while(1) { while(!reciever); TR0=1; while(reciever); TR0=0; resolve(); } }