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

📄 训练项目七:键盘的使用._c

📁 长沙理工自己的实验程序
💻 _C
字号:
/****************************************************************************
** File Name:          键盘的使用
** Createed By:        Wangchangsong
** Create Date:        07/28/2008
** Version:            1.0
** Descriptions:       led display
**
**---------------------------------------------------------------------------
** Modified By:
** Modified Date:
** Version:
** Descriptions:
**
****************************************************************************/

#include <iom128v.h>

#define data (PIND&0x04)==0x04
                                                /* 判断PD2是否为1            */
#define set_cs asm("sbi 0x18,2")             
                                                /* PB输出为1                 */
#define set_clk asm("sbi 0x18,3")
                                                /* PB3输出为1                */  
#define set_data asm("sbi 0x12,2")
                                                /* PD2输出为1                */
#define cl_cs  asm("cbi 0x18,2")
                                                /* PB2输出为0                */ 
#define cl_clk asm("cbi 0x18,3")
                                                /* PB3输出为0                */                     
#define cl_data asm("cbi 0x12,2")
                                                /* PD2输出为0                */
#pragma interrupt_handler key_check:5
                                                /* 外部中断3                 */
unsigned char k = 0x00;n = 0;

/****************************************************************************
** Function Name:      main       
** Descriptions:       
** Input Parameters:   uiTime
** Output parameters:  void
** Returned Value:     void
**---------------------------------------------------------------------------
****************************************************************************/

void main()
{
    unsigned char i = 0;
	
    init_7279();
    s_delay();
    send (0xA4); 
	                                    /* 复位                     */
    while(1)
    {
        switch(k)
        {
        case 65:set_cs;send(0xc8);send(0x00);break;      /*下载数据且按方式1译码     */
        case 66:set_cs;send(0xc8);send(0x01);break;
        case 67:set_cs;send(0xc8);send(0x02);break;
        case 68:set_cs;send(0xc8);send(0x03);break;
        case 73:set_cs;send(0xc8);send(0x04);break;
        case 74:set_cs;send(0xc8);send(0x05);break;
        case 75:set_cs;send(0xc8);send(0x06);break;
        case 76:set_cs;send(0xc8);send(0x07);break;
        case 81:set_cs;send(0xc8);send(0x08);break;
        case 82:set_cs;send(0xc8);send(0x09);break;
        case 83:set_cs;send(0xc8);send(0x0A);break;
        case 84:set_cs;send(0xc8);send(0x0B);break;
        case 89:set_cs;send(0xc8);send(0x0C);break;
        case 90:set_cs;send(0xc8);send(0x0D);break;
        case 91:set_cs;send(0xc8);send(0x0E);break;
        case 92:set_cs;send(0xc8);send(0x0F);break;
        default:break;         
        
        }
    }
}
/****************************************************************************
** Function Name:      key_check       
** Descriptions:       read the key
** Input Parameters:   K
** Output parameters:  void
** Returned Value:     void
**---------------------------------------------------------------------------
****************************************************************************/

void key_check()
{ 
    n=1;
    send(0x15);                                /* 读键盘指令                   */
    k=receive()+61;
    set_cs;
}
/****************************************************************************
** Function Name:      led_init       
** Descriptions:       
** Input Parameters:   uiTime
** Output parameters:  void
** Returned Value:     void
**---------------------------------------------------------------------------
****************************************************************************/
void led_init (void)
{
    DDRB|= 0x0C;                              /* PB0和PB1为输入              */
	set_cs;
	send (0xA4);
}

/****************************************************************************
** Function Name:      init_7279       
** Descriptions:       initialization
** Input Parameters:   uiTime
** Output parameters:  void
** Returned Value:     void
**---------------------------------------------------------------------------
****************************************************************************/
void init_7279()
{
    SREG|=0x80;                                   /* 状态寄存器,全局中断允许    */
    EIMSK|=0x08;                                  /* 外部中断屏蔽寄存器          */
    EICRA&=0x3f;                                  /* 外部中断控制寄存器A,INTn的上
                                                升沿产生一个异步终端请求     */
    DDRD&=0xf7;                                   /* PD3为输入                   */
    DDRB|=0x0c;
    PORTD&=0xfb;                                  /* PD2输出为1                  */
}
/****************************************************************************
** Function Name:      send       
** Descriptions:       date read and write
** Input Parameters:   
** Output parameters:  void
** Returned Value:     void
**---------------------------------------------------------------------------
****************************************************************************/
void send (unsigned char out_data)
{
    unsigned char i;
	
    DDRD|=0x04;                                    /* PD2为输出                  */
    cl_cs;                                         /* PB2输出为0                 */
    l_delay();
	
    for(i=0;i<8;i++)
    {
        if(out_data&0x80)
        {
            set_data;                                   /* PD2输出为1                 */
        }
        else
        {
           cl_data;                                    /* PD2输出为0                 */
        }
    s_delay();
    set_clk;
    s_delay();
    cl_clk;
    s_delay();
    out_data*=2;                                /* 数据向左移一位              */
    }
    cl_data;
}
unsigned char receive(void)
{
    unsigned char i;
    unsigned char in_data=0x00;
	
    DDRD&=0xfb;
	                                  /* PD2为输入                   */
    for(i=0;i<8;i++)
    {
    set_clk;
    s_delay();
    in_data*=2;                                /* 数据左移一位                 */
        if(data)
        {
        in_data|=0x01;
        }
    cl_clk;
    s_delay();
    }
    cl_data;
    return(in_data);
}
/****************************************************************************
** Function Name:      delay_1ms       
** Descriptions:       delay time
** Input Parameters:   i
** Output parameters:  void
** Returned Value:     void
**---------------------------------------------------------------------------
****************************************************************************/
void delay_1ms(void)                            /* 延时                      */               
{ 
    unsigned int i;
	
    for (i=0;i<2260;i++);
}
/****************************************************************************
** Function Name:      delay_nms       
** Descriptions:       delay time
** Input Parameters:   n
** Output parameters:  void
** Returned Value:     void
**---------------------------------------------------------------------------
****************************************************************************/    
void delay_nms(unsigned int n)                   /* 延时                     */
{  
    unsigned int i=0;
	
    for (i=0;i<n;i++)
    delay_1ms();
 }
 /****************************************************************************
** Function Name:      l_delay       
** Descriptions:       delay time
** Input Parameters:   i
** Output parameters:  void
** Returned Value:     void
**---------------------------------------------------------------------------
****************************************************************************/
void l_delay()                                   /* 延时                     */
{
    unsigned char i=33;
	
    while(i!=0)
    {
	i--;
	}
}
/****************************************************************************
** Function Name:      s_delay       
** Descriptions:       delay time
** Input Parameters:   i
** Output parameters:  void
** Returned Value:     void
**---------------------------------------------------------------------------
****************************************************************************/
void s_delay()                                   /* 延时                     */
{
    unsigned char i=11;
	
    while(i!=0)
    {
    i--;
    }
}

/****************************************************************************
 END FILE
****************************************************************************/

⌨️ 快捷键说明

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