这是
电路图,下面传代码
1602.c
#include"1602.h"
/**********************************************
函数名:delay
行参 :
time 延时基数
功能 :用while延时
************************************************/
// 延时函数(1ms单位)
void delay1(uint16 time)
{
while(time--);
}
/**********************************************
函数名:lcd_ini
功能 :LCD1602的初始化
************************************************/
void lcd_ini()
{
RW = 0;
lcd_order(0x38); //设置1602的显示光标功能
delay1(100);
lcd_order(0x0e); //显示开及光标设置
delay1(100);
lcd_order(0x06); //显示光标移动设置
delay1(100);
lcd_order(0x01); //显示清屏
delay1(100);
}
/**********************************************
函数名:lcd_order
行参 :date 要定入的指令
功能 :向LCD1602的写1个指令
************************************************/
void lcd_order(uint8 date)
{
RS=0; //选择写指令
EN_LCD=0; //使能初使化
P0=date; //发送指令
EN_LCD=1; //开使能
delay1(100); //延时
EN_LCD=0; //关使能
}
/**********************************************
函数名:lcd_order
行参 :date 要定入的指令
功能 :向LCD1602的写1个指令
************************************************/
void lcd_data(uint8 date)
{
RS=1; //选择写数据
EN_LCD=0; //使能初使化
P0=date; //发送指令
EN_LCD=1; //开使能
delay1(100); //延时
EN_LCD=0; //关使能
}
1602.h
#include"1602.h"
/**********************************************
函数名:delay
行参 :time 延时基数
功能 :用while延时
************************************************/
// 延时函数(1ms单位)
void delay1(uint16 time)
{
while(time--);
}
/**********************************************
函数名:lcd_ini
功能 :LCD1602的初始化
************************************************/
void lcd_ini()
{
RW = 0;
lcd_order(0x38); //设置1602的显示光标功能
delay1(100);
lcd_order(0x0e); //显示开及光标设置
delay1(100);
lcd_order(0x06); //显示光标移动设置
delay1(100);
lcd_order(0x01); //显示清屏
delay1(100);
}
/**********************************************
函数名:lcd_order
行参 :date 要定入的指令
功能 :向LCD1602的写1个指令
************************************************/
void lcd_order(uint8 date)
{
RS=0; //选择写指令
EN_LCD=0; //使能初使化
P0=date; //发送指令
EN_LCD=1; //开使能
delay1(100); //延时
EN_LCD=0; //关使能
}
/**********************************************
函数名:lcd_order
行参 :date 要定入的指令
功能 :向LCD1602的写1个指令
************************************************/
void lcd_data(uint8 date)
{
RS=1; //选择写数据
EN_LCD=0; //使能初使化
P0=date; //发送指令
EN_LCD=1; //开使能
delay1(100); //延时
EN_LCD=0; //关使能
}
fr.c
#include"1602.h"
***it Ko = P2^0; //霍尔传感器接口
uint8 xianshi[16] = "Su Du: 0000CM/S";
uint16 i,time1;
unsigned long lucheng=0;
/**********************************************
函数名:init_timer0
功能 :timer0的初始化
************************************************/
void init_timer0()
{
EA = 1;
TMOD =0x01;//定时器0工作方式1 定时器1 工作方式1
TH0 = 0x3C;
TL0 = 0xb0;
TR0 = 1;
ET0 = 1;
}
void main()
{
uint8 ii;
lcd_ini();
init_timer0();
lcd_order(0x80);
for(ii = 0;ii < 16;ii++)
{
lcd_data(xianshi[ii]);
delay1(1000);
}
lcd_order(0x80+0x40+13);
lcd_data('C');
lcd_data('M');
lcd_order(0x80+0x40+7);
lcd_data(0x30+lucheng/100000);
lcd_data(0x30+lucheng/10000%10);
lcd_data(0x30+lucheng/1000%10);
lcd_data(0x30+lucheng/100%10);
lcd_data(0x30+lucheng/10%10);
lcd_data(0x30+lucheng%10);
while(1)
{
if(Ko == 0)
{
EA = 0;
while(Ko == 0);
i++;
lucheng = i*149; //149为轮子的周长
EA = 1;
lcd_order(0x80+0x40+7);
lcd_data(0x30+lucheng/100000);
lcd_data(0x30+lucheng/10000%10);
lcd_data(0x30+lucheng/1000%10);
lcd_data(0x30+lucheng/100%10);
lcd_data(0x30+lucheng/10%10);
lcd_data(0x30+lucheng%10);
}
}
}
/************************************************
定时器中断服务函数
************************************************/
void timer0_help() interrupt 1
{
static unsigned char ji;
ji++;
TH0 = 0x3C;
TL0 = 0xb0;
if(ji==20)
{
ji = 0;
time1++;
lcd_order(0x80+0x40);
lcd_data(0x30+time1/1000);
lcd_data(0x30+time1/100%10);
lcd_data(0x30+time1/10%10);
lcd_data(0x30+time1%10);
lcd_data('S');
lcd_order(0x80+8);
lcd_data(0x30+lucheng/time1/1000);
lcd_data(0x30+lucheng/time1/100%10);
lcd_data(0x30+lucheng/time1/10%10);
lcd_data(0x30+lucheng/time1%10);
}
}