液晶显示遥控程序.docx

上传人:b****8 文档编号:11295458 上传时间:2023-02-26 格式:DOCX 页数:29 大小:84.56KB
下载 相关 举报
液晶显示遥控程序.docx_第1页
第1页 / 共29页
液晶显示遥控程序.docx_第2页
第2页 / 共29页
液晶显示遥控程序.docx_第3页
第3页 / 共29页
液晶显示遥控程序.docx_第4页
第4页 / 共29页
液晶显示遥控程序.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

液晶显示遥控程序.docx

《液晶显示遥控程序.docx》由会员分享,可在线阅读,更多相关《液晶显示遥控程序.docx(29页珍藏版)》请在冰豆网上搜索。

液晶显示遥控程序.docx

液晶显示遥控程序

带中文字库12864LCD液晶+红外解码遥控显示程序(调试可用)

#include

#include

#include

#include

voidInf_Dec();

voidInf_Con(ucharCommand);

voidManu_Display();

voidAuto_Display(biteN);//自动显示

//外部中断初始化

voidInt0_Init()

{

EX0=1;

IT0=1;//作为按键接收

EX1=1;

IT1=1;//作为红外接收

PX0=1;

EA=1;

}

//定时器初始化

voidTime0_Init()//12M晶振

{

TMOD=0X22;//T1,T2分别为八位自动重装

TH0=256-184;//定时100us

TL0=256-184;

ET0=1;

TR0=0;//等待接收使能

EA=1;

}

//串口初始化

voidSerial_Init()

{

SCON=0X50;

TMOD=0X22;

ES=1;

TH1=0XFA;

TL1=0XFA;

EA=1;

TR1=1;

}

//串口发送函数

voidSerial_Send(ucharch)

{

SBUF=ch;

while(TI==0);

TI=0;

}

//系统初始化

voidSys_Init()

{

Int0_Init();

Time0_Init();

Serial_Init();

LCD_Init();

}

//延时函数

voidDlay_1S(uintt)

{

uinti,j;

for(i=0;i

for(j=0;j<10000;j++);

}

voidmain(void)

{

Sys_Init();//系统初始化

while

(1)

{

if(Irf_En&&(pCount>=34))//仅在接收完毕执行一次

{

Inf_Dec();//红外测试和解调

Inf_Con(Irf_Data);//红外遥控

Irf_En=0;

Auto_Display(Flag_Auto&&Flag_State);//自动显示,界面切换和字幕滚动

}//自动显示时,按键是失效的,有待于改进

}

}

//脉宽捕捉计数

voidTime0()interrupt1

{

tCount++;

}

//红外接收脉宽捕捉

voidInt0()interrupt0

{

TR0=0;//关闭计数

Led1=1;

if(tCount>=88&&tCount<93)//计数复位

{

pCount=0;

IC[pCount++]=tCount;//记录引导码测试结果:

引导码90,91数据码11,22

tCount=0;

Irf_En=1;//启动解调函数jt();

Led1=0;

}

else

{

if(pCount<39)//防止溢出

{

IC[pCount++]=tCount;

tCount=0;

}

else

{

IC[pCount]=tCount;

tCount=0;

}

}

TR0=1;

}

/**********************红外解码**********************/

voidInf_Dec()

{

uintBuf=0;

uchari,D[3];

TR0=0;

for(i=0;i<40;i++)

{

if(i>=17&&i<33)//测试数据码的正确性i>=17&&i<33

{//测试全部码的正确性i>=00&&i<40

Buf<<=1;

if(IC[i]>15)//T>2ms:

1T<2ms:

0

{//原码*256+反码

Buf=Buf+1;

}

}

IC[i]=0;

}

D[0]=Buf/256;//原码

D[1]=~(Buf%256);//反码还原

if(D[0]==D[1])//接收码校检

{

Irf_Data=D[1];

}

else

{

Irf_Data=0xff;//误码

}

///////////////测试数据码//////////////////-----------调试用:

///////////////可以通过串口调试软件查看按键接收码:

波特率:

9600

Buf=Irf_Data;

for(i=0;i<3;i++)

{

D[i]=Buf%10;

Buf=Buf/10;

}

for(i=0;i<3;i++)

{

Serial_Send(D[2-i]+48);//发送解码

}

Serial_Send(46);

Serial_Send(46);//测试结果:

////////////////////////////////////////////

}

/**********************红外遥控**********************/

voidInf_Con(ucharCommand)

{

//开机关机控制

if(Command==On_Off)//设置显示状态

{

Flag_State=~Flag_State;

Led2=~Flag_State;//开机指示灯

if(!

Flag_State)//显示标志复位

{

Char_count=3;//控制显示滚动

Flag_State=0;//0:

关闭显示1:

启动显示

Flag_Auto=0;//0:

关闭自动模式,1:

启动自动模式

Flag_Page=0;//界面标志界面1:

界面2,界面3

}

LCD_Init();//启动显示

}

if(Flag_State)//开机状态下使能

{

if(Command==Auto_Manu)//设置自动手动模式

{

Flag_Auto=!

Flag_Auto;//默认为自动模式

Led1=!

Flag_Auto;//自动模式下,Led2指示

}

if(!

Flag_Auto)//手动模式下使能

{

if(Command==Up)//界面上翻

{

if(Flag_Page<2)

{

Flag_Page++;

}

}

if(Command==Down)//界面下翻

{

if(Flag_Page>0)

{

Flag_Page--;

}

}

if(Flag_Page==1)//界面1有效

{

if(Command==Left)

{

if(Char_count>3)//汉字y坐标显示最左滚动到3

{

Char_count--;

}

}

if(Command==Right)

{

if(Char_count<22)//汉字y坐标显示最左滚动到3

{

Char_count++;

}

}

}

}

Manu_Display();

}

}

voidManu_Display()

{

Led2=!

Flag_State;//Led2指示显示状态

if(Flag_State)//显示打开

{

if(!

Flag_Auto)//手动模式

{

if(Flag_Page==0)

{

Start_Disp();//开机界面

}

if(Flag_Page==1)

{

Content_1(Char_count);//课题信息界面

}

if(Flag_Page==2)//结束界面

{

Content_2();

}

}

}

}

voidAuto_Display(biteN)//自动显示

{

if(eN)

{

Start_Disp();//开机界面

Dlay_1S

(2);

for(Char_count=3;Char_count<22;Char_count++)

{

Content_1(Char_count);//课题信息界面

Delay1mS(8000);

}

Char_count=3;

Content_1(Char_count);//课题信息界面

Dlay_1S

(1);

Content_2();

}

}

//串口调试,测试遥控器码

voidSerial()interrupt4

{

ucharch;

if(RI==1)

{

RI=0;

ch=SBUF;

if(ch==1)

{

}

}

}

#ifndef__LCD_H__

#define__LCD_H__

#include

#definesome_nop();_nop_();_nop_();_nop_();_nop_();

//本程序使用带中文字库的液晶显示器LCD12864

bitCheckBusy();//读BF标志位,检查LCD是否就绪

voidWait();//等待LCD就绪

voidWrite_Data(uchardat);//写一个字节数据

voidWrite_Command(uchardat);//写命令

voidWrite_String(ucharx,uchary,uchar*p);//写字符串

voidLcd_Init();//LCD初始化

voidSet_Position(ucharx,uchary);//设置待显示的位置

voidShut();//关显示

voidClear_Picture();//清除图片显示

//延时程序

voidDelay1mS(uinttt)//延时tt毫秒

{

uchari;

while(tt--)

for(i=100;i>0;i--);

}

//读BF标志位,检查LCD是否就绪

bitCheckBusy()

{

RS=0;

some_nop();

RW=1;

some_nop();

E=1;

some_nop();

if(LCD_DATA&0x80)

return1;

else

return0;

}

//等待LCD就绪

voidWait()

{

while(CheckBusy());

}

//写一个字节数据

voidWrite_Data(uchardat)

{

Wait();

RS=1;

RW=0;

E=1;

some_nop();

LCD_DATA=dat;

some_nop();

E=0;

some_nop();

}

//写命令

voidWrite_Command(uchardat)

{

Wait();

RS=0;

RW=0;

E=1;

some_nop();

LCD_DATA=dat;

some_nop();

E=0;

some_nop();

}

//写字符串

voidWrite_String(ucharx,uchary,uchar*p)

{

charcnt=0;

Set_Position(x,y);//显示位置

while(*(p+cnt)!

='\0')

{

Write_Data(*(p+cnt));

cnt++;

}

}

//字符串滚动

voidWrite_String_Roll(ucharx,uchary,ucharmove,ucharnum,uchar*p)

{//x,y显示位置,move,移动次数;num:

一次显示个数,*p调用显示字符

ucharcnt=0;

Set_Position(x,y);//显示位置

while((*(p+cnt+move*2)!

='\0')&&(cnt

{

Write_Data(*(p+cnt+move*2));

cnt++;

}

}

//LCD初始化

voidLCD_Init()

{

Delay1mS(100);

Write_Command(0x30);//基本指令30H,扩充指令为34H

Delay1mS

(1);

Write_Command(0x0c);//显示开,关光标.开光标0X0E

Delay1mS

(1);

Write_Command(0x01);//清屏清除字符显示

Delay1mS(100);

Write_Command(0x34);//基本指令30H,扩充指令为34H

Delay1mS

(1);

Write_Command(0x3e);//扩充指令36H绘图开

Delay1mS

(1);

Clear_Picture();//清除图片显示

Shut();//关显示

}

//显示关

voidShut()

{

Write_Command(0x30);//基本指令30H,扩充指令为34H

Delay1mS

(1);

Write_Command(0x08);//显示关,关光标.开光标0X0E

Delay1mS

(1);

}

//设置待显示的位置

voidSet_Position(ucharx,uchary)

{

ucharp;

switch(x%4)

{

case0:

p=0x80;break;//第一行开始地址

case1:

p=0x90;break;//第二行

case2:

p=0x88;break;//第三行

case3:

p=0x98;break;//第四行

}

p+=y;

Write_Command(p);

}

//图片显示清屏

voidClear_Picture()

{

uchari,j;

for(i=0;i<64;i++)

{

Write_Command(0x80|(i%32));

Write_Command(0x80|(i/32*8));

for(j=0;j<16;j++)

{

Write_Data(0);

Delay1mS

(1);

}

}

}

//设置图形显示

voidSet_Picture_Dis()//设置图形显示

{

Write_Command(0x34);//基本指令30H,扩充指令为34H

Delay1mS

(1);

Write_Command(0x3e);//扩充指令36H绘图开

Delay1mS

(1);

Clear_Picture();//清屏

}

//设置字符显示

voidSet_Char_Dis()//设置字符显示

{

Write_Command(0x30);//基本指令30H,扩充指令为34H

Delay1mS

(1);

Write_Command(0x0c);//显示开,关光标.开光标0X0E

Delay1mS

(1);

Write_Command(0x01);//清屏

Delay1mS(100);

}

//开机界面

voidStart_Disp()

{

uchari,j;

LCD_Init();

Set_Picture_Dis();//设置图形显示

Clear_Picture();//清屏

//显示【毕业设计】

for(i=0;i<32;i++)

{

Write_Command(0x80|i);

Write_Command(0x80);

for(j=0;j<16;j++)

{

Write_Data(Picture_1[i][j]);

Delay1mS(100);

}

}

//显示【制作者:

蒋银】

for(i=0;i<24;i++)

{

Write_Command(0x80|i+4);

Write_Command(0x88);

for(j=0;j<16;j++)

{

Write_Data(Picture_2[i][j]);

Delay1mS(100);

}

}

}

//课题信息界面

voidContent_1(ucharcC)

{

Set_Char_Dis();//设置字符显示

Write_String(0,2,Tab1);

Write_String_Roll(1,0,0,3,Tab2);

Write_String_Roll(1,3,cC,4,Tab2);

Write_String(2,0,Tab3);

Write_String(3,0,Tab4);

}

//结束界面

voidContent_2()//显示【谢谢再见】

{

uchari,j;

LCD_Init();

Set_Picture_Dis();//设置图形显示

Clear_Picture();//清屏

for(i=16;i<32;i++)//上半屏显示

{

Write_Command(0x80|i);

Write_Command(0x80);

for(j=0;j<16;j++)

{

Write_Data(Picture_3[i-16][j]);

Delay1mS(100);

}

}

for(i=0;i<16;i++)//下半屏显示

{

Write_Command(0x80|i);

Write_Command(0x88);

for(j=0;j<16;j++)

{

Write_Data(Picture_3[i+16][j]);

Delay1mS(100);

}

}

}

#endif

#ifndef__GLOBAL_H__

#define__GLOBAL_H__

sbitLed1=P2^0;

sbitLed2=P2^1;

typedefunsignedcharuchar;

typedefunsignedintuint;

//遥控器键功能定义

#defineUp8

#defineDown136

#defineLeft200

#defineRight72

#defineAuto_Manu104

#defineOn_Off40

//红外解码全局变量定义

ucharIrf_Data=0;//解码

uinttCount=0;//波形计数

ucharIC[40];//红外脉宽计数值

ucharpCount=0;//计数

bitIrf_En=0;//解码控制

//LCD接口定义

#defineLCD_DATAP0//数据口

sbitRS=P2^7;//并行的指令/数据选择信号,H数据,L命令

sbitRW=P2^6;//并行读写选择信号,H读,L写

sbitE=P2^5;//并行使能端,H有效,L无效

sbitPSB=P2^4;//串并行选择端,H选择并行,L选择串行

bitFlag_State=0;//0:

关闭显示1:

启动显示

bitFlag_Auto=0;//0:

关闭自动模式,1:

启动自动模式

ucharFlag_Page=0;//界面标志界面1:

界面2,界面3

ucharChar_count=3;//控制显示滚动

ucharcodePicture_1[][16]=

{

//毕业设计

/*--宽度x高度=128x32--*/

0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0x80,0x00,0x00,0x00,0x00,0x3F,0x03,0xFC,0x00,

0x01,0xFF,0x3F,0xE0,0x00,0x7F,0xF3,0xC0,0x1F,0xC7,0xFF,0xC0,0x7F,0x87,0x9E,0x00,

0x03,0xC7,0xF8,0xF0,0x00,0x71,0xE1,0xC0,0x39,0xEF,0x01,0xE0,0xF3,0xC7,0x0E,0x00,

0x03,0xC7,0xF8,0x7F,0x80,0x70,0xE1,0xC0,0x78,0xFE,0x00,0xF0,0xE1,0xE7,0x0E,0x00,

0x03,0xC7,0xF8,0x73,0x80,0x70,0xE1,0xC0,0x78,0x7E,0x00,0xF0,0xF0,0xE7,0x0E,0x00,

0x03,0xC0,0x3C,0x03,0x80,0x70,0xE1,0xC0,0x3C,0x7E,0x00,0xF0,0xF0,0xF7,0x0E,0x00,

0x03,0xC0,0x3C,0x01,0x87,0xF0,0xE1,0xC0,0x1C,0x7E,0x01,0xF8,0x79,0xE7,0x0E,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 解决方案

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1