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

📄 ch451_int1.c

📁 在数码管上显示按键值(基于单片机中
💻 C
字号:
/*******************************************************************************
*  标题:  蓝海微芯LJD-SY-5200单片机开发系统演示程序                            *
*  文件:  CH451_INT1.C                                                         *
*  日期:  2006-8-11                                                            *
*  版本:  1.0                                                                  *
*  作者:  蓝海微芯                                                             *
*  网站: http://www.ljd-2008.com                                              *
********************************************************************************
*  描述:                                                                       *
*        在数码管上显示按键值                                                  *     
*                                                                              *
*                                                                              *
********************************************************************************
* 【版权】 Copyright(C)微芯科技 http://www.bluemcu.com    All Rights Reserved  *          
* 【声明】 此程序仅用于学习与参考,引用请注明版权和作者信息!                  *
*******************************************************************************/
#include<reg51.h>
#include<absacc.h>
#include<intrins.h>

#define uchar  unsigned char
#define uint   unsigned int

#define CH451_DIG0      0x0800         /*数码管位0显示*/
#define CH451_DIG1      0x0900         /*数码管位1显示*/
#define CH451_DIG2      0x0a00         /*数码管位2显示*/
#define CH451_DIG3      0x0b00         /*数码管位3显示*/
#define CH451_DIG4      0x0c00         /*数码管位4显示*/
#define CH451_DIG5      0x0d00         /*数码管位5显示*/	
#define CH451_DIG6      0x0e00         /*数码管位6显示*/	
#define CH451_DIG7      0x0f00         /*数码管位7显示*/

sbit     ch451_din  = P3^5;
sbit     ch451_clk  = P3^4;
sbit     ch451_load = P1^2;
sbit     ch451_dout = P3^3;

volatile uchar ch451_key;
volatile uchar M;
volatile uchar N;
volatile bit   flag;
/********************************************************************
函 数 名:ch451_init()
功    能:对ch451芯片进行初始化
说    明:
调    用:
入口参数:
返 回 值:
设    计:蓝海微芯           
***********************************************************************/
void ch451_init(void)
{
  ch451_din  = 0;           /*先低后高,选择4线输入*/
  ch451_din  = 1;

	
  ch451_load = 1;
  ch451_clk  = 1;
  _nop_();
	
}
/********************************************************************
函 数 名:ch451_write()
功    能:把12位的指令或数据写入ch451
说    明:12位数据或指令的写入顺序是低位
调    用:
入口参数:command
返 回 值:
设    计:蓝海微芯           
***********************************************************************/
void ch451_write(unsigned int command)
{
  unsigned char i;
  #ifdef USE_KEY
    EX1=0;                                 /*禁止键盘中断*/
  #endif	
  ch451_load=0;                            /*命令开始*/    
  for(i=0;i<12;i++)
  {                                        /*送入12位数据,低位在前*/
    ch451_din=command&1;				
    ch451_clk=0;
    command>>=1;
    ch451_clk=1;              	 	   /*上升沿有效*/
  }
  ch451_load=1;                		   /*加载数据*/
  #ifdef USE_KEY
    EX1=1;
  #endif
}
/********************************************************************
函 数 名:ch451_bcd()
功    能:对按键值进行分离
说    明:把一字节按键值值分拆分成两字节
调    用:
入口参数:ds_bcd
返 回 值:
设    计:蓝海微芯           
***********************************************************************/
void ch451_bcd(uchar ds_bcd)
{
  M = ds_bcd&0xf0;
  M>>=4;
  N = ds_bcd&0x0f;
}
/********************************************************************
函 数 名:ch451中断服务程序
功    能:获取键值
说    明:
调    用:
入口参数:
返 回 值:ch451_key
设    计:蓝海微芯           
***********************************************************************/

void ch451_inter() interrupt 2 using 1
{
  unsigned char i;                       /*定义循环变量*/
  unsigned char command,keycode;         /*定义控制字寄存器,和中间变量定时器*/
  command=0x07;                          /*读取键值命令的高4位0111B*/
  EX1 = 0;
  ch451_load=0;                          /*命令开始*/
  for(i=0;i<4;i++)
  {
    ch451_din=command&1;                 /*低位在前,高位在后*/
    ch451_clk=0;
    command>>=1;                         /*右移一位*/
    ch451_clk=1;                         /*产生时钟上升沿锁通知CH451输入位数据*/
  }
  ch451_load=1;                          /*产生加载上升沿通知CH451处理命令数据*/
  keycode=0;                             /*清除keycode*/
  for(i=0;i<7;i++)
  {
    keycode<<=1;                         /*数据作移一位,高位在前,低位在后*/
    keycode|=ch451_dout;                 /*从高到低读入451的数据*/
    ch451_clk=0;                         /*产生时钟下升沿通知CH451输出下一位*/
    ch451_clk=1;	
  }
  ch451_key=keycode;                     /*保存上次的键值*/
  flag=1;		
  EX1 = 1;
  IE1=0;                                 /*清中断标志*/
}
main()
{
  EA=1;
  EX1=1;
  flag=0;
  ch451_init();
  ch451_write(0x403);
  ch451_write(0x580);
  ch451_write(CH451_DIG6|M);
  ch451_write(CH451_DIG7|N);
  while(1)
  {
    if(flag)
    {
      flag=0;
      ch451_bcd(ch451_key);
      ch451_write(CH451_DIG6|M);
      ch451_write(CH451_DIG7|N);
    }
  }
}

⌨️ 快捷键说明

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