标题:
12864液晶屏显示超声波程序
[打印本页]
作者:
柏拉图66
时间:
2019-7-30 08:55
标题:
12864液晶屏显示超声波程序
#include <reg52.h>
#include <intrins.h>
/************????**************/
sbit RX = P3 ^ 1; //ECH0
sbit TX = P3 ^ 0;//TRIG
sbit CS = P2 ^ 0;
sbit SID = P2 ^ 1; //RW
sbit SCLK = P2 ^ 3; //E
/*************????**************/
void Lcd_init(void);
void Write_char(bit start, unsigned char ddata);
void Send_byte(unsigned char bbyte);
void Delaynms(unsigned int di);
void Clr_Scr(void);
void LCD_set_xy( unsigned char x, unsigned char y );
void LCD_Write_string(unsigned char X,unsigned char Y,unsigned char *s);
void LCD_Write_number(unsigned char s);
void Lcd_Mark2(void);
void Conut(void);
void delayms(unsigned int ms);
void StartModule();
unsigned char code num[]={"0123456789 :.-"};
unsigned char code Q[] ={"ǰ:"};
unsigned char code CM[] = {"m"};
unsigned int time=0;
long S=0;
bit flag =0;
unsigned char disbuff[4]={ 0,0,0,0,};
/**************************************************************/
void Lcd_init(void)
{
Delaynms(10);
CS=1;
Write_char(0,0x30);
Write_char(0,0x0c);
Write_char(0,0x01);
}
/***************************************************************/
void Write_char(bit start, unsigned char ddata)
{
unsigned char start_data,Hdata,Ldata;
if(start==0)
start_data=0xf8;
else
start_data=0xfa;
Hdata=ddata&0xf0;
Ldata=(ddata<<4)&0xf0;
Send_byte(start_data);
Delaynms(5);
Send_byte(Hdata);
Delaynms(1);
Send_byte(Ldata);
Delaynms(1);
}
/***************************************************************/
void Send_byte(unsigned char bbyte)
{
unsigned char i;
for(i=0;i<8;i++)
{
SID=bbyte&0x80;
SCLK=1;
SCLK=0;
bbyte<<=1;
}
}
/***************************************************************/
void Delaynms(unsigned int di)
{
unsigned int da,db;
for(da=0;da<di;da++)
for(db=0;db<10;db++);
}
/***************************************************************/
void Clr_Scr(void)
{
Write_char(0,0x01);
}
/****************************************************************/
void LCD_set_xy( unsigned char x, unsigned char y )
{
unsigned char address;
switch(x)
{
case 0: address = 0x80 + y; break;
case 1: address = 0x80 + y; break;
case 2: address = 0x90 + y; break;
case 3: address = 0x88 + y; break;
case 4: address = 0x98 + y; break;
default:address = 0x80 + y; break;
}
Write_char(0, address);
}
/*****************************************************************/
void LCD_Write_string(unsigned char X,unsigned char Y,unsigned char *s)
{
LCD_set_xy( X, Y );
while (*s)
{
Write_char( 1, *s );
s ++;
Delaynms(1);
}
}
/******************************************************************/
void LCD_Write_number(unsigned char s)
{
Write_char(1,num[s]);
Delaynms(1);
}
/******************************************************************/
void Lcd_Mark2(void)
{
Clr_Scr();//??
LCD_Write_string(1,2,Q);
LCD_Write_string(1,6,CM);
}
/*************************************************************************************/
/*************************************************************************************/
void Conut(void)
{
time=TH0*256+TL0;
TH0=0;
TL0=0;
S=time*1.87/100;
if(flag==1)
{
flag=0;
LCD_set_xy( 1, 4 );
LCD_Write_number(13);
LCD_Write_number(12);
LCD_set_xy( 1, 5 );
LCD_Write_number(13);
LCD_Write_number(13);
}
else
{
disbuff[1]=S%1000/100;
disbuff[2]=S%1000%100/10;
disbuff[3]=S%1000%10 %10;
LCD_set_xy( 1, 4 );
LCD_Write_number(disbuff[1]);
LCD_Write_number(12);
LCD_set_xy( 1, 5 );
LCD_Write_number(disbuff[2]);
LCD_Write_number(disbuff[3]);
}
}
/********************************************************/
void delayms(unsigned int ms)
{
unsigned char i=100,j;
for(;ms;ms--)
{
while(--i)
{
j=10;
while(--j);
}
}
}
/********************************************************/
void zd0() interrupt 1
{
flag=1;
}
/********************************************************/
void StartModule()
{
TX=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
TX=0;
}
/********************************************************/
void main(void)
{
TMOD=0x01;
TH0=0;
TL0=0;
TR0=1;
Lcd_init();
Clr_Scr();
Lcd_Mark2();
while(1)
{
StartModule();
while(!RX);
TR0=1;
while(RX);
TR0=0;
Conut();
delayms(80); //80MS
}
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1