⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 super_truck.c

📁 LCD 1602 16x2字符型带背光液晶显示模块资料及一些程序
💻 C
字号:
#include<at89x52.h>
#include<stdio.h>
#include <intrins.h>
#define uchar unsigned char
unsigned char code p[]={'0','1','2','3','4','5','6','7','8','9'};
unsigned char key[16]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
unsigned char key_temp[16]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
unsigned char qq=0;
unsigned long x=0,timer=0,red=0;
unsigned char i=0;
sbit dir=P3^7;

sbit rs = P2^6; 
sbit rw = P2^5;
sbit ep = P2^4;

void delay(uchar);
void lcd_wcmd(uchar);
bit lcd_bz();
void lcd_pos(uchar);
void lcd_wdat(uchar);
void display(uchar,uchar *);

uchar  *dis1="pass_word:      ";
uchar  *dis2="                ";
uchar  dis3[16]="pass_word:      ";



void delay(unsigned int tt)
{       // 延时子程序
while(--tt);
}

bit lcd_bz()
{       // 测试LCD忙碌状态
 bit result;
dir=1; 
rs = 0;
 rw = 1;
 ep = 1;
 result = (bit)(P1 & 0x80);
 ep = 0;
 return result; 
}

void lcd_wcmd(uchar cmd)
{       // 写入指令数据到LCD
 while(lcd_bz());
  dir=0;
  rs = 0;
  rw = 0;
  ep = 0;
  P1 = cmd;
  ep = 1;
  ep = 0;  
}

void lcd_pos(uchar pos)
{       //设定显示位置
 lcd_wcmd(pos | 0x80);
}

void lcd_wdat(uchar dat) 
{       //写入字符显示数据到LCD
 while(lcd_bz());
  dir=0;
  rs = 1;
  rw = 0;
  ep = 0;
  P1 = dat;
  ep = 1;
  ep = 0; 
}

void lcd_init()
{       //LCD初始化设定
 lcd_wcmd(0x38);   //function set
 delay(200);
 lcd_wcmd(0x38);   //function set
 delay(200);
 lcd_wcmd(0x08);   //display on/off
 delay(200);
 lcd_wcmd(0x01);   //清除LCD的显示内容
 delay(200);
 lcd_wcmd(0x06);   //entry mode set
 delay(200);
 lcd_wcmd(0x0c);   //entry mode set
 delay(200);
}

/*---------------
函数名称:display()
功能 :在LCD上显示数组的数据
说明 :先写显示地址,后写显示数据
调用 :lcd_wcmd(), lcd_pos()
入口参数:pos 写入的位置,q指向要写入的数据所在的数组
返回值 :无
----------------*/
void display(uchar pos, uchar *q)
{ 
 uchar i;
 delay(200);
 lcd_pos(pos);
 for(i=0;i<16;i++)
 {
  lcd_wdat(*q);
  q++;
  
  
 } 
}

void red_test() interrupt 0
{
TR0=1;if(qq>0)x=x<<1;
timer=(TH0<<8)+TL0;
TH0=0;TL0=0;
if((qq>1)&&(timer>1200)) x=x+1;
qq++;
if(qq==34)
{
red=x;x=0;TR0=0;
qq=0;red=red&0x000000ff;
}

}




void move_on()
{
   P2_0=1;
   P2_1=1;
   P2_2=1;
   P2_3=1;
    delay(100);
   P2_0=0;
   P2_1=1;
   P2_2=1;
   P2_3=0;
}

void turn_left()
{
    P2_0=1;
    P2_1=1;
    P2_2=1;
    P2_3=1;
    delay(100);
    P2_0=1;
    P2_1=0;
    P2_2=1;
    P2_3=0;
}
void turn_right()
{
   P2_0=1;
   P2_1=1;
   P2_2=1;
   P2_3=1;
    delay(100);
   P2_0=0;
   P2_1=1;
   P2_2=0;
   P2_3=1;
}
void get_back()
{
    P2_0=1;
    P2_1=1;
    P2_2=1;
    P2_3=1;
    delay(100);
    P2_0=1;
    P2_1=0;
    P2_2=0;
    P2_3=1;
}

void stop()
{
   P2_0=1;
   P2_1=1;
   P2_2=1;
   P2_3=1;
}

void ring()
{
P2_7=0;
for(i=0;i<2;i++)
delay(10000);
P2_7=1;

}
void main()
{ 
unsigned int k=0,k0=0,k1=0,pp=10,turn=0;
unsigned char key=0,key_word[7]={5,5,3,2,3,2,7},enter_word[7]={0,0,0,0,0,0,0};
  TCON=0x00;
  TMOD=0x09;
  IT0=1;
  ET0=0;
  EX0=1;
  EA=1;
  
  TR0=0;

 
 
 lcd_init();    // 初始化LCD   
 delay(200); 

display(0x00,dis1);
display(0x40,dis2);
P0=0xff;

 while(1)
 { 
 
turn++;
k++;

if(red==207) {stop();key=0;for(i=0;i<6;i++)dis3[i+10]=' ';dis1=dis3;dis2="                ";pp=10;red=0;}
if(key==0)
{
dis2[0]=p[red/10000];
dis2[1]=p[(red/1000)%10];
dis2[2]=p[(red/100)%10];
dis2[3]=p[(red/10)%10];
dis2[4]=p[red%10];
switch(red)
{
 case 247: {dis3[pp]='*';dis1=dis3;enter_word[pp-10]=1;pp++;red=0;break;}
 case 63: {dis3[pp]='*';dis1=dis3;enter_word[pp-10]=2;pp++;red=0;break;}
 case 127: {dis3[pp]='*';dis1=dis3;enter_word[pp-10]=3;pp++;red=0;break;}
 case 159: {dis3[pp]='*';dis1=dis3;enter_word[pp-10]=4;pp++;red=0;break;}
 case 111: {dis3[pp]='*';dis1=dis3;enter_word[pp-10]=5;pp++;red=0;break;}
 case 71: {dis3[pp]='*';dis1=dis3;enter_word[pp-10]=6;pp++;red=0;break;}
 case 7: {dis3[pp]='*';dis1=dis3;enter_word[pp-10]=7;pp++;red=0;break;}
 case 79: {dis3[pp]='*';dis1=dis3;enter_word[pp-10]=8;pp++;red=0;break;}
 case 103: {dis3[pp]='*';dis1=dis3;enter_word[pp-10]=9;pp++;red=0;break;}
 case 39: {dis3[pp]='*';dis1=dis3;enter_word[pp-10]=0;pp++;red=0;break;}
 }

if(pp==16)
{
for(i=0;i<6;i++)
{
if(key_word[i]==enter_word[i]) continue;
else break;
}
if(i==6) {key=1;dis1="success enter   ";}
else {dis1="error           ";display(0x00,dis1);delay(50000);dis1="pass_word:      ";for(i=0;i<6;i++)dis3[i+10]=' ';display(0x00,dis1);pp=10;}
red=0;
}

}

if(key==1)
{
P0_7=1;
P0_6=1;

if(P0_7==0)
 {
   ring();
   get_back();
   for(i=0;i<1;i++)
   delay(10000);
   turn_left();
   for(i=0;i<2;i++)
   delay(7000);
   stop();
   delay(5000);
   move_on();
 }
if(P0_6==0)
{
  ring();
   get_back();
   for(i=0;i<1;i++)
   delay(10000);
   turn_right();
   for(i=0;i<2;i++)
   delay(7000);
      stop();
   delay(5000);
   move_on();

}





  
   if(red==218)   

   {
    ring();
    dis2="hello...........";

    red=0;
    }

    if(red==95) 
    {
	 ring();
     dis2="move..on........";
    move_on();
    red=0;
    }
    if(red==175) 
   {
    ring();
    dis2="turn...left.....";
    turn_left();
    red=0;
   }
   if(red==135) 
   {
   ring();
   dis2="stop....stop....";
   stop();
   red=0;
   }  
   if(red==143) 
   {
   ring();
   dis2="turn...right....";
   turn_right();
   red=0;
   } 
   if(red==215) 
   {
    ring();
    dis2="get....back.....";
    get_back();
	red=0;
    } 
}



if(k==100)
{
display(0x00,dis1);
display(0x40,dis2);
//printf("hello world\n");
k=0;
}
if((TH0>200)&&(qq<17)) {qq=0;TH0=0;TL0=0;}//protect


 }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -