#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uint a,b;
uint c=0;
uint d=0;
uint zh;
uchar num;
uchar code table1[]="Speed(n/min):";
sbit PWM=P0^0;
sbit key1=P3^0;
sbit key2=P3^1;
sbit key3=P3^2;
sbit key4=P3^3;
sbit RS=P0^1; //RW直接接地
sbit EN=P0^2; //LCD1602控制
void de(uchar z) //延时
{
uchar x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void cu
tiao() //粗调
{
if(a==c)
{
PWM=0;
}
if(b==10)
PWM=1;
}
void PWM_init() //PWM初始
{
TMOD=0x01;
EA=1;
ET0=1;
TR0=1;
}
/**************************lcd1602显示******************************/
void write_com(uchar com) //写指令到1602
{
RS=0;
EN=0;
P2=com;
de(1);
EN=1;
de(1);
EN=0;
}
void write_date(uchar date) //写数据到1602
{
RS=1;
EN=0;
P2=date;
de(1);
EN=1;
de(1);
EN=0;
}
void LCD_init() //初始化
{
EN=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80);
}
/**********************LCD显示****************/
void display()
{
write_com(0x80);
for(num=0;num<13;num++)
{
write_date(table1[num]);
de(1);
}
write_com(0x80+0x40);
write_date(zh+0x30);
de(1);
}
/****************************主函数**************************************/
void main()
{
PWM_init();
LCD_init();
while(1)
{
display(); !!!!!!!!!就是这里,加了显示就不运行了。但是去掉,程序就是运行的。为什么???求大神
if(b>10) //PWM范围
{a=0;b=0;}
/***************键盘控制*****************************/
if(key1==0) //键盘控制,加
{de(50);//消抖
if(key1==0)
{ c++;
if(c==9)c=9;
}
while(!key1);
}
if(key2==0) //减
{ de(50);
if(key2==0)
{
c--;
}
while(!key2);
}
if(key3==0) //停止
{
d++;
while(1)
{
PWM=0;
if(key4==0)
{
d++;
if(d>=2)
break;
}
}
}
/*******************频道选择**********************/
switch(c)
{
case 0:cutiao();zh=0;
case 1:cutiao();zh=1;
case 2:cutiao();zh=2;
case 3:cutiao();zh=3;
case 4:cutiao();zh=4;
case 5:cutiao();zh=5;
case 6:cutiao();zh=6;
case 7:cutiao();zh=7;
case 8:cutiao();zh=8;
case 9:cutiao();zh=9;
}
cutiao(); //粗调
}
}
void DS0() interrupt 1 //中断服务程序
{
TH0=(65536-50)/256;
TL0=(65536-50)%256;
a++;
b++;
}
-
评分
查看全部评分
当把display这个函数去掉时由于程序运行很顺畅没有延时所以程序能正常
哎妈呀。大神啊。 听你这么一说,思路一下子清楚不少。非常感谢。 我去试试看吧。
现在程序正常了没啊?
一周热门 更多>