📄 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
/********************************************************************
中断程序程序:
功能:执行对RB0外部中断,读红外口
********************************************************************/
void interrupt INT()
{
if(TMR1IF)
{
TMR1IF=0;
TMR1H=0xFF; //T1时间高位赋值
TMR1L+=0xc8; //T1时间低位赋初值
time_long++;
}
}
/*******************************************************
函数名称:void initial()
主要功能:初始化系统
***************************************************************/
void initial()
{ ADCON1=0X07; //RA1位数字输入端口
TRISB=0X10;
TRISC=0X00;
TRISD=0X00;
TRISE=0X00;
INTCON=0XC0; //关闭中断
//RBIE=1;
//RBIF=0;
//INTEDG=1; //0下降沿,1上升沿
//RBPU=1;
T1CON=0x00; //0000 0001做内部定时器
TMR1ON=1;
TMR1H=0xFF; //T1时间高位赋值
TMR1L+=0x5f; //T1时间低位赋初值
//PIE1=0x01; //关闭外部中断1
TMR1IE=1;
TMR1IF=0;
// PIE2=0; //关闭外部中断2
}
/*****************************************
//函数名称:void initvar()
//函数功能:为系统调用值赋初值
//函数调用:主函数调用
*****************************************/
void initvar()
{
data=0;
redata=0;
credata=0;
i=0;
}
/*******************************************************************************
**函数名称: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;
}
/*******************************************************************************
**函数名称:char Locate_Position()
**函数描述:确定写入数据的位置
*******************************************************************************/
char Locate_Position(unsigned char x,unsigned char y)
{ unsigned char Position; //数据的位置
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);
}
/*******************************************************************************
**函数名称:void LCD1602_Write_Word(char x,char Position)
**功能描述:LCD写数据
********************************************************************************/
void LCD1602_Write_Word(unsigned char x)
{ RE0=1;
RE1=0;
RE2=1;
PORTD=x; //写入数据
RE2=0;
}
/******************************************************************************
**函数名称:void Delay ()
**功能描述:延时一段时间
*******************************************************************************/
void Delay(int j)
{
while(j--);
}
void delay(int k)
{
while(k--);
}
/******************************************************************************
**函数名称:void LCD_Write_String()
**函数描述:写入一串字符
******************************************************************************/
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个则换行
}
}
/*******************************************************************************
**函数名称:void LCD1602_cls()
**功能描述:显示屏清屏
********************************************************************************/
void LCD1602_cls()
{
LCD1602_Write_Command(0x01); //显示清屏
}
/*******************************************************************************
**函数名称 :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); //设置显示的方式
LCD1602_Write_Command(0x08);; //显示关闭
Delay(1000);
LCD1602_Write_Command(0x01); //清除显示
Delay(1000);
LCD1602_Write_Command(0x06); //显示光标移动设置
Delay(1000);
LCD1602_Write_Command(0x0c); //显示开及光标设置
Delay(1000);
}
/*
;注意6121的遥控器发射码依次为:同步头(引导码)+32位数据码(用户码低8位+用户码高8位+键码+键码的反码)
;引导码是由9MS的高电平加4.5MS的低电平构成,我们接收到的刚好反相为9MS的低电平加4.5MS的高电平.
;数据码'0'是由560US的高电平加560US的低电平构成,接收时反相为560US的低电平加560US的高电平构成.
;数据码'1'是由560US的高电平加1.69MS的高电平构成,接收时反相为560US的低电平加1.69MS的高电平构成.
*/
/********************************************************
-----------------主函数----------------------------------
********************************************************/
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: //亮度按钮上 ^ 右转ZZZZZZZZZZZZZ//EN3
RC7=0; RC6=1;
RC4=0; RC5=1;
break;
case 840: //亮度按钮上 ^ 右转ZZZZZZZZZZZZZ//EN3
RC7=0; RC6=1;
RC4=0; RC5=1;
break;
case 834: //图像按钮上 ^ 转向停止ZZZZZZZZZ//
RC7=0; RC6=0;
RC4=0; RC5=0;
break;
case 1668: //图像按钮上 ^ 转向停止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: //音量按钮上 ^ 左转ZZZZZZZZZZZZZ
RC7=1; RC6=0;
RC4=1; RC5=0;
break;
case 2132: //调频CH按钮下 拉1停 EN2
RC2=0;RC3=0;
break;
case 2136: //调频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: //红色关闭键 全部关闭
PORTB=PORTB&0XF0;
PORTC=0X00;
break;
case 3232: //红色关闭键 全部关闭
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----------------------------
//----------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -