|
以下是除了1602以外的全部程序,求各位幫忙看看 哪有錯誤沒!
#include<reg52.h>
#include "LCD1602.h"
#define uchar unsigned char
#define uint unsigned int
bit flag; //¶¨òå±ê־λ
unsigned long x,x1;
uint T0count; //′óT0μļÆêyμ¥ÔaÖD¶á衼ÆêyμÄêyÖμ
uint timecount;
unsigned char Motor_Count,Set_Count=199;
sbit KEY1 = P1^3;//°′¼ü11
sbit KEY2 = P1^4;//°′¼ü2
sbit KEY3 = P1^5;//°′¼ü3
sbit KEY4 = P1^6;//°′¼ü4
sbit IN1 = P2^0;//μç»ú¿ØÖƶË1
sbit IN2 = P2^1;//μç»ú¿ØÖƶË2
sbit EN = P2^2; //μç»úê1Äü¶Ë
void Timer(void);
//Ñóê±oˉêy
void Delay_ms(uint jj) //Ñóê±1oáÃë
{
uint ii;
while(jj--)
for(ii=0;ii<116;ii++);
}
void Motor_Speed(unsigned char Speed) //μç»ú×′ì¬
{
if(Speed==0) {IN1=0;IN2=0;}//í£Ö1
if(Speed==1) {IN1=0;IN2=1;}//Õy×a
if(Speed==2) {IN1=1;IN2=0;}//·′×a
}
void main() //
{
unsigned char Data[3];
unsigned int i,j;
unsigned char Set_x;
Timer(); //¶¨ê±Æ÷3õê¼»ˉ
LCD1602_init();//òo¾§3õê¼»ˉ
//////////////////////////0123456789ABCDEF
LCD1602_Disp_ZF(0x80,"Now Speed: r/s",16);//ÏÔê¾êμê±Ëù¶è
//0123456789ABCDEF
LCD1602_Disp_ZF(0x80+0X40,"Set: r/s ",16); //éèÖÃËù¶è
//LCD1602_Disp_ZF(0x8b+0X40,"Left ",5);
//LCD1602_Disp_ZF(0x8b+0X40,"Right",5);
LCD1602_Disp_ZF(0x8b+0X40,"Stop ",5);
Motor_Speed(0);//??
Set_Count=1;
Set_x=30;
Data[0]='0'+Set_x/100; //ÏÔê¾éèÖÃËù¶è°ùλ
Data[1]='0'+(Set_x/10)%10; //ÏÔê¾éèÖÃËù¶èê®Î»
Data[2]='0'+Set_x%10; //ÏÔê¾éèÖÃËù¶è¸öλ
LCD1602_Disp_ZF(0x84+0x40,Data,3); //ÏÔê¾éèÖÃËù¶è
while(1)
{
if(flag==1)
{
flag=0; //Çå±ê־λ
x=T0count*65536+TH0*256+TL0; //è¡μÃê±¼ä¿í¶è2Îêy
x=x/5; //¼ÆËãËù¶è
timecount=0;
T0count=0;
TH0=0;
TL0=0;
TR0=1; //TR0=1,¿ØÖÆ¿a1رÕoÏ£¬¼¼êõÂö3å½øèëT1¼ÆêyÆ÷£¬Æô¶ˉ¼Æêy
Data[0]='0'+x/100; //ÏÔê¾μ±Ç°Ëù¶è
Data[1]='0'+(x/10)%10; //ÏÔê¾μ±Ç°Ëù¶è
Data[2]='0'+x%10; //ÏÔê¾μ±Ç°Ëù¶è
LCD1602_Disp_ZF(0x80,"Now Speed: r/s",16); //ÏÔê¾μ±Ç°Ëù¶è
LCD1602_Disp_ZF(0x8a,Data,3); //ÏÔê¾μ±Ç°Ëù¶è
if(x>Set_x)//Ëù¶èμ÷½ú
{
if(Set_Count==0)Set_Count=1;//¼õËù
Set_Count--;
}
if(x<Set_x) //Ëù¶èμ÷½ú
{
Set_Count++;
if(Set_Count==200)Set_Count=199;//¼óËù
}
}
if(!KEY1) //¿aê¼í£Ö1°′¼ü
{
Delay_ms(50);
if(!KEY1) //
{
i++;
if(i%2==0)
{
Motor_Speed(1);//¿aê¼
LCD1602_Disp_ZF(0x8b+0X40,"Right",5);
}
if(i%2==1)
{
Motor_Speed(0);//í£Ö1
LCD1602_Disp_ZF(0x8b+0X40,"Stop ",5);
}
while(!KEY1);
}
}
if(!KEY2) //Õy×a·′×a°′¼ü
{
Delay_ms(10);
if(!KEY2)
{
j++;
if(j%2==0)//Õy×a
{
Motor_Speed(1);
LCD1602_Disp_ZF(0x8b+0X40,"Right",5);
}
if(j%2==1)//·′×a
{
Motor_Speed(2);
LCD1602_Disp_ZF(0x8b+0X40,"Left ",5);
}
while(!KEY2);
}
}
//////////////////////////////////
if(!KEY3) //éèÖüóËù
{
Delay_ms(50);
if(!KEY3)//
{
Set_x ++;
if(Set_x>30)Set_x=30;
Data[0]='0'+Set_x/100;//ÏÔê¾éèÖÃËù¶è
Data[1]='0'+(Set_x/10)%10;//ÏÔê¾éèÖÃËù¶è
Data[2]='0'+Set_x%10; //??????
LCD1602_Disp_ZF(0x84+0x40,Data,3);//ÏÔê¾éèÖÃËù¶è
}
}
if(!KEY4)//éèÖüõËù
{
Delay_ms(50);
if(!KEY4)//????
{
if(Set_x==0)Set_x=1;
Set_x --;
Data[0]='0'+Set_x/100;//ÏÔê¾éèÖÃËù¶è
Data[1]='0'+(Set_x/10)%10;//ÏÔê¾éèÖÃËù¶è
Data[2]='0'+Set_x%10; //ÏÔê¾éèÖÃËù¶è
LCD1602_Disp_ZF(0x84+0x40,Data,3);//ÏÔê¾éèÖÃËù¶è
}
}
/////////////////////////////////
/////////////////////
///////////////////////////
}
}
void t0() interrupt 1 using 0 //T0ÖD¶Ï·tÎñ
{
T0count++; //¶ÔP3.4¿úμÄÂö3å½øDD¼Æêy
}
void t1(void) interrupt 3 using 0 //T1ÖD¶Ï·tÎñ
{
TH1=(65536-368)/256; //¼Æêy3õÖμÖØ×°ÔØ
TL1=(65536-368)%256;
timecount++;
Motor_Count++;
if(Motor_Count==Set_Count) //μ÷½úËù¶è
{
EN=0;
}
if(Motor_Count==200) //μ÷½úËù¶è
{
EN=1;
Motor_Count=0;
}
if(timecount==249) //1s¼Æêy±êÖ¾
{ TR0=0;
timecount=0;
flag=1; // ÖÃλ±ê־λ
}
}
void Timer(void)
{
TMOD=0x15; //T01¤×÷Îa16λ¼ÆêyÆ÷£¨·½ê½1£©,T11¤×÷·½ê½Îa16λ¶¨ê±Æ÷
TH0=0; //¼ÆêyÎa65536
TL0=0; //
TH1=(65536-4000)/256; //¶¨ê±Æ÷2éóö¨ê±4ms,3õÖμÎa4000
TL1=(65536-4000)%256;
TR1=1; //TR1=1,¿ØÖÆ¿a1رÕoÏ,¼ÆêyÂö3å½øèëT1¼ÆêyÆ÷,Æô¶ˉ¶¨ê±
TR0=1; //TR0=1,¿ØÖÆ¿a1رÕoÏ,¼ÆêyÂö3å½øèëT1¼ÆêyÆ÷£¬Æô¶ˉ¼Æêy
ET0=1; //¶¨ê±Æ÷0¿aÖD¶Ï
ET1=1; //¶¨ê±Æ÷1¿aÖD¶Ï
EA=1; //CPU¿aÖD¶Ï
}
|
|