1602红外显示程序

实验名 : 1602显示红外线值实验

使用的IO : 电机用P1口,键盘使用P3.0、P3.1、P3.2、P3.3

主程序

#include

#include"lcd.h"

sbit IRIN=P3^2;

unsigned char code CDIS1[13]={" Red Control "};

unsigned char code CDIS2[13]={" IR-CODE:--H "};

unsigned char IrValue[6];

unsigned char Time;

void IrInit();

void DelayMs(unsigned int );

void main()

{

unsigned char i;

IrInit();

LcdInit();

LcdWriteCom(0x80);

for(i=0;i

{

LcdWriteData(CDIS1);

}

LcdWriteCom(0x80+0x40);

for(i=0;i

{

LcdWriteData(CDIS2);

}

while(1)

{

IrValue[4]=IrValue[2]>>4; //高位

IrValue[5]=IrValue[2]&0x0f;//低位

if(IrValue[4]>9)

{

LcdWriteCom(0xc0+0x09);//设置显示位置

LcdWriteData(0x37+IrValue[4]);//将数值转换为该显示的ASCII码

}

else

{

LcdWriteCom(0xc0+0x09);

LcdWriteData(IrValue[4]+0x30);//将数值转换为该显示的ASCII码

}

if(IrValue[5]>9)

{

LcdWriteCom(0xc0+0x0a);

LcdWriteData(IrValue[5]+0x37);//将数值转换为该显示的ASCII码

}

else

{

LcdWriteCom(0xc0+0x0a);

LcdWriteData(IrValue[5]+0x30);//将数值转换为该显示的ASCII码

}

}

}

void DelayMs(unsigned int x) //0.14ms误差 0us

{

unsigned char i;

while(x--)

{

for (i = 0; i

{}

}

}

void IrInit()

{

IT0=1;//下降沿触发

EX0=1;//打开中断0允许

EA=1;//打开总中断

IRIN=1;//初始化端口

}

void ReadIr() interrupt 0

{

unsigned char j,k;

unsigned int err;

Time=0;

DelayMs(70);

if(IRIN==0)//确认是否真的接收到正确的信号

{

err=1000;//1000*10us=10ms,超过说明接收到错误的信号

/*当两个条件都为真是循环,如果有一个条件为假的时候跳出循环,免得程序出错的时

侯,程序死在这里*/

while((IRIN==0)&&(err>0))//等待前面9ms的低电平过去

{

DelayMs(1);

err--;

}

if(IRIN==1)//如果正确等到9ms低电平

{

err=500;

while((IRIN==1)&&(err>0)) //等待4.5ms的起始高电平过去

{

DelayMs(1);

err--;

}

for(k=0;k

{

for(j=0;j

{

err=60;

while((IRIN==0)&&(err>0))//等待信号前面的560us低电平过去

//while (!IRIN)

{

DelayMs(1);

err--;

}

err=500;

while((IRIN==1)&&(err>0)) //计算高电平的时间长度。

{

DelayMs(1);//0.14ms

Time++;

err--;

if(Time>30)

{

EX0=1;

return;

}

}

IrValue[k]>>=1; //k表示第几组数据

if(Time>=8)//如果高电平出现大于565us,那么是1

{

IrValue[k]|=0x80;

}

Time=0;//用完时间要重新赋值

}

}

}

if(IrValue[2]!=~IrValue[3])

{

return;

}

}

}

#include"lcd.h"

说 明 : 该函数是在12MHZ晶振下,12分频单片机的延时。

#include"lcd.h"

void Lcd1602_Delay1ms(uint c) //误差 0us

{

uchar a,b;

for (; c>0; c--)

{

for (b=199;b>0;b--)

{

for(a=1;a>0;a--);

}

}

}

#ifndef LCD1602_4PINS //当没有定义这个LCD1602_4PINS时

void LcdWriteCom(uchar com) //写入命令

{

LCD1602_E = 0; //使能

LCD1602_RS = 0; //选择发送命令

LCD1602_RW = 0; //选择写入

LCD1602_DATAPINS = com; //放入命令

Lcd1602_Delay1ms(1);//等待数据稳定

LCD1602_E = 1; //写入时序

Lcd1602_Delay1ms(5); //保持时间

LCD1602_E = 0;

}

#else

void LcdWriteCom(uchar com) //写入命令

{

LCD1602_E = 0; //使能清零

LCD1602_RS = 0; //选择写入命令

LCD1602_RW = 0; //选择写入

LCD1602_DATAPINS = com;//由于4位的接线是接到P0口的高四位,所以传送高四位不用改

Lcd1602_Delay1ms(1);

LCD1602_E = 1; //写入时序

Lcd1602_Delay1ms(5);

LCD1602_E = 0;

//Lcd1602_Delay1ms(1);

LCD1602_DATAPINS = com

Lcd1602_Delay1ms(1);

LCD1602_E = 1; //写入时序

Lcd1602_Delay1ms(5);

LCD1602_E = 0;

}

#endif

#ifndef LCD1602_4PINS

void LcdWriteData(uchar dat)//写入数据

{

LCD1602_E = 0;//使能清零

LCD1602_RS = 1;//选择输入数据

LCD1602_RW = 0;//选择写入

LCD1602_DATAPINS = dat; //写入数据

Lcd1602_Delay1ms(1);

LCD1602_E = 1; //写入时序

Lcd1602_Delay1ms(5); //保持时间

LCD1602_E = 0;

}

#else

void LcdWriteData(uchar dat)//写入数据

{

LCD1602_E = 0; //使能清零

LCD1602_RS = 1; //选择写入数据

LCD1602_RW = 0; //选择写入

LCD1602_DATAPINS = dat;//由于4位的接线是接到P0口的高四位,所以传送高四位不用改

Lcd1602_Delay1ms(1);

LCD1602_E = 1; //写入时序

Lcd1602_Delay1ms(5);

LCD1602_E = 0;

LCD1602_DATAPINS = dat

Lcd1602_Delay1ms(1);

LCD1602_E = 1; //写入时序

Lcd1602_Delay1ms(5);

LCD1602_E = 0;

}

#endif

#ifndefLCD1602_4PINS

void LcdInit() //LCD初始化子程序

{

LcdWriteCom(0x38); //开显示

LcdWriteCom(0x0c); //开显示不显示光标

LcdWriteCom(0x06); //写一个指针加1

LcdWriteCom(0x01); //清屏

LcdWriteCom(0x80); //设置数据指针起点

}

#else

void LcdInit() //LCD初始化子程序

{

LcdWriteCom(0x32); //将8位总线转为4位总线

LcdWriteCom(0x28); //在四位线下的初始化

LcdWriteCom(0x0c); //开显示不显示光标

LcdWriteCom(0x06); //写一个指针加1

LcdWriteCom(0x01); //清屏

LcdWriteCom(0x80); //设置数据指针起点

}

#endif

粽子糖果 发表于10-20 13:43 浏览65230次
分享到:

已有0条评论

暂时还没有回复哟,快来抢沙发吧

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

粽子糖果
粽子糖果(总统)
金币:41623个|学分:51975个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号