PWM控制输出代码
- 格式:doc
- 大小:83.00 KB
- 文档页数:13
#include "AT89X51.h" #include "intrins.h" #define uchar unsigned char #define uint unsigned int
#define _BV(x)
(1<<(x))
if(keyValueTemp == 0) {
keyValueOld = 0; stillTimes = 0; stillTimesMax = FIRST_TIMES; return 0; } else if(keyValueOld != keyValueTemp) { stillTimes = 0; keyValueOld = keyValueTemp;
#define KEY_GLOBAL 1 #include "Key.h" static uchar keyValueBuff; static uchar keyValueOld; static uchar keyValueTemp; static uint stillTimes; static uint stillTimesMax;
Байду номын сангаас
/*读取键值的缓冲区*/ /*前一次的键值*/
/*键值中间交换变量*/ /*键按下保持次数*/
static uchar get_data_1_count(uchar number); static void read_all_key(uchar *buff); /******************************************* *函数名称:key_init(void)
READ_KEY(1,KEY_UP,*buff); else
READ_KEY(0,KEY_UP,*buff);
if(IN_PRESS_DOWN==KEY_FORCE_VALUE) READ_KEY(1,KEY_DOWN,*buff);
else READ_KEY(0,KEY_DOWN,*buff);
} /****************************************************** *函数名称:get_key_value(void) *函数功能:读取键值 *函数入口:无 *函数出口:返回按下的有效键值 *******************************************************/ uchar get_key_value(void) {
*函数功能:初始化按键扫描 *函数入口:无 *函数出口:无 *******************************************/ void key_init(void) {
keyValueBuff = 0x00; keyValueOld = 0x00; keyValueTemp = 0x00; stillTimes = 0; stillTimesMax = FIRST_TIMES; } /****************************************************** *函数名称:read_all_key(uchar *buff) *函数功能:扫描按键下的键,将按下的键的位置存入变量buff *函数入口:buff *函数出口:无 *******************************************************/ void read_all_key(uchar *buff) { if(IN_PRESS_UP==KEY_FORCE_VALUE) //检测按下的键
#endif
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
#if CAN_MORE_PRESS == 0 if( 1 != get_data_1_count(keyValueTemp) ) { stillTimes = 0; return 0; }
#define GET_BIT(x,y) (((x)&(1<<(y)))==0?0:1)
/*取x变量y位的数据*/
#define SET_BIT(x,y) ((x)|=(0x0001<<(y)))
/*置位x变量y位*/
#define CLR_BIT(x,y) ((x)&=~(0x0001<<(y)))
#if CAN_MORE_PRESS return keyValueTemp;
#else if( 1 == get_data_1_count(keyValueTemp) ) { return keyValueTemp; } else { return 0; }
#endif } else if(keyValueOld == keyValueTemp) {
keyValueBuff = 0x00; read_all_key(&keyValueBuff); keyValueTemp = keyValueBuff; delay_us(KEY_DELAY_TIME); read_all_key(&keyValueBuff);
/* 两次读到的键盘值相同则为有效键盘值*/ if( keyValueTemp == keyValueBuff ) {
/*清零x变量y位*/
#define LET_BIT(x,y,z) ((x)=(x)&(~(0x0001<<(y)))|(z)<<(y)) /*置位或清零x变量y位*/
#define F_CPU #define sei() #define cli()
12000000UL (EA=1) (EA=0)
/*cpu震荡周期*/ /*开总中断*/ /*关总中断*/