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

📄 16311.c

📁 单片机键值测定程序
💻 C
字号:

#include "define.h"
#include "global.h"
#include <regX52.H>
#include <intrins.h>

void _16311_DISPLAY(uchar ADDRESS,uint _DATA);
void _16311_DA_send(uchar _16311_value,_COMMEND);
extern void Initial_16311(void);

bit BZ_key;
uchar KEY_value;


//---------------发送数剧-----------

void _16311_DA_send(uchar _16311_value,_COMMEND)
{
  uchar i;

	  _16311_ST=0;
   for(i=0;i<8;i++)
    {	
	   _16311_CK=0;
	    if(_16311_value & 0x01)  //从低位开始
		  _16311_DA=1;
		   else _16311_DA=0;
		     _16311_value>>=1;
			 _nop_();
             _nop_();
             _nop_();
			 _16311_CK=1;
			   _nop_();
			   _nop_();
			   _nop_();
                 }
                   if((_COMMEND==1) || (_COMMEND==2) || (_COMMEND==4) || (COMMEND==5))
				   _16311_ST=1;
                     else if(_COMMEND==3)
                        _16311_ST=0;

				 }
//--------------接收数剧-------------------

uchar _16311_DA_read(void)
{
  uchar i;
  uchar _value=0;
	  	 _nop_();
	     _nop_();
		 _nop_();
   for(i=1;i<=8;i++)
    {
	  _16311_CK=0;
	     _nop_();
	     _nop_();
		 _nop_();
	  _16311_CK=1;
	  	 _nop_();
	     _nop_();
		 _nop_();
		 _value>>=1;
	  	 _nop_();
	     _nop_();
		 _nop_();
	    if(_16311_DA==1)
		 _value=_value | 0x80;
	}
return _value;
 }


//--------------------接收按键数剧-------------------
//--此函数通过KEY_value变量与BZ_key变量与外界联系。
//---KEY_value为键值,BZ_key有按键按下的标志变量(用来判断是面板按键还是遥控器按键),
void _16311_read_key(void)
   {
   uchar i,r,f,TEMP_KEY_VALUE[6];
   static uchar _key_temp;
//---------------------------------------------------------------------------

	   _16311_DA_send(0x42,3);             //使能按键扫描(连扫).后面的3代表最
	                                       //后不发送高电平ST信号,直接读取键值.
       _16311_DA=1;
       for(i=0;i<6;i++)
	   {
       TEMP_KEY_VALUE[i]=_16311_DA_read(); 
	   
         if(TEMP_KEY_VALUE[i]>0x00) //continue;
		 {
		   f=i;
		   r=(f<<4)|f;
           KEY_value=TEMP_KEY_VALUE[i]+r;
		   if(_key_temp==KEY_value) { BZ_key=0; _16311_ST=1; return; }//果上一次的键值与此次一样就返回。
		   else { _key_temp=KEY_value;  BZ_key=1;  _16311_ST=1;  return; }
          }
		  else if(i<=5){continue;}
		  else {_16311_ST=1; BZ_key=0;return;}
       }
	 }
//--------------------发送显示数据--------------------

void _16311_DISPLAY(uchar ADDRESS,uint _DA)
{
  uchar Add,y;

  _16311_DA_send(0x40,2);//设置为自动地址.

  Add=(0xC0 | ADDRESS);   //0XC0代表是地址指令,指令与地址加在一起后做为整条指令发送。
  _16311_DA_send(Add,3);   //发送地址命令模式。
  _16311_DA_send(_DA,3);  //发送数据
  _16311_DA_send(_DA>>8,5);
  _16311_DA_send(0x0C,1); //初始化命令1:15段13位。
  _16311_DA_send(0x8F,4);//开显示
  for(y=0;y<120;y++)
  ;
}

⌨️ 快捷键说明

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