📄 ch451_int1.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 + -