⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd_887+12864.c

📁 这是我用ds12887+12864+遥控器写的程序希望能够多多交流qq519212866
💻 C
字号:
//遥控器采用中断法扫描
//此程序是用DS12C887作为时钟,显示采用12864;
//带遥控器调节的,【调试中】,采用ME 500B 平台;
//遥控器的用户头码的反码是0xf7,用户码0x16是功能输入选择;0x00是功能加;0x01是功能减;
//采用intel模式  能够正常的读出DS12C887里面各个寄存器的数据 ; 晶振12MHz;
//可以正常的在LCD12864上显示年、月、日、星期、时、分、秒;且个功能均能调节;
//闹钟的时 分 秒可以调整,且到时时蜂鸣器会响,此时可以按k1~k4任意键或者按遥控器上的的任意键清除闹钟,输入选择键除外;
//完成日期:2009-01-11   20:05
//设计人:佘望胜。
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
#include<delay_delay.h>
#include<define_sws.h>
#include<12864.h>
#include<ds12c887.h>
#include<init_sws.h>
#include<beep_sws.h>
#include<ir_irss.h>	   //遥控功能处理程序
//#include<ir_remote.h>	   //遥控解码程序,扫描法
#include<display.h>
#include<key_swit.h>	 //用switch语句写的按键扫描
//==========================================================================================
void ir_jie()	   //核心解码程序
{
uchar q,s,count;
EX0=0;	   //关闭外中断0,防止干扰信号进入
	//===================================开始读32个码=====================================	
	for(s=0;s<4;s++)      //循环4次读完客户码,客户反吗;数据码,数据反码。
	{
		for(q=0;q<8;q++)  //8位为一个字节
		{
		while(!remote);       //等待0.56ms的高电平
		delay882();	
		if(remote==0)         //判断ir是不是为低电平
			{
			count=count>>1;
			count=count|0x00;
			}	
		else if(remote==1)
		   	{
			delay1000();
			count=count>>1;
			count=count|0x80;
			}
		}  //1位数据接收结束
	irtab[s]=count;
	count=0;	
	}  //32位二进制码接收结束 
EX0=1;		//开外部中断0
}
//======================================核心解码程序结束===============================================
//================================================主函数===================================================//
void main()
{
EA=1;     //开总中断
EX0=1;    //外部中断0允许,定义为遥控器
IT0=1;	  //外部中断设置为1,下降沿触发;0为低电平触发,定义为遥控器的触发方式
EX1=1;    //外部中断1允许,定义为887
IT1=1;    //外部中断1设置为下降沿触发,定义为887的触发方式										  
	inital();           //初始化
	while(1)
	{
		//ir_887();
		keyscan();//调用按键扫描程序
		if(flag0==1)
		sound();
		display_887();
	}

}    //=========================================================主函数结束==============================================//
void exter() interrupt 2     //外部中断1
{
uchar c;
flag0=1;    //把flag0置为1
c=ds887_read_date(0x0c);  //读DS12C887的C寄存器,用以清除irq管脚的电平
}	 
//====================================外部中断0函数,遥控器解码程序=========================================//
void extern_0() interrupt 0
{
	uchar k;
	if(remote==0)	//判断remote是否为0,如果是就执行下面的语句
	{
		for(k=10;k>0;k--)	  //882us重复10次,测得时间 ms
			{
			delay882();       
			if(remote==1){return;}     //再来判断ir是否为低电平,如果是低电平就执行下面的语句    	  
			}
		while(!remote);             //等待4.5ms的高电平
			delay2400();			//延时2.4ms
			if(remote==0){return;}   //如果等于0就跳出         	
			delay1000();			 //延时1ms
			delay1000();        	 //延时1ms
			if(remote==0){return;}   //再判断ir是不是等于0,是就跳出。如果不是就进入while(ir)处进行等待用户码的到了
		while(remote); //等待0
       ir_jie();   //调用核心解码程序
		if(irtab[0] != ~irtab[1] && irtab[2] != ~irtab[3]){return;}   //核对有没有读到用户误码与数据误码
		if(irtab[1]==0xf7)
		{
		ir=irtab[2];
		ir_irs();
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -