单片机测速1602显示
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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的值