📄 hd7279a.h
字号:
#ifndef _HD7279A_
#define _HD7279A_
//--------------- HD7279A 指令 -----------------------------
#define CMD_RESET 0xa4 //复位
#define CMD_TEST 0xbf //测试
#define RTL_UNCYL 0xa1 //左移
#define RTR_UNCYL 0xa0 //右移
#define RTL_CYCLE 0xa3 //循环左移
#define RTR_CYCLE 0xa2 //循环右移
#define DECODE0 0x80 //下载数据按方式0译码
#define DECODE1 0xc8 //下载数据按方式1译码
#define UNDECODE 0x90 //下载数据但不译码
#define BLINKCTL 0x88 //闪烁控制
#define ACTCTL 0x98 //消隐控制
#define SEGON 0xe0 //段点亮
#define SEGOFF 0xc0 //段关闭
#define CMD_READ 0x15 //读键盘数据
**********************************************************************
*************** 所使用的函数原型 *****************
**********************************************************************
*/
void cpu_init(void); //初始化CPU
void xint1_init(void); //外部中断1初始化子程序
void iope_init(void); //初始化IOPE设置寄存器
interrupt void PHANTOM(void); //伪中断程序
interrupt void int1(void); //中断1中断子程序
extern void delay_8us(void); //8us延迟 --T2\T3\T6\T7
extern void delay_25us(void); //25us延迟 --T4\T5
extern void delay_50us(void); //50us延迟 --T1
void delay_25ms(void); //25ms延迟 --复位延迟
void cs_high(void); //片选置高
void cs_low(void); //片选置低
void send(void); // 发送一个字节 8BIT
void receive(); // 接收一个字节 8BIT
//--------------------------------------------------------------------
// 函数名称 : void cs_high(void)
// 函数说明 : 片选置高
// 输入参数 : 无
// 输出参数 : 无
//--------------------------------------------------------------------
void cs_high()
{
asm(" setc xf");
}
//--------------------------------------------------------------------
// 函数名称 : void cs_low(void)
// 函数说明 : 片选置低
// 输入参数 : 无
// 输出参数 : 无
//--------------------------------------------------------------------
void cs_low()
{
asm(" clrc xf");
}
//--------------------------------------------------------------------
// 函数名称 : void send(void)
// 函数说明 : 发送一个字节 8BIT,高位在前
// 输入参数 : 发送数据在全局变量send_buff中
// 输出参数 : 无
//--------------------------------------------------------------------
void send()
{
unsigned int i;
cs_low(); //片选CS=0
delay_50us(); //延时50us
for(i=0;i<8;i++)
{
switch(send_buff&0x80)
{
case 0x00:* PEDATDIR = * PEDATDIR & 0xfffb; //7279data低
break;
case 0x80:* PEDATDIR = * PEDATDIR | 0x0004; //7279data高
}
* PEDATDIR=* PEDATDIR | 0x0002; //7279clk高
delay_8us();
* PEDATDIR=* PEDATDIR & 0xfffd; //7279clk低
delay_8us();
send_buff<<=1;
}
// cs_high(); //片选CS=1
//这时,7279CS=1,7279CLK=0
}
//--------------------------------------------------------------------
// 函数名称 : void receive(void)
// 函数说明 : 接收一个字节 8BIT,高位在前
// 输入参数 : 接收到的数据在全局变量rece_buff中
// 输出参数 : 无
//--------------------------------------------------------------------
void receive()
{
unsigned int i;
* PEDATDIR = * PEDATDIR & 0xFBF7; //iope2 配置为输入脚,7279发数据
//iope3 = '0',准备接收数据
delay_50us();
for(i=0;i<8;i++)
{
* PEDATDIR=* PEDATDIR|0x0002; //7279clk高
delay_8us();
data_buff=data_buff|((* PEDATDIR & 0x0004)<<(13-i));//读iope2引脚数据;
//把接收到数据放在BIT15~8
* PEDATDIR=* PEDATDIR & 0xFFFD; //7279clk低
delay_8us();
}
asm(" nop "); //在这里设置断点观察data_buff中的值
rece_buff=(data_buff>>8) & 0x00ff; //接收到的数据右移给rece_buff
data_buff=0x0000; //清除data_buff
* PEDATDIR=* PEDATDIR | 0x040c; //iope2配置为输出脚=1,7279收数据
//iope3配置为'1',接收7279的数据
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -