光电测速及LCD1602显示程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include
#include
#define uint unsigned int
#define uchar unsigned char
sbit rs=P2^6;
sbit rw=P2^5;
sbit e=P2^7;
float f=0;
int dec0=0;
int dec1;
float dec2=0;
uchar LED0_data,LED1_data,LED2_data,LED3_data; uchar LED0_dat,LED1_dat,LED2_dat,LED3_dat,LED4_dat; uchar speed[]="speed:";
uchar root[]="path:";
uchar cm[]="cm/s";
uchar m[]=".m";
uchar i=0;
void display();
void delay(uint v);
void initime();
/*定时器初始化*/
void initime(){
TMOD=0x51; //T1计数器,T0定时器,方式1
TL0=(65536-10000)%256;
TH0=(65536-10000)/256;
TL1=0;
TH1=0;
ET0=1;
EA=1;
}
void delay1ms(uint c){ //误差 0us
uchar a,b;
for (; c>0; c--){
for (b=199;b>0;b--){
for(a=1;a>0;a--);
}
}
}
void dectobit(){
dec0=f*20.7;
LED3_data=dec0/1000;
dec0=dec0 % 1000;
LED2_data=dec0/100;
dec0=dec0 % 100;
LED1_data=dec0/10;
dec0=dec0 % 10;
LED0_data=dec0;
dec2=f*2.07345+dec2;
dec1=dec2;
LED4_dat=dec1/10000;
dec1=dec1 % 10000;
LED3_dat=dec1/1000;
dec1=dec1 % 1000;
LED2_dat=dec1/100;
dec1=dec1 % 100;
LED1_dat=dec1/10;
dec1=dec1 % 10;
LED0_dat=dec1;
}
void write_com(uchar com){
e=0;
rs=0;
rw=0;
P0=com;
delay1ms(1);
e=1;
delay1ms(5);
e=0;
}
void write_data(uchar dat){
e=0;
rs=1;
rw=0;
P0=dat;
delay1ms(1);
e=1;
delay1ms(1);
e=0;
}
void Init()
{
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80);
}
void display(){
uchar j;
write_com(0x80);
for(j=0;j<6;j++)
write_data(speed[j]);
write_com(0xc1);
for(j=0;j<5;j++)
write_data(root[j]);
write_com(0x86);
write_data(LED3_data+0x30);
write_data(LED2_data+0x30);
write_data(LED1_data+0x30);
write_data(LED0_data+0x30);
for(j=0;j<4;j++)
write_data(cm[j]);
write_com(0xc6);
write_data(LED4_dat+0x30);
write_data(LED3_dat+0x30);
write_data(LED2_dat+0x30);
write_data(LED1_dat+0x30);
write_data(m[0]);
write_data(LED0_dat+0x30);
write_data(m[1]);
}
void main(void){
initime();
Init();
TR0=1;
TR1=1;
while(1){
display();
}
}
timer()interrupt 1{
i=i+1;
if(i==100){
i=0;
f=TH1*256+TL1;
TL1=0;
TH1=0;
dectobit();
}
TL0=(65536-10000)%256;
TH0=(65536-10000)/256; }