|
/*******dianji.c部分*************************/
- #include < reg52.h >
- #include " dianji.h"
- #define uchar unsigned char
- char num=0,shi,fen,i;
- int ds,zuo,you,jd=1,kk,ting=0,d;
- uchar code minute[]={"分"};
- uchar code second[]={"秒"};
- void delay(unsigned int xms)
- {
- unsigned int i,j;
- for(j=0;j<xms;j++)
- for(i=0;i<80;i++);
- }
- /*******12232液晶*****************/
- void send_command(uchar command_data) //發(fā)命令
- {
- uchar i;
- uchar i_data;
- i_data=0xf8;
- CS=1;
- SCLK=0;
- for(i=0;i<8;i++)
- {
- SID=(bit)(i_data&0x80);
- SCLK=0;
- SCLK=1;
- i_data=i_data<<1;
- }
- i_data=command_data;
- i_data&=0xf0;
- for(i=0;i<8;i++)
- {
- SID=(bit)(i_data&0x80);
- SCLK=0;
- SCLK=1;
- i_data=i_data<<1;
- }
- i_data=command_data;
- i_data<<=4;
- for(i=0;i<8;i++)
- {
- SID=(bit)(i_data&0x80);
- SCLK=0;
- SCLK=1;
- i_data=i_data<<1;
- }
- CS=0;
- delay(10);
- }
- void send_data(uchar command_data) //發(fā)送數(shù)據(jù)
- {
- uchar i;
- uchar i_data;
- i_data=0xfa;
- CS=1;
- SCLK=0;
- for(i=0;i<8;i++)
- {
- SID=(bit)(i_data&0x80);
- SCLK=0;
- SCLK=1;
- i_data=i_data<<1;
- }
- i_data=command_data;
- i_data&=0xf0;
- for(i=0;i<8;i++)
- {
- SID=(bit)(i_data&0x80);
- SCLK=0;
- SCLK=1;
- i_data=i_data<<1;
- }
- i_data=command_data;
- i_data<<=4;
- for(i=0;i<8;i++)
- {
- SID=(bit)(i_data&0x80);
- SCLK=0;
- SCLK=1;
- i_data=i_data<<1;
- }
- CS=0;
- delay(10);
- }
- void LCD_init() //液晶初始化
- {
- PSB=0;
- delay(50);
- send_command(0x30); //設(shè)置8位數(shù)據(jù)接口,基本指令模式
- send_command(0x02); //清DDRAM
- send_command(0x06); //游標(biāo)及顯示右移一位
- send_command(0x0c); //整體顯示開(kāi),游標(biāo)關(guān),反白光
- send_command(0x01); //寫(xiě)入空格清屏幕
- send_command(0x89);
- while(minute[i]!='\0')
- {
- send_data(minute[i]);
- i=i+1;
- }
- i=0;
- send_command(0x9A);
- while(second[i]!='\0')
- {
- send_data(second[i]);i=i+1;
- }
- i=0;
- }
- /**********定時(shí)器********************/
- void Time0_Initk() //定時(shí)器初始化
- {
- TMOD=0x01;
- IE=0x82;
- TH0=0xfe;
- TL0=0x33;
- TR0=1;
- }
- void Time0_Init() interrupt 1
- {
- TH0=0xfe;
- TL0=0x33;
- ds=ds+1;kk++;
- if(ds==2000) //一秒時(shí)間到
- {
- ds=0;
- xianshi();
- }
-
- jd=jd+1;
- if(jd<zuo)
- {
- ENA=1;
- }
- else
- {
- ENA=0;
- }
- if(jd<you)
- {
- ENB=1;
- }
- else
- {
- ENB=0;
- }
- jd=jd%100; //jd自加次數(shù)始終保持為100
-
- }
- /***********計(jì)時(shí):——分——秒**************/
- void xianshi()
- {
- num=num+1;
- if(num==10)
- {
- num=0;
- shi=shi+1;
- }
- if(shi==6)
- {
- shi=0;
- fen=fen+1;
- }
- send_command(0x99);
- send_data(num+48);
- send_command(0x98);
- send_data(shi+48);
- send_command(0x88);
- send_data(fen+48);
- }
- /*************紅外遮擋情況*****************/
- void hw()
- {
- if(hwl==0&&hwr==0) //直走
- {
- in1= 1;in2= 0;
- in3= 0;in4= 1;
- zuo =16;you =10;
-
- }
- if(hwl==0&&hwr==1) //右拐
- {
- in1=0;in2=1;
- in3=1;in4=0;
- zuo =3;you =16;
- }
- if(hwl==1&&hwr==0) //左拐
- {
- in1=0;in2=1;
- in3=0;in4=1;
- // zuo =16;
- // you =3;
- }
- }
- /*********小車停下*************/
- void stop()
- {
- if(hwl==1&&hwr==1)
- {
- in1=0;in2=0;
- in3=0;in4=0;
- while(ting<5) //停下
- {
- if(d==0)
- {
- kk=0;
- d=2;
- }
- if(kk==2000) //一秒
- {
- ting=ting+1;
- send_command(0x80);
- send_data(ting+48);
- kk=0;
- }
- if(ting==5)
- {
- kk=3000;
- in1=1;in2=0;
- in3=0;in4=1;
- zuo=20;
- you=19;
- delay(200);
- }
- }
- ting=0;d=0;
- }
- }
復(fù)制代碼
/**********dianji.h部分*******************/
- #include < reg52.h >
- #define uchar unsigned char
- #define uint unsigned int
- sbit in1=P0^0; //左
- sbit in2=P0^1;
- sbit ENA=P0^2;
- sbit in3=P0^5; //右
- sbit in4=P0^6;
- sbit ENB=P0^7;
- sbit CS=P1^0;
- sbit SID=P1^1;
- sbit SCLK=P1^2;
- sbit PSB=P1^3;
- sbit hwr=P3^7; //紅外
- sbit hwl=P3^0;
- extern void hw();
- extern void LCD_init();
- extern void Time0_Initk() ;
- extern void xianshi();
- extern void stop();
- /********main.c主函數(shù)部分******************/
- #include <reg52.h>
- #include " dianji.h"
- void main()
- {
- ENA=0;ENB=0;
- Time0_Initk();
- LCD_init();
- while(1)
- {
- stop();
- hw();
- }
- }
復(fù)制代碼
|
評(píng)分
-
查看全部評(píng)分
|