|
|||||||||||
| 技術(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ī) |
#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 于 2006/7/18 1:33:00 發(fā)布:
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 于 2006/7/18 1:33:00 發(fā)布:
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 |
|
|
|
| 免費(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) |