音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費(fèi)注冊(cè) 首頁(yè) | 行業(yè)黑名單 | 幫助
維庫(kù)電子市場(chǎng)網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

鍵值測(cè)定程序

作者:fouceswang 欄目:單片機(jī)
鍵值測(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;


//---------------發(fā)送數(shù)-----------

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)  //從低位開(kāi)始
          _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;

                 }
//--------------接收數(shù)-------------------

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;
}


//--------------------接收按鍵數(shù)-------------------
//--此函數(shù)通過(guò)KEY_VALUE變量與BZ_key變量與外界聯(lián)系。
//---KEY_VALUE為鍵值,BZ_key有按鍵按下的標(biāo)志變量(用來(lái)判斷是面板按鍵還是遙控器按鍵),
void _16311_read_key(void)
   {
   uchar i,r,f,TEMP_KEY_VALUE[6];
   static uchar _key_temp;
//---------------------------------------------------------------------------

       _16311_DA_send(0x42,3);             //使能按鍵掃描(連掃).后面的3代表最
                                           //后不發(fā)送高電平ST信號(hào),直接讀取鍵值.
       _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;}
       }
     }
//--------------------發(fā)送顯示數(shù)據(jù)--------------------

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

  _16311_DA_send(0x40,2);//設(shè)置為自動(dòng)地址.

  Add=(0xC0 | ADDRESS);   //0XC0代表是地址指令,指令與地址加在一起后做為整條指令發(fā)送。
  _16311_DA_send(Add,3);   //發(fā)送地址命令模式。
  _16311_DA_send(_DA,3);  //發(fā)送數(shù)據(jù)
  _16311_DA_send(_DA>>8,5);
  _16311_DA_send(0x0C,1); //初始化命令1:15段13位。
  _16311_DA_send(0x8F,4);//開(kāi)顯示
  for(y=0;y<120;y++)
  ;
}

* - 本貼最后修改時(shí)間:2006-7-18 2:07:05 修改者:fouceswang

2樓: >>參與討論
fouceswang
global.h
#ifndef _global_h
#define _global_h
#include "define.h"


//---------------遙控-----------------

extern bit BZ_rem; //遙控標(biāo)志變量,用來(lái)識(shí)別是不是有遙控按鍵按下,有則為“1“無(wú)則為”0“
extern uchar REM_value;//用來(lái)接收遙控的鍵值。
extern uchar REM_add;


extern uchar ttt;

//---------------按鍵-----------------

extern bit BZ_key; //面板按鍵標(biāo)志變量,用來(lái)識(shí)別是不是有面板按鍵按下,有則為“1“無(wú)則“0”
extern uchar KEY_value;

#endif


3樓: >>參與討論
fouceswang
define.h
#ifndef  _DEFINE_H
#define  _DEFINE_H

#include <regX52.H>
//declare
typedef bit    Bit;
typedef bit    BOOL;
typedef unsigned CHAR Byte;
typedef unsigned CHAR uCHAR;
typedef unsigned int  Word;
typedef unsigned int  uint;
typedef unsigned LONG LONG;
typedef unsigned LONG uLONG;


#define DATA data
#define IDATA idata

#define PDATA pdata
#define XDATA xdata
#define RDATA code


#define HIBYTE_REF(addr)  (*((BYTE *) & addr))
#define LOBYTE_REF(addr)  (*((BYTE *) & addr+1))
#define MAKEWORD(v1,v2)   (((Word)(v1))<<8))+(Word)(v2))
#define HIBYTE(v1)        ((Byte)((v1)>>8))
#define LOBYTE(v1)        ((Byte)(v1)&0xff))



#define TIME_BASE  40
#define TIME_1MIN   (60000/TIME_BASE)
#define TIME_25SEC  (25000/TIME_BASE)
#define TIME_20SEC  (20000/TIME_BASE)
#define TIME_15SEC  (15000/TIME_BASE)
#define TIME_10SEC  (10000/TIME_BASE)
#define TIME_8SEC   (8000/TIME_BASE)
#define TIME_6SEC   (6000/TIME_BASE)
#define TIME_5SEC   (5000/TIME_BASE)
#define TIME_4SEC   (4000/TIME_BASE)
#define TIME_3SEC   (3000/TIME_BASE)
#define TIME_2SEC   (2000/TIME_BASE)
#define TIME_1SEC   (1000/TIME_BASE)
#define TIME_400MS  (400/TIME_BASE)
#define TIME_80MS   (80/TIME_BASE)
#define TIME_50MS   (50/TIME_BASE)



#define CLOCK_BASE   1
#define CLOCK_40MS   (65636 - 40000*CLOCK_BASE)
#define CLOCK_4906us   (65636 - 4906*CLOCK_BASE)
#define CLOCK_5000us   (65636 - 5000*CLOCK_BASE)
#define CLOCK_10000us   (65636 - 10000*CLOCK_BASE)





//---------------CPU IO---------------------------

//  16311
#define _16311_DA P1_5
#define _16311_CK P1_4
#define _16311_ST P1_3

//  I2C
//#define PIN_SCL P0_1
//#define PIN_SDA P0_0


#define PIN_SCL P1_6
#define PIN_SDA P1_7



//  REM
#define PIN_IR P3_2

#endif

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
C51編程:變量問(wèn)題!?
我自己焊接的用單片機(jī)向PC發(fā)送數(shù)據(jù)的232接口電路到底有沒(méi)有毛病
請(qǐng)教串口接收問(wèn)題
串口為啥只收到兩個(gè)0,我想收到0-7
求助 哪位有atmega128的protel封裝啊
免費(fèi)注冊(cè)為維庫(kù)電子開(kāi)發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào)