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

📄 key5._c

📁 本设计以ATMEL公司生产的AT90S8515作为控制核心
💻 _C
字号:
// key_5.c
//

#include <io8515v.h>
#include <macros.h>
#include "1602LCD.h"
#include "key5.h"	
#include "init.h"
#include "main.h"


/////////////////////////////////////////////
// key_san()
// 四键扫描函数	
//
unsigned char key_scan(void)
{
    unsigned char temp=0;
	PORTD|=0X3B;    //高四位置高
	DDRD&=0XC4;     //高四位输入
    temp=PIND&0X3B;
	if(temp!=0x3B)
	{
	    delay_nms(15);
		temp=PIND&0X3B;
		if(temp!=0x3B)
		    switch(temp)
			{
			case 0x3A:temp=1;break;
			case 0x39:temp=2;break;
			case 0x33:temp=3;break;
			case 0x2B:temp=4;break;
			case 0x1B:temp=5;break;
			}
	}
    return (temp);
}

/////////////////////////////////////////////
// key_san()
// 四键扫描函数(按键释放检查)
//
unsigned char keypad(void)
{
    unsigned char temp1,temp2;
	temp1=key_scan();
	if (temp1==0x3B)
	    return 0x3B;
	do
	    temp2=key_scan();
	while(temp1==temp2);
	return temp1;
}

///////////////////////////////////////////////////
// key_service
// 按键服务函数:     
// x ——数据显示列
// y ——数据显示行
// data_lentgh —— 数据长度
// *value ——	    数据指针
//       MODE:   1          2
// KEY: 1                  确定   
//       2      step+        +
//       3      step-        -
//       4                  移动光标
//       5         模式选择
//
void key_service(unsigned char x,unsigned char y,unsigned char data_length,unsigned int *value)
{
	 unsigned char temp;
	 
	 temp=keypad();
	 value_temp=*value;
	 if(mode==1)
	 {
	 	 switch (temp)
	 	 {
		 case KEY_FN:
		 	  mode=2;
			  LCD_write_string(0,1,"  ^    seting...");
			  j=0;
			  LCD_display(2,0,4,*value);
			  data_init(*value);   // 送缓冲
		 	  break;
		 case KEY_INC:
			  (*value)++;
			  if(*value>2000) (*value)=2000;
			  ADC_GD=(*value)*K1;
			  LCD_display(2,0,4,*value);
		 	  break;
		 case KEY_DEC:
			  (*value)--;
			  if(*value>2000) (*value)=0;
			  ADC_GD=(*value)*K1;
			  LCD_display(2,0,4,*value);
		 	  break;
		 }
	 }
	 else
	 {
	 	 switch (temp)
	 	 {
		 case KEY_INC:
			  value_table[j+1]++;
			  if(value_table[j+1]>9) value_table[j+1]=0;
			  LCD_write(2+j,0,'0'+value_table[j+1]);
		 	  break;
		 case KEY_DEC:
			  value_table[j+1]--;
			  if(value_table[j+1]>9) value_table[j+1]=9;
			  LCD_write(2+j,0,'0'+value_table[j+1]);
		 	  break;
		 case KEY_CU:
			  LCD_write(2+j,1,' ');
			  j++;
			  j&=0x3;
			  LCD_write(2+j,1,'^');
		 	  break;
		 case KEY_OK:
			  *value=value_table[1]*1000+ value_table[2]*100+value_table[3]*10+value_table[4];
			  if(*value>2000) *value=2000;
			  ADC_GD=(*value)*K1;
		 case KEY_FN:
		 	  mode=1;
		      LCD_write_string(0,1,"    ^  +/-ing...");
			  LCD_display(2,0,4,*value);
		 	  break;
		 }
	 } 
}

⌨️ 快捷键说明

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