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

📄 3x3key._c

📁 protues_atmeg8学习之:按键篇源代码
💻 _C
字号:
/******************************************/
//文件名:3X3Key.c
//功能: 键盘扫描的应用
//作者:  young
//时间: 2006.11.6
//目标MCU:ATmega8   
//晶振:  8MHZ
/******************************************/
#include <iom8v.h>
#include "Delay.h"

//按键扫描函数,返回按键的值
unsigned char ScanKey(void)
{
    unsigned char temp,temp1,key;
    temp=PINC;
    temp&=0x07;
    switch(temp) //判断行中哪条线有低电平
    {
	case 0x06:  
        DDRC=0X07;
        PORTC=0X38;
	    delay_us(1);
        temp1=PINC;
		temp1&=0x38;
        switch(temp1) //判断列中哪条线有低电平
		{
		    case 0x30: key=0x01;  //得到键值
		        break;
		    case 0x28: key=0x02; 
		        break;
			case 0x18: key=0x03; 
		        break;							
			default:   key=0;
		        break;
		}
		DDRC=0X38;
		PORTC=0X07;
        break;
			   
    case 0x05:
	    DDRC=0X07;
        PORTC=0X38;
	    delay_us(1);
        temp1=PINC;
		temp1&=0x38;
		switch(temp1)
		{
	    case 0x30: key=0x04; 
		    break;
		case 0x28: key=0x05; 
		    break;
		case 0x18: key=0x06; 
		    break;
		default:   key=0;
		    break;
		}
		DDRC=0X38;
		PORTC=0X07;
        break;
		
    case 0x03:  
	    DDRC=0X07;
        PORTC=0X38;
		delay_us(1);
        temp1=PINC;
		temp1&=0x38;
        switch(temp1)
		{
		case 0x30: key=0x07; 
            break;
	    case 0x28: key=0x08; 
		    break;
		case 0x18: key=0x09; 
		    break;
		default:   key=0;
		    break;
	    }
		DDRC=0X38;
		PORTC=0X07;
        break;
    default:
        key=0;
        break;   
    }
    return (key);
}

//主函数,扫描按键显示数据
void main()
{
    unsigned char temp, keynum;
	unsigned char num[10]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 
	                       0x6D, 0x7D, 0x07, 0x7F, 0x6F};
	//初始化端口
	DDRB=0xFF;	  //设置B口为输出模式
	PORTB=0xFF;	  //置高电平	
    DDRC=0X38;
    PORTC=0X07; 
 
    while(1)
    { 
	   PORTB=0x40;
       temp=PINC;
       temp&=0x7;
       if(temp==0x7)//检测是否有按键按下       
	       continue;
	   delay_ms(10);
	   temp=PINC;
       temp&=0x7;
       if(temp==0x7)//检测是否有按键按下       
	       continue;
       keynum=ScanKey();
       PORTB=num[keynum];
	   while(temp!=0x7) 
	   {
	       temp=PINC;
           temp&=0x7;
	   }
    }
}

⌨️ 快捷键说明

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