AT89C51测量速度显示LCD1602 按钮控制,c语言编写的程序,显示程序和按键分别用好用但是两个放一起就不行了

#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit LCD_RS = P0^1;
sbit LCD_EP = P0^0;
sbit PWM=P1^1;//p1.1口产生pwm
sbit text=P1^3;
sbit key1=P0^2; //设置转速
sbit key2=P0^3; // 加
sbit key3=P0^4; // 减
sbit key4=P0^5; // 正反转
sbit key5=P0^6; // 停
sbit key6=P0^7; // 启
sfr T2MOD=0XC9;
uchar code table[] = {"SDSD=00000r/s"};
uchar code table1[] = {"speed=00000r/s"};
uchar n , i,x,table2[5],table3[5],zhuansu,ge,shi,bai,qian,wan,flag1,key1n,temp;
unsigned char timer1,timer3;
unsigned int v; //储存电机转速
unsigned char count; //储存定时器T0中断次数
bit flag; //计满1秒钟标志位

void delay(uint z)
{ uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);

}

void write_com(uchar com)
{ LCD_RS=0;
// LCD_RW=0;
P2=com ;
delay(5);
LCD_EP=1;
delay(5);
LCD_EP=0;
}

void write_data(uchar date)
{ LCD_RS=1;
// LCD_RW=0;
P2=date ;
delay(5);
LCD_EP=1;
delay(5);
LCD_EP=0;

}
/********显示动态速度数据*********/
void display_val(unsigned int zhuan)
{

table2[0]=zhuan/10000+0x30; //取万位
table2[1]=(zhuan%10000)/1000+0x30; //取千位
table2[2]=(zhuan%1000)/100+0x30; //取百位
table2[3]=(zhuan%100)/10+0x30; //取十位
table2[4]=zhuan%10+0x30; //取个位

write_com(0x80+0x40+7);
write_data(table2[0]);
write_com(0x80+0x40+8);
write_data(table2[1]);
write_com(0x80+0x40+9);
write_data(table2[2]);
write_com(0x80+0x40+10);
write_data(table2[3]);
write_com(0x80+0x40+11);
write_data(table2[4]);

}

/****************************************/
/***定时器T1、T0初始化设置********************/

void system_Ini()
{

TMOD=0x51; //定时器T1工作于计数模式1,定时器T0工作于计时模式1;
TH0=(65536-46083)/256; //定时器T0的高8位设置初值,每50ms产生一次中断
TL0=(65536-46083)%256; //定时器T0的低8位设置初值,每50ms产生一次中断

TH1=0; //定时器T1高8位赋初值0
TL1=0; //定时器T1低8位赋初值0
EA=1; //开总中断
ET0=1; //定时器T0中断允许
TR0=1; //启动定时器T0

}

/*-------------------------------------------------------*/
void init()
{ LCD_EP=0;
write_com(0x38);
// write_com(0x0e);
write_com(0x06);
write_com(0x0c);
write_com(0x01);
//write_com(0x80);

write_com(0x80+2); //日历显示固定符号从第一行第1个位置之后开始显示
for(i=0;i<13;i++)
{
write_data(table[i]); //向液晶屏写日历显示的固定符号部分
delay(3);
}
write_com(0x80+0x40+1); //时间显示固定符号写入位置,从第2个位置后开始显示
for(i=0;i<14;i++)
{
write_data(table1[i]); //写显示时间固定符号,两个冒号
delay(3);
}

建议你扫描键盘写成子程序,然后If之后用一个参数去对应键盘的按键,然后在循环中,每次扫描,执行时,参考参数之后,再重置
温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答
大家正在搜