单片机测速1602显示

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

程序:

#include

#include

#define uint unsigned int

#define uchar unsigned char //宏定义

/*-----------------------端口命名------------------------*/

sbit rs=P2^0; //LCD的数据/命令选择端

sbit rw=P2^1; //LCD的读写选择端

sbit e=P2^2; //LCD的使能信号端

/*-------------------------------------------------------*/

/*-----------------------定义参数------------------------*/

uint i,z,count,zhuan,msec; //定义参数

uchar display[]={" speed= r/min "}; //定义显示参数/*-------------------------------------------------------*/ /*-----------------------毫秒延时------------------------*/

void delay(uint ms)

{

uint i,j; //为延时引入i,j两参数

for (j=0;j

for (i=0;i<120;i++); //延时第二循环

}

/*-------------------------------------------------------*/

/*--------------------向LCD1602写命令--------------------*/

void write_command(uchar command)

{

rs=0; //数据、命令选择端0为命令

rw=0; //读、写选择端0为写

P0=command; //向LCD写命令

delay(5); //稍做延迟,代替检测忙状态

e=1; //信号使能端高电平

delay(5); //稍做延迟,代替检测忙状态

e=0; //信号使能端低电平

}

/*-------------------------------------------------------*/

/*--------------------向LCD1602写数据--------------------*/

void write_data(uchar data0)

{

rs=1; //数据、命令选择端1为数据

rw=0; //读、写选择端0为写

P0=data0; //向LCD写数据

delay(5); //稍做延迟,代替检测忙状态

e=1; //信号使能端高电平

delay(5); //稍做延迟,代替检测忙状态

e=0; //信号使能端低电平

}

/*-------------------------------------------------------*/

/*-------------------外部中断0计数程序-------------------*/

void counter(void) interrupt 0

{

EX1=0; //关外部中断1

count++;

if(count==2) //2次循环为发动机转一圈

{

count=1; //初始化计数

z++; //转圈计数加1

} //计数+1

EX1=1; //开外部中断1

return;

}

/*-------------------------------------------------------*/

/*------------------------LCD显示------------------------*/

void displaytolcd()

{

write_command(0x80); //向LCD1602写命令80H

for (i=0;i

write_data(display[i]);

delay(5);

}

} /*-------------------------------------------------------*/

/*-----------------内部中断0计时计数程序-----------------*/

void Timer_0(void) interrupt 1

{

TH0=0x65; //50ms定时

TL0=0xF3;

msec++;

if(msec==20) //50*20=1S

{

displaytolcd();

msec=0;

zhuan=30*z;

z=0;

}

}

/*-------------------------------------------------------*/

/*----------------------端口初始化-----------------------*/

void int_all()

{

z=0; //初始化z的值

相关文档
最新文档