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

📄 irqkeyread.c

📁 用ch451的键盘显示程序,利用4*4键盘输入健值,在led数码管上显示结果
💻 C
字号:
#include<reg51.h>
#include<intrins.h>
#include"ch451.h"

LEDDisplay(char MODE,uint data1)
{
   uint i;
   void WriteCh451(uint da);
   void Delay();
   WriteCh451(CH451_SYSON2);
   WriteCh451(CH451_BCD);
   if(MODE==0)                //突发显示
   {   
      if(1)                   //如果条件成立时显示
      WriteCh451(data1);
    }
    if(MODE==1)               //定周期显示
    {
        for(i=0;i<10000;i++);   //定时周期
        WriteCh451(data1);
    }
}

void WriteCh451(uint da)
{
   uint i;
   EX1=0;               //关闭键盘中断
   CH451_LOAD=0;        //复位LOAD信号
   for(i=0;i<12;i++)
   {
      if((da&0x1)==1)
         CH451_DIN=1;
      else
         CH451_DIN=0;
      CH451_DCLK=0;
      da>>=1;
      CH451_DCLK=1;     //上升沿读取数据
    }
    CH451_LOAD=1;       //加载数据
    Delay();
    EX1=1;              //打开键盘中断
}


void Delay()
{
    _nop_();
    _nop_();
}

uint ReadCh451()
{
    uchar i;
    uchar cmd ,keycode;
    EX1=0;             //禁止键盘中断
    cmd=0x07;          //获取按键值
    CH451_LOAD=0;
    for(i=0;i<4;i++)
    {
      if((cmd&0x1)==1)
         CH451_DIN=1;
      else
         CH451_DIN=0;    
      CH451_DCLK=0;
      cmd>>=1;
      CH451_DCLK=1;  
    }
    CH451_LOAD=1;
    keycode=0;
    for(i=0;i<7;i++)
    {
       keycode<<=1;    //数据移入keycode
       keycode|=CH451_DOUT;//从高到低读入451的数据
       CH451_DCLK=0;       //时钟下降沿通知ch451输出下一位
	   Delay();
       CH451_DCLK=1;
     }
	 
     IE=0;                //清除中断标志   
     EX1=1;
     return(keycode);
} 

void IRQKeyRead() interrupt 2
{
    uchar key;
    uchar key0,key1;
    key=ReadCh451();
	key=key&0x3f;
    key0=key/10;
    key1=key%10;
    if(key0!=0)
        LEDDisplay(0,CH451_DIG1|key0);
    else
        LEDDisplay(0,CH451_DIG1|0x10);
    LEDDisplay(0,CH451_DIG0|key1);
}


void InitSys()
{	
	EA=1;
	//LEDDisplay(0,CH451_DSP);
    WriteCh451(CH451_SYSON2);
    WriteCh451(CH451_BCD);																				                       
    EX1=1;
}

void main()
{
   LEDDisplay(0,0x0800);
   LEDDisplay(0,0x0900);
   LEDDisplay(0,0x0a00);
   LEDDisplay(0,0x0b00);
   LEDDisplay(0,0x0c00);
   LEDDisplay(0,0x0d00);
   LEDDisplay(0,0x0e00);
   LEDDisplay(1,0x0f00);
   for(;;)
   {
   InitSys();
   while(0);
   } 
}

⌨️ 快捷键说明

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