|
楼主 |
发表于 2011-6-1 23:23:30
|
显示全部楼层
附上源程序
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit send=P0^0;
sbit recept=P3^2;
uint t=0,n=0,flag=0,c=0;
uint temp1,temp2;
int b,s,g,f;
sbit RS=P2^4;
sbit RW=P2^5;
sbit EN=P2^6;
sbit in=P3^2;
sbit out=P3^3;
sbit d1=P1^0;
uchar code num[]="0123456789";
uchar code error[]="too short";
void init();
void delay(uint t);
void delay1(uint t);
void write_com(uchar com);
void write_data(uchar date);
bit LCD_Check_Busy(void) ;
bit LCD_Check_Busy(void)
{
P0= 0xFF;
RS=0;
RW=1;
EN=0;
_nop_();
EN=1;
return (bit)(P0 & 0x80);
}
void init()
{
EA=1;
TMOD=0X11;
write_com(0x38);/*显示模式设置*/
delay1(10);
write_com(0x38);/*显示模式设置*/
delay1(10);
write_com(0x38);/*显示模式设置*/
delay1(10);
write_com(0x38);/*显示模式设置*/
delay1(10);
write_com(0x0c);/*显示开及光标设置*/
delay1(10);
write_com(0x06);/*显示光标移动设置*/
delay1(10);
write_com(0x01);
delay1(10);
}
void write_com(uchar com)
{
while(LCD_Check_Busy());
RS=0;
RW=0;
EN=1;
P0=com;
delay1(70);
EN=0;
}
void write_data(uchar date)
{
while(LCD_Check_Busy());
RS=1;
RW=0;
EN=1;
P0=date;
delay1(70);
EN=0;
}
void delay(uint i)
{
uchar x, j;
for(j=0; j<i; j++)
for(x=0; x<=140; x++);
}
void delay1(uint i)
{
uchar x, j;
for(j=0; j<i; j++)
for(x=0; x<=110; x++) ;
}
void delay100us()
{
uchar i;
for(i=0;i<100;i++) ;
}
void T_50ms() //T0 装入初值50MS
{
TH0=0x3c;
TL0=0xb0;
}
void T1_in() //T1 装入初值
{
TH1=0x8a;
TL1=0xd0;
}
void sendwave()
{
int i;
TR1=1; //开启T1计时
for(i=8;i>0;i--)
{
send=!send;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
send=1;
}
void main()
{
init();
T_50ms();
ET0=1;
TR0=1;
while(1)
{
}
}
void recept_break() interrupt 0
{
EX0=0;
d1=0;
t=(TH1-0x8a)*256+(TL1-0xd0); //计算时间
n=t*0.17-26; //测出单位为MM
flag=1;
ET1=0;
b=(int)(n/1000);
s=(int)(n%1000/100);
g=(int)(n%1000%100/10);
f=(int)(n%1000%100%10);
write_com(0x80);
delay1(50);
write_data(num);
delay1(50);
write_data(num);
delay1(50);
write_data(num[g]);
delay1(50);
write_data('.');
delay1(50);
write_data(num[f]);
delay1(50);
write_data('c');
delay1(50);
write_data('m');
delay1(50);
delay1(80);
}
void Timer0() interrupt 1 //计时器0程序
{
TH0=0x3c;
TL0=0xb0;
T1_in(); //T1计时器装入数
sendwave();
delay1(1); //延迟1ms
ET1=1; //开启T1中断
EX0=1; //开启外部中断
}
void Timer1() interrupt 3 //计时器1程序
{
EX0=0;
TR1=0;
} |
|