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

📄 7279.txt

📁 mega 16 7279 keybaoard
💻 TXT
字号:
  
/*****************************readme.txt***********************************************************  
HD7279.C是AVR Mega16,8MHz的配置文件  
  
使用前必须先进行宏定义的“管脚配置”、”键值转换配置“  
  
外部调用主要有四个函数  
  
#:init_7279()为7279初始化函数,在使用HD7279前必须先调用此文件  
  
#:void write7279(unsigned char cmd,unsigned char dta);  
    前一个cmd为指令,可直接调用宏义中“HD7279指令集”  
    后一个dat为数据,输入0x80+i,i为显示的数字  
      
#:unsigned char read7279(void):数据读取函数  
    返回是键盘的原始值,没有进行任何转换  
      
#:unsigned char get_key7279(void):读取一个键值  
  
    调用函数后,等待按键,直到有按键按下并松开,  
    返回一个与键值对应的键值,经过数值转换  
      
内部函数,不对用户开发;用户只须调用以上上四个函数就可以完成HD7279的基本操作  
  
*****************************************************************************************************/   
   
   
/********************************管脚配置*****************************/   
#define WR7279 PORTB                                                       
#define RD7279 PINB    
#define DR7279 DDRB    
   
#define cs7279 BIT(4)   //cs7279定义为PC^5    
#define clk7279 BIT(5)  //clk7279定义为PC^4    
#define dat7279 BIT(6)  //dat7279定义为PC^3    
#define key7279 BIT(7)  //key7279定义为PC^2    
   
/******************************键值转换配置********************************/   
#define ONE 0X03    
#define TWO 0X02    
#define THREE 0X01    
#define FOUR 0X00    
#define FIVE 0X0B    
#define SIX 0X0A    
#define SEVEN 0x09    
#define EIGHT 0X08    
#define NINE 0X13    
#define ZERO 0X12    
#define AAAA 0X11         
#define BBBB 0x10         
#define CCCC 0X1B           
#define DDDD 0X1A           
#define EEEE 0X19        
#define FFFF 0X18         
   
/********************************HD7279指令集***************************/   
#define CMD_RESET 0xa4      //复位(清除)指令    
#define CMD_TEST 0xbf       //测试指令    
#define DECODE0 0x80        //方式0译码    
#define DECODE1 0xc8        //方式1译码    
#define CMD_READ 0x15       //读取键盘数据指令    
#define UNDECODE 0x90       //不带小数点显示    
#define RTL_CYCLE 0xa3      //循环左移指令    
#define RTR_CYCLE 0xa2      //循环右移指令    
#define RTL_UNCYL 0xa1      //左移指令    
#define RTR_UNCYL 0xa0      //右移指令    
#define ACTCTL 0x98     //消隐控制    
#define SEGON 0xe0      //段点亮指令     
#define SEGOFF 0xc0     //段关闭指令    
#define BLINKCTL 0x88       //闪烁控制    
   
   
/******************************************外部调用函数申明*********************************************/   
   
/*****************************************************  
函数名:HD7279初始化函数   
功  能:初始化HD7279(管脚配置、HD7279复位)  
输  入:无  
返  回:无  
备  注:使用HD7279之前调用此函数,并配置管脚的宏定义  
******************************************************/    
extern void init_7279(void);            
   
/****************** **********************  
函数名:HD7279写入函数    
功  能:对HD7279写数据  
输  入:cmd为指令数据;  dta为数据数据  
返  回:无  
备  注:HD7279的控制函数  
******************************************/   
extern void write7279(unsigned char cmd,unsigned char dta); //写入到HD7279    
   
/****************** **********************  
函数名:HD7279读取函数    
功  能:对HD7279读取原始键值  
输  入:无  
返  回:键盘原始键值  
备  注:HD7279的控制函数  
******************************************/   
extern unsigned char read7279(void);   
   
/****************** **********************  
函数名:HD7279按键等待接收函数    
功  能:当完成一次按键,返回键值  
输  入:无  
返  回:键盘键值  
备  注:HD7279的控制函数  
******************************************/   
extern unsigned char get_key7279(void);   
   
/****************** **********************  
函数名:HD7279测试函数    
功  能:对HD7279功能测试  
输  入:无  
返  回:无  
备  注:  
******************************************/   
extern void test_7279(void);   
   
   
   
/*******************************************内部函数申明***********************************************/   
//长时延函数    
extern void long_delay(void);      
//短时延函数                     
extern void short_delay(void);                     
//10ms时延函数    
extern void delay10ms(unsigned int);               
//发送一个字节    
   
/****************** **********************  
函数名:HD7279字节发送函数      
功  能:HD7279发送一个字节  
输  入:无  
返  回:无  
备  注:HD7279硬件函数  
******************************************/   
extern void send_byte(unsigned char);      
   
/****************** **********************  
函数名:HD7279字节接收函数      
功  能:从HD7279接收一个字节  
输  入:无  
返  回:一个字节  
备  注:HD7279硬件函数  
******************************************/   
extern unsigned char receive_byte(void);               
   
/****************** **********************  
函数名:HD7279按键等待接收函数    
功  能:当完成一次按键,返回键值  
输  入:无  
返  回:键盘键值  
备  注:HD7279的控制函数  
******************************************/   
extern unsigned char  num_change7279 (unsigned char X);   
   
   
   
/******************************************外部调用函数*********************************************/   
   
/*****************************************************  
函数名:HD7279初始化函数   
功  能:初始化HD7279(管脚配置、HD7279复位)  
输  入:无  
返  回:无  
备  注:使用先,选配置管脚的宏定义  
******************************************************/        
extern void init_7279(void)    
{   
    unsigned int tmr;   
       
    DR7279 |= cs7279;       //cs7279定义为输出    
    DR7279 |= clk7279;      //clk7279定义为输出    
    DR7279 |= dat7279;      //dat7279定义为输出    
    DR7279 &= ~(key7279);       //key7279定义为输入    
       
    WR7279 |= cs7279;       //cs7279初始化为1    
    WR7279 |= clk7279;      //clk7279初始化为1    
    WR7279 |= dat7279;      //dat7279初始化为1    
    WR7279 |= key7279;      //key7279初始化为有弱上拉     
       
    for(tmr=0;tmr<0xf000;tmr++); //上电延时    
           
    send_byte(CMD_RESET);       //复位HD7279    
                       
}       
   
/****************** **********************  
函数名:HD7279写入函数    
功  能:对HD7279写数据  
输  入:cmd为指令数据;  dta为数据数据  
返  回:无  
备  注:HD7279的控制函数  
******************************************/   
extern void write7279(unsigned char cmd,unsigned char dta)  //写入到HD7279    
{      
    send_byte(cmd);     //写指令    
    send_byte(dta);     //定数据    
}   
   
/****************** **********************  
函数名:HD7279读取函数    
功  能:对HD7279读取原始键值  
输  入:无  
返  回:键盘原始键值  
备  注:HD7279的控制函数  
******************************************/   
extern unsigned char read7279(void)   
{   
    send_byte(0x15);    //发送读取指令    
    return(receive_byte()); //返回键值    
       
}   
   
/****************** **********************  
函数名:HD7279按键等待接收函数    
功  能:当完成一次按键,返回键值  
输  入:无  
返  回:键盘键值  
备  注:HD7279的控制函数  
******************************************/   
extern unsigned char get_key7279(void)   
{   
    unsigned char KeyNum;   
    while( (RD7279&key7279) );      //等待有键按下    
       
    delay10ms(1);               //时延100ms    
       
    KeyNum=read7279();          //读出键码      
       
    KeyNum=num_change7279(KeyNum);      //键码转为十进制    
       
    delay10ms(1);               //时延100ms    
       
    while( !(RD7279&key7279) );         //等待按键松开    
       
    return KeyNum;              //返回键值    
}   
   
/*****************************************内部函数*****************************************/   
   
//长时延函数    
extern void long_delay(void)   
{   
    unsigned char i;   
    for(i=0;i<80;i++);   
}      
   
//短时延函数                     
extern void short_delay(void)   
{   
    unsigned char i;   
    for(i=0;i<46;i++);   
}   
                   
//10ms时延函数    
void delay10ms(unsigned int count)   
{   
    unsigned char i,j,k;   
    for (i=0;i<COUNT;I++) k="k" { for(j="0;j<100;j++)" 消隐指令测试 delay10ms(150); } delay10ms(50); 译码方式1,显示在第8位 write7279(DECODE1+7,j); 不循环左移指令 send_byte(RTR_UNCYL); 译码方式1及右移指令测试 send_byte(CMD_RESET); 译码方式0,显示在第1位 write7279(DECODE0,j); send_byte(RTL_UNCYL); 译码方式0及左移指令测试 delay10ms(12); 循环左移23次 send_byte(RTL_CYCLE); 循环右移23次 send_byte(RTR_CYCLE); 循环左右移测试,‘三’字向右移3次,再向左移3次。 delay10ms(80); 在第8位按不译码方式显示一个字符‘三’。 write7279(UNDECODE+7,0x49); 下载数据但不译码指令测试 清除显示 清除闪烁设置 write7279(BLINKCTL,0xff); 如果按键为?0?和超时则进入下一步演示 while(wait_cnter<1000); delay10ms(10); wait_cnter="0;" 等待按键放开 while(!(RD7279&key7279)); 在第1位显示键码低8位 write7279(DECODE1,key7279_number&0x0f); 位显示键码高8位 在第2 16); write7279(DECODE1+1,key7279_number key7279_number="0xff;" write7279(DECODE0+7,0x88); 如果有键按下 if(!(RD7279&key7279)) do 在第1?2位显示下划线?_? write7279(UNDECODE+1,0x08); write7279(UNDECODE,0x08); 第1?2两位设为闪烁显示 write7279(BLINKCTL,0xfc); 闪烁指令及键盘接口测试,将用户按键的键码显示出来,如果10秒内无按键或按S0键即进入下一步演示 delay10ms(200); write7279(DECODE0+7,0x87); write7279(DECODE0+6,0x86); write7279(DECODE0+5,0x85); write7279(DECODE0+4,0x84); write7279(DECODE0+3,0x83); write7279(DECODE0+2,0x82); write7279(DECODE0+1,0x81); write7279(DECODE0,0x80); delay10ms(100); 延时约3秒 send_byte(CMD_TEST); 测试指令演示 复位HD7279 上电延时 for(tmr="0;tmr<0xf000;tmr++);" while(1) init_7279(); key7279_number; char unsigned tmr,j,k; long wait_cnter; test_7279(void) void extern 作用:测试函数 HD7279测试函数************************* ****************** 0xFF; return : default 0x0F; FFFF case 0x0E; EEEE 0x0D; DDDD 0x0C; CCCC 0x0B; BBBB 0x0A; AAAA 0X00; ZERO 0X09; NINE 0X08; EIGHT 0X07; SEVEN 0X06; SIX 0X05; FIVE 0X04; FOUR 0X03; THREE 0X02; TWO 0X01; ONE (X) switch X) (unsigned num_change7279 ****************************************** 注:HD7279的控制函数 备 回:键盘键值 返 入:无 输 能:当完成一次按键,返回键值 功 函数名:HD7279按键等待接收函数 ********************** return(in_byte); dat7279还原为输出口 DR7279|="dat7279;" short_delay(); clk7279="0;" WR7279&="~clk7279;" in_byte="in_byte<<1;" if(RD7279&dat7279) WR7279|="dat7279;" for(i="0;i<8;i++)" long_delay(); 改dat7279为输入 DR7279&="~dat7279;" i,in_byte; receive_byte(void) 注:HD7279硬件函数 回:一个字节 能:从HD7279接收一个字节 函数名:HD7279字节接收函数 dat7279="1;" out_byte="out_byte<<1;" else if(out_byte&0x80) cs7279="0" i; out_byte) send_byte(unsigned 回:无 入:一个字节 能:HD7279发送一个字节 函数名:HD7279字节发送函数 for(k="0;k<100;k++);">>1;   
            write7279(ACTCTL,k);            //每隔一秒钟增加一个消隐位    
            delay10ms(100);   
        }   
        write7279(ACTCTL,0xff);             //恢复8位显示    
        delay10ms(100);   
        send_byte(CMD_RESET);               //清除显示    
       
        //段点亮指令和段关闭指令    
        for(j=0;j<64;j++)   
        {   
            write7279(SEGON,j);         //将64个显示段逐个点亮    
            write7279(SEGOFF,j-1);          //同时将前一个显示段关闭    
            delay10ms(20);   
        }   
    }   
}   
   
*/   
   
   
/********************************** HD7279输入输出函数 *******************************************/   
   
void dis_data ( unsigned char dig_start,unsigned char dig_end,signed long num)   
{   
    unsigned char i,temp_char;   
       
    for( i = dig_start; i <= dig_end; i++ )   
    {   
        temp_char = num % 10;   
        num -= temp_char;   
        num /= 10;   
           
        write7279 ( DECODE0 + i , 0x80 +  temp_char);   
    }   
}   
   
signed long get_data ( signed char dig_start,signed char dig_end )   
{   
    signed long temp_long = 0;   
    signed char i,temp_char;       
       
    for( i = dig_start; i <= dig_end; i++ )   
        write7279(UNDECODE + i,0x08);   
           
    for( i = dig_end; i >= dig_start ; i-- )   
    {   
        temp_char = get_key7279();   
           
        temp_long *= 16;   
        temp_long += temp_char;   
           
        write7279 ( DECODE1 + i , 0x80 +  temp_char);   
    }   
           
    return temp_long;   
       
       
}  

⌨️ 快捷键说明

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