?? hongwaiwws.c
字號:
#include<pic.h>
#include<math.h>
#include<stdio.h>
/******************************************************
**定義全局變量
*****************************************************/
unsigned char Position_X,Position_Y;
bank1 char String[32]="Hello,everyone!";
int x,y,k;
void Delay(int i);
void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *str);
void LCD1602_cls();
void delay(int k);
//////////////////////////////////////
//---------------------全局變量定義-------------------/
static unsigned int data,redata,credata,xdata,qxdata,keydata;
static unsigned char i,time_long;
//用戶臨時寄存器1--4
#define RMT RB4
/********************************************************************
中斷程序程序:
功能:執(zhí)行對RB0外部中斷,讀紅外口
********************************************************************/
void interrupt INT()
{
if(TMR1IF)
{
TMR1IF=0;
TMR1H=0xFF; //T1時間高位賦值
TMR1L+=0xc8; //T1時間低位賦初值
time_long++;
}
}
/*******************************************************
函數(shù)名稱:void initial()
主要功能:初始化系統(tǒng)
***************************************************************/
void initial()
{ ADCON1=0X07; //RA1位數(shù)字輸入端口
TRISB=0X10;
TRISC=0X00;
TRISD=0X00;
TRISE=0X00;
INTCON=0XC0; //關(guān)閉中斷
//RBIE=1;
//RBIF=0;
//INTEDG=1; //0下降沿,1上升沿
//RBPU=1;
T1CON=0x00; //0000 0001做內(nèi)部定時器
TMR1ON=1;
TMR1H=0xFF; //T1時間高位賦值
TMR1L+=0x5f; //T1時間低位賦初值
//PIE1=0x01; //關(guān)閉外部中斷1
TMR1IE=1;
TMR1IF=0;
// PIE2=0; //關(guān)閉外部中斷2
}
/*****************************************
//函數(shù)名稱:void initvar()
//函數(shù)功能:為系統(tǒng)調(diào)用值賦初值
//函數(shù)調(diào)用:主函數(shù)調(diào)用
*****************************************/
void initvar()
{
data=0;
redata=0;
credata=0;
i=0;
}
/*******************************************************************************
**函數(shù)名稱:void LCD1602_Write_Command()
**功能描述:LCD寫命令
******************************************************************************/
void LCD1602_Write_Command(unsigned char x)
{ RE0=0;
RE1=0;
RE2=1; //RS=0;RW=0;E=1;
PORTD=x;
RE2=0;
}
/*******************************************************************************
**函數(shù)名稱:char Locate_Position()
**函數(shù)描述:確定寫入數(shù)據(jù)的位置
*******************************************************************************/
char Locate_Position(unsigned char x,unsigned char y)
{ unsigned char Position; //數(shù)據(jù)的位置
Position_X=x;
Position_Y=y;
Position=Position_X&0x0f; //第幾個字符
Position_Y=Position_Y&0x01; //第幾行
switch(Position_Y)
{ case 0:break;
case 1:Position=Position|0x40; //計算出在第幾個存儲器
default:;
}
Position=Position|0x80;
return(Position);
}
/*******************************************************************************
**函數(shù)名稱:void LCD1602_Write_Word(char x,char Position)
**功能描述:LCD寫數(shù)據(jù)
********************************************************************************/
void LCD1602_Write_Word(unsigned char x)
{ RE0=1;
RE1=0;
RE2=1;
PORTD=x; //寫入數(shù)據(jù)
RE2=0;
}
/******************************************************************************
**函數(shù)名稱:void Delay ()
**功能描述:延時一段時間
*******************************************************************************/
void Delay(int j)
{
while(j--);
}
void delay(int k)
{
while(k--);
}
/******************************************************************************
**函數(shù)名稱:void LCD_Write_String()
**函數(shù)描述:寫入一串字符
******************************************************************************/
void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *str)
{ unsigned char i,j=0;
unsigned char Position;
while(str[j]>31) {j++;}
for(i=0;i<j;i++)
{ Position=Locate_Position(x,y); //確定顯示的位置
LCD1602_Write_Command(Position); //寫入顯示的位置
Delay(50);
LCD1602_Write_Word(str[i]); //寫入字符
Delay(50);
x++;
if(x==16)
{x=0;y^=1;} //如果寫到第16個則換行
}
}
/*******************************************************************************
**函數(shù)名稱:void LCD1602_cls()
**功能描述:顯示屏清屏
********************************************************************************/
void LCD1602_cls()
{
LCD1602_Write_Command(0x01); //顯示清屏
}
/*******************************************************************************
**函數(shù)名稱 :void LCD1602_Initial()
**功能描述:顯示器初始化
********************************************************************************/
void LCD1602_Initial()
{ TRISD=TRISD&0x00;
TRISE=TRISE&0xf8;
LCD1602_Write_Command(0x38);
Delay(25000);
LCD1602_Write_Command(0x38);
Delay(25000);
LCD1602_Write_Command(0x38);
Delay(25000);
LCD1602_Write_Command(0x38);
Delay(1000); //設(shè)置顯示的方式
LCD1602_Write_Command(0x08);; //顯示關(guān)閉
Delay(1000);
LCD1602_Write_Command(0x01); //清除顯示
Delay(1000);
LCD1602_Write_Command(0x06); //顯示光標(biāo)移動設(shè)置
Delay(1000);
LCD1602_Write_Command(0x0c); //顯示開及光標(biāo)設(shè)置
Delay(1000);
}
/*
;注意6121的遙控器發(fā)射碼依次為:同步頭(引導(dǎo)碼)+32位數(shù)據(jù)碼(用戶碼低8位+用戶碼高8位+鍵碼+鍵碼的反碼)
;引導(dǎo)碼是由9MS的高電平加4.5MS的低電平構(gòu)成,我們接收到的剛好反相為9MS的低電平加4.5MS的高電平.
;數(shù)據(jù)碼'0'是由560US的高電平加560US的低電平構(gòu)成,接收時反相為560US的低電平加560US的高電平構(gòu)成.
;數(shù)據(jù)碼'1'是由560US的高電平加1.69MS的高電平構(gòu)成,接收時反相為560US的低電平加1.69MS的高電平構(gòu)成.
*/
/********************************************************
-----------------主函數(shù)----------------------------------
********************************************************/
void main()
{
initvar();
initial();
LCD1602_Initial();
sprintf(String,"wws:2007-10-18");
LCD_Write_String(0,1,String);
while(1)
{
RB5=1;RB6=1;RB7=1;
if(RB4==0)
{
time_long=0;
while(RB4==0);
while(RB4==1);
if(time_long>=183) //183
{ xdata=0;
data=0;
for(i=0;i<16;i++)
{
while(RB4==0);
time_long=0;
while(RB4==1);
if(time_long>=100)
xdata=xdata+1;
else
xdata=xdata<<1;
}
for(i=0;i<16;i++)
{
while(RB4==0);
time_long=0;
while(RB4==1);
if(time_long>=100)
data=data+1;
else
data=data<<1;
}
}
if(qxdata==data)
{
credata=qxdata;
}
qxdata=data;
}
keydata=credata;
switch(keydata)
{
case 420: //亮度按鈕上 ^ 右轉(zhuǎn)ZZZZZZZZZZZZZ//EN3
RC7=0; RC6=1;
RC4=0; RC5=1;
break;
case 840: //亮度按鈕上 ^ 右轉(zhuǎn)ZZZZZZZZZZZZZ//EN3
RC7=0; RC6=1;
RC4=0; RC5=1;
break;
case 834: //圖像按鈕上 ^ 轉(zhuǎn)向停止ZZZZZZZZZ//
RC7=0; RC6=0;
RC4=0; RC5=0;
break;
case 1668: //圖像按鈕上 ^ 轉(zhuǎn)向停止ZZZZZZZZZ//
RC7=0; RC6=0;
RC4=0; RC5=0;
break;
case 2116: //7號鍵 7 小輪停止XXX//EN1
RB2=0;RB3=1;
break;
case 2118: //6號鍵 6 小輪啟動XXX
RB2=0;RB3=0;
break;
case 2130: //音量按鈕上 ^ 左轉(zhuǎn)ZZZZZZZZZZZZZ
RC7=1; RC6=0;
RC4=1; RC5=0;
break;
case 2132: //調(diào)頻CH按鈕下 拉1停 EN2
RC2=0;RC3=0;
break;
case 2136: //調(diào)頻CH按鈕上 拉1啟動
RC2=0;RC3=1;
break;
case 2148: // 10+按鈕 拉2停 EN2
RC0=0;RC1=0;
break;
case 2152: // 0/30按鈕 拉2啟動
RC0=0;RC1=1;
break;
case 3204: //3號鍵 主動輪停止 EN1
RB0=0;RB1=0;
break;
case 6408: //3號鍵 主動輪停止 EN1
RB0=0;RB1=0;
break;
case 3208: //2號鍵 主動輪啟動
RB0=0;RB1=1;
break;
case 6416: //2號鍵 主動輪啟動
RB0=0;RB1=1;
break;
case 6464: //紅色關(guān)閉鍵 全部關(guān)閉
PORTB=PORTB&0XF0;
PORTC=0X00;
break;
case 3232: //紅色關(guān)閉鍵 全部關(guān)閉
PORTB=PORTB&0XF0;
PORTC=0X00;
break;
default :break;
}
keydata=0;
if(redata!=credata)
{
// RC5=0;
sprintf(String,"%u ",credata);
LCD_Write_String(0,0,String);
redata=credata;
//Delay(1000);
//RC5=1;
//Delay(2000);
}
}
}
//----------------------------------------------------------
//----------------------end file----------------------------
//----------------------------------------------------------
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -