📄 super_truck.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 + -