用1602顯示超聲波測出的距離,源碼如下:
#include<AT89X52.H>
#include<intrins.h>
#include<1602.H>
#define uint unsigned int
#define uchar unsigned char
uint t=0;
uint s;
uchar w[]={0,0,0,0,0,0,0,0};
void zhuanhuancsb(uint l)
{
w[0]=(l/10000)+'0';
w[1]=(l%10000/1000)+'0';
w[2]=(l%1000/100)+'0';
w[3]='.';
w[4]=(l%100/10)+'0';
w[5]=(l%10)+'0';
w[6]='c';
w[7]='m';
}
void csb_int()
{
P1_0=1;
_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();
P1_0=0;
while(P1_1==0);
TR0=1;
while(P1_1==1);
TR0=0;
s=(t*340)/3;
}
void time_int()
{
TMOD=0x01;
TH0=(65536-10)/256;
TL0=(65536-10)%256;
IE=0x82;
}
main()
{
uint j;
lcd_init();
time_int();
while(1)
{
t=0;
csb_int();
zhuanhuancsb(s);
write_add(1,1);
j=0;
while(w[j]!='\0')
{
write_Data(w[j]);
j++;
}
}
}
void timer0() interrupt 1
{
TH0=(65536-50)/256;
TL0=(65536-50)%256;
t++;
}
1602.c:
#include<AT89X52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit rs=P2^0;
sbit rw=P2^1;
sbit ep=P2^2;
#define lcddata P0
void delay(uchar ms)
{
uchar i;
while(ms--)
{
for(i=0;i<250;i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
void lcd_busy()
{
uchar flag=0x80;
lcddata=0xff;
rs=0;
rw=1;
ep=1;
delay(1);
while(flag & 0x80)
{
flag=P0;
}
ep=0;
}
void write_cmd(uchar cmd,busy)
{
if(busy==1)
lcd_busy();
rs=0;
rw=0;
ep=0;
lcddata=cmd;
delay(1);
ep=1;
delay(1);
ep=0;
}
void write_Data(uchar Data)
{
lcd_busy();
rs=1;
rw=0;
ep=0;
lcddata=Data;
delay(1);
ep=1;
delay(1);
ep=0;
}
void write_add(uchar x,y)
{
if(x==1)
{
y=(y-1)|0x80;
write_cmd(y,1);
}
else
{
y=(y-1)|0xc0;
write_cmd(y,1);
}
}
void lcd_init()
{
lcddata=0x00;
delay(15);
write_cmd(0x38,0);
delay(5);
write_cmd(0x38,0);
delay(5);
write_cmd(0x38,0);
delay(5);
write_cmd(0x38,1);
write_cmd(0x08,1);
write_cmd(0x01,1);
write_cmd(0x06,1);
write_cmd(0x0c,1);
}
有了.c文件,我相信大家也一定會寫.h文件的,是吧 。
|