/*
* 按键函数子函数
* 按键函数分别涉及两个按键检测和控制P3^2和P3^3.每次按下两个按钮,分别实现10个按钮K数字
* 电位器中间的滑动端向上和向下滑动1k数值。
* 数字电位器接口说明:INC接P2^0,U_D接P2^1,CS接P2^2。
*/
#include"HEADER.h"
#include"LCD1602.h"
#include"BUTTON.h"
volatile unsigned char FLAG_BUTTON = 0.//按键检测标志位置
volatile unsigned char BUTTON_DAT = 0.//按键值变量
volatile unsigned int TIME_10MS = 0;//时间变量
volatile unsigned char VOLUME = 0;///电位器值
void T0_Timer() interrupt //定时器0中断服务程序
{
TR0 = 0;
// WDT_CONTR = 0X31; //喂狗
TH0 =55536/256; ///重新安装初始值
TL0 =55536%6; ///重新安装初始值
TR0 = 1;
TIME_10MS ; //time_10ms变量累加
if(TIME_10MS == 1000)TIME_10MS = 0;//time_10ms变量清零
ButtonTest()//按键检测;
}
void ButtonTest(void)
{
static uchar Count_ButtonDown;///静态按钮按下计数
static uchar Count_ButtonUp;////静态按松开计数
if((SW_1 == 0)||(SW_2 == 0))
{
Count_ButtonDown ;
Count_ButtonUp = 0;
if(Count_ButtonDown==2)
{
if(SW_1 == 0)BUTTON_DAT = 1;
else if(SW_2 == 0)BUTTON_DAT = 2;
if(BUTTON_DAT != 0)FLAG_BUTTON = 1;
}
if(Count_ButtonDown>=50)
{
Count_ButtonDown = 0;
if(SW_1 == 0)BUTTON_DAT = 1;
else if(SW_2 == 0)BUTTON_DAT = 2;
if(BUTTON_DAT != 0)FLAG_BUTTON = 1;
}
}
else
{
if(Count_ButtonDown>2) //如果按钮已确认按下,则开始判断松开
{
Count_ButtonUp ;
if(Count_ButtonUp>=2)
{
Count_ButtonUp = 0;
Count_ButtonDown = 0;
}
}
}
}
void ButtonService(unsigned char dat)
{
switch(dat)
{
case 1: ///电位器值增加
{
unsigned char n = 0;
CS = 0;
U_D = 1;
_nop_();
for(n=10;n>0;n--)
{
INC = 0;
_nop_();
_nop_();
INC = 1;
}
CS = 1;
VOLUME ;
if(VOLUME > 10)VOLUME = 10;
DISPLAY[0] = VOLUME0/10 0x30;
DISPLAY[1] = VOLUME 0x30;
Lcd_Set_xy(2,7);
Lcd_Wdat(DISPLAY[0]);
Lcd_Wdat(DISPLAY[1]);
}
break;
case 2: ///电位器值降低
{
unsigned char n = 0;
CS = 0;
U_D = 0;
_nop_();
for(n=10;n>0;n--)
{
INC = 0;
_nop_();
_nop_();
INC = 1;
}
CS = 1;
if(VOLUME == 0)VOLUME = 1;
VOLUME--;
DISPLAY[0] = VOLUME0/10 0x30;
DISPLAY[1] = VOLUME 0x30;
Lcd_Set_xy(2,7);
Lcd_Wdat(DISPLAY[0]);
Lcd_Wdat(DISPLAY[1]);
……………………
…………本文篇幅有限 请从51黑下载剩余代码…………