📄 pic_car.c
字号:
{
CSA=1; // 设置CSA=1,CSB=0,即片选1。
CSB=0;
}
else
{
CSA=0; // 设置CSA=0,CSB=1,即片选2。
CSB=1;
}
RW=0; // RW=0,DI=0,设置为写状指令态
DI=0;
PORTD=TRANS;
EN=1; //RE2-EN=1,让数据被读出
EN=0; //RE2-EN=0,数据被锁存(写)入KS0108B及其兼容控制驱动器
}
void WRITE1(char WRITE,int CLMADD,int E)
{ LCDSTA_BUSY(E);
TRANS1(CLMADD,E); // 设置列地址
TRISD=0X00; // RD为输出
if(E==1)
{
CSA=1; // 设置CSA=1,CSB=0,即片选1。
CSB=0;
}
else
{
CSA=0; // 设置CSA=0,CSB=1,即片选2。
CSB=1;
}
RW=0; // RW=0,DI=1,设置为写数据状态
DI=1;
PORTD=WRITE; // 将要写入数据赋值
EN=1; //RE2-EN=1,让数据被读出
EN=0; //RE2-EN=0,数据被锁存(写)入KS0108B及其兼容控制驱动器
}
void CLEAR(int E)
{
int PAGEADD,PAGENUM,CLMSUM;
for(PAGENUM=0X08,PAGEADD=0X0B8;PAGENUM>0;PAGENUM--,PAGEADD++)
{
LCDSTA_BUSY(E);
TRANS1(PAGEADD,E);
for(CLMSUM=0x40;CLMSUM<=0X7F;CLMSUM++)
{
LCDSTA_BUSY(E);
WRITE1(0X00,CLMSUM,E);
}
}
TRANS1(0xc0,E);
}
void DISP_ON(int E)
{
int E1FLAG;
TRISD=0XFF;
while(1)
{ LCDSTA_BUSY(E);
TRANS1(0X03F,E);
TRISD=0XFF;
if(E==1)
{
CSA=1; // 设置CSA=1,CSB=0,即片选1。
CSB=0;
}
else
{
CSA=0; // 设置CSA=0,CSB=1,即片选2。
CSB=1;
}
RW=1; // RW=1,DI=0,设置为读状态
DI=0;
EN=1;
E1FLAG=PORTD&0X20;
EN=0;
if(E1FLAG==0X00) break;
}
}
void DISP_OFF(int E)
{
int E1FLAG;
TRISD=0XFF;
while(1)
{ LCDSTA_BUSY(E);
TRANS1(0X03E,E);
TRISD=0XFF;
if(E==1)
{
CSA=1; // 设置CSA=1,CSB=0,即片选1。
CSB=0;
}
else
{
CSA=0; // 设置CSA=0,CSB=1,即片选2。
CSB=1;
}
RW=1; // RW=1,DI=0,设置为读状态
DI=0;
EN=1;
E1FLAG=PORTD&0X20;
EN=0;
if(E1FLAG==0X20) break;
}
}
void START_LINE(int LINE,int E)
{
LCDSTA_BUSY(E);
TRANS1(LINE,E);
}
void DISPLAY_CHINESE(int E,int PAGADD,int CLMADD)
{
int K;
char TEMP;
LCDSTA_BUSY(E);
TRANS1(PAGADD,E);
for(K=0;K<16;K++,CLMADD++,ARRAY++)
{ LCDSTA_BUSY(E);
TEMP=*ARRAY;
WRITE1(TEMP,CLMADD,E);
}
CLMADD=CLMADD-16;
PAGADD=PAGADD+1;
TRANS1(PAGADD,E);
for(;K<32;K++,CLMADD++,ARRAY++)
{
LCDSTA_BUSY(E);
TEMP=*ARRAY;
WRITE1(TEMP,CLMADD,E);
}
}
void DISPLAY_NUMBER(int E,int PAGADD,int CLMADD)
{
int K;
char TEMP;
TRANS1(PAGADD,E);
LCDSTA_BUSY(E);
for(K=0;K<8;K++,CLMADD++,ARRAY++)
{ LCDSTA_BUSY(E);
TEMP=*ARRAY;
WRITE1(TEMP,CLMADD,E);
}
CLMADD=CLMADD-8;
PAGADD=PAGADD+1;
TRANS1(PAGADD,E);
LCDSTA_BUSY(E);
for(;K<16;K++,CLMADD++,ARRAY++)
{ LCDSTA_BUSY(E);
TEMP=*ARRAY;
WRITE1(TEMP,CLMADD,E);
}
}
void LCD_INIT(int E)
{ DISP_OFF(E);
CLEAR(E);
DISP_ON(E); // 开E边显示
}
void delay(unsigned int number)
{unsigned int jjj;
for(jjj=0;jjj<number;jjj++)
{}
}
void show_tu(const char *p)
{char e=1,collum=0,page=0xb8;
int da=0;
int j=1;
int jk=0;
char add=0;
for(j=1;j<1025;j++)
{ LCDSTA_BUSY(e);
TRANS1(page,e);
if(j<jk)
{
WRITE1(da,collum,e);
collum++;
}
else
{
da=*p;
WRITE1(da,collum,e);
collum++;
if((da==0)||(da==0xff))
{jk=*(++p)+j;
p++;
}
else p++;
}
if(j%128==0) page++;
if(j%64==0)
{add=add+2;
e=e^1;
collum=0;
}
delay(add);
}
}
char eeprom_read(char ADR)
{ char eeprom_data=0;
EEADR=ADR;
while(1)
{
if(EEPROM_RD==0) break;
}
EEPROM_RD=1;
eeprom_data=0; //等待
eeprom_data=0; //等待
eeprom_data=EEDATA;
return(eeprom_data);
}
void eeprom_write(char ADR,char eeprom_data)
{
while(1)
{
if(EEPROM_WR==0) break;
}
EEADR=ADR;
EEDATA=eeprom_data;
EEPROM_WREN=1;
EECON2=0X55;
EECON2=0XAA;
EEPROM_WR=1;
EECON1=0;
}
int AD(void)
{
//char AD_flag;
int AD_Data;
TRISA0=1;
ADCON1=0B10001110;
ADCON0=0B01000000;
AD_ADON=1;
AD_GO=1;
//ADCON0=0B01000101;
while(1)
{
if(AD_GO==0)
break;
}
AD_Data=ADRESH;
AD_Data=(AD_Data<<8);
AD_Data=AD_Data+ADRESL;
AD_ADON=0;
return(AD_Data);
}
//*******************************红外遥控处理函数 29按键***************//
void remotecontrol(void)
{
switch(DataOut)
{
case 0b00011000 : TXREG=MUSIC; key_switch_flag=1; break; //钟
case 0b01111000 : TXREG=MUSIC; key_switch_flag=1; break; //亮度
case 0b11101000 : deal_stop(); key_switch_flag=1; TXREG=MUSIC; break;
case 0b01101000 :if((auto_manualcount_key%2)==0) // tv/av
{
manual_auto_flag=1;
wheelcircle=0;
move_reset();
TXREG=AUTO_MODLE;
}
else { deal_stop();
TXREG=REMOTE_MODLE;
}
auto_manualcount_key++;
key_switch_flag=1;
break;
case 0b00101000 :if((power_on_off_key%2)==0) //电源
{
TXREG=POWER_OFF;
deal_stop();
}
else
{
TXREG=POWER_ON;
}
power_on_off_key++;
key_switch_flag=1;
break;
case 0b10101000 : if((sound_on_off_key%2)==0) //喇叭关
TXREG=SCILENT;
else
TXREG=SCIENT_OFF;
sound_on_off_key++;
key_switch_flag=1;
break;
case 0b10011000 : if(sys_init_on_off_key==0) //屏幕 和 'set' 两个按钮
{
TXREG=SYS_INIT_TIP;
sys_init_on_off_timer_key=RTC;
sys_init_on_off_key=1;
}
else
{if((RTC-sys_init_on_off_timer_key)<6144)
{
TXREG=START_INIT;
//deal_stop();
sys_init_on_off_key=0;
}
else {TXREG=SYS_INIT_TIP;
sys_init_on_off_key=1;
sys_init_on_off_timer_key=RTC;
}
}
key_switch_flag=1;
break;
}
if(manual_auto_flag==0)
{
switch(DataOut)
{
case 0b00000000 : status(speed1); TXREG=MUSIC; break; //1
case 0b10000000 : status(speed2); TXREG=MUSIC; break; //2
case 0b01000000 : status(speed3); TXREG=MUSIC; break; //3
case 0b11000000 : status(speed4); TXREG=MUSIC; break; //4
case 0b00100000 : status(speed5); TXREG=MUSIC; break; //5
case 0b10100000 : status(speed6); TXREG=MUSIC; break; //6
case 0b01100000 : status(speed7); TXREG=MUSIC; break; //7
case 0b11100000 : status(speed8); TXREG=MUSIC; break; //8
case 0b00010000 : status(speed9); TXREG=MUSIC; break; //9
case 0b10001000 : status(left); TXREG=MUSIC; break; //P V 50
case 0b00001000 : status(right); TXREG=MUSIC; break; //P ^
case 0b01011000 : status(middle); TXREG=MUSIC; break; //循环健
case 0b01001000 : status(gohead); TXREG=MUSIC; break; //声大
case 0b11001000 : status(goback); TXREG=MUSIC; break; //声小
case 0b10111000 : status(speeddel);TXREG=MUSIC; break; //MIN
case 0b00111000 : status(speedadd);TXREG=MUSIC; break; //hour
default : if(key_switch_flag==1) key_switch_flag=0;
else TXREG=MUSIC_ERROR; break;
}
}
else{
switch(DataOut)
{
case 0b10010000 : TXREG=MUSIC; break; //0/1*
case 0b01010000 : TXREG=MUSIC; break; //2*
case 0b11010000 : TXREG=MUSIC; break; //3*
default : if(key_switch_flag==1) key_switch_flag=0;
else TXREG=MUSIC_ERROR; break;
}
}
DataOut=0xff;
}
void status(int statusdata) // 状态控制
{
switch(statusdata)
{ case stop : PWM_MOTOR2=0;
speed=0;
CCPR1L=0;
now_goorback=stop;
break;
case gohead : speed=3;
PWM_MOTOR2=0;
now_goorback=gohead;
break;
case goback : speed=2;
PWM_MOTOR2=1;
now_goorback=goback;
break;
case speed1 : speed=2; break; //
case speed2 : speed=3; break;
case speed3 : speed=4; break;
case speed4 : speed=5; break;
case speed5 : speed=6; break;
case speed6 : speed=8; break;
case speed7 : speed=10; break;
case speed8 : speed=12; break;
case speed9 : speed=15; break;
case left : PWMontimeHelm=48;//
helmcount=0;
now_rightorleft=left;
break;
case right : PWMontimeHelm=28; //
helmcount=0;
now_rightorleft=right;
break;
case middle : PWMontimeHelm=38;
helmcount=0;
now_rightorleft=middle;
break;
case leftadd : PWMontimeHelm=PWMontimeHelm+RateHelm;
if(PWMontimeHelm>=51)
PWMontimeHelm=52;
helmcount=0;
break;
case rightadd : PWMontimeHelm=PWMontimeHelm-RateHelm;
if(PWMontimeHelm<=29) PWMontimeHelm=29;
helmcount=0;
break;
default : break;
}
}
void deal_stop(void)
{
auto_go_back=0;
manual_auto_flag=0;
status(stop);
status(middle);
now_circle=0;
auto_manualcount_key=0;
}
//end main
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -