📄 bc7281.c
字号:
#define BC7281_GLOBALS
#include "includes.h"
// BC7281A LED显示和键盘控制 ****************************************************************/
// bc7281a 字节写
//R=3K3,C=20PF,OSC=2.5MHz
//#pragma disable //关中断
void Write_7281 ( unsigned char ddata ) {
unsigned char i;
unsigned int max=0;
Data_7281 = 1; //漏开置1
Clock_7281 = 0; //9us
Clock_7281 = 1;
do { // 建立握手信号,发送一系列脉冲
Clock_7281 = 0;
Delay(6);
Clock_7281 = 1;
Delay(6);
max++;
} while ( Data_7281 && (max < 1000)); // 等待bc7281a 发送低电平,表示准备好
if(max < 1000){
Clock_7281 = 0; // 15us内再发送一时钟信号
Delay(6);
Clock_7281 = 1;
Delay(6);
max = 0;
while ( (!Data_7281) && (max < 1000)){max++;}; // Data_7281 回高电平
if(max < 1000){
for( i = 0; i < 8; i ++ ) {
if ( ddata & 0x80 ) // 发送第7——0位
Data_7281 = 1;
else
Data_7281 = 0;
Delay(10);
ddata = ddata << 1; // 发送一时钟信号
Clock_7281 = 0;
Delay(6);
Clock_7281 = 1;
Delay ( 6 ); // 延时
}
}}
Data_7281 = 1; // 回高电平
Clock_7281 = 1;
Delay ( 1 );
}
// bc7281a 字节读
//#pragma disable //关中断
unsigned char Read_7281 ( void ) {
unsigned char i;
unsigned char ddata =0 ;
Data_7281 = 1; //漏开置1
Clock_7281 = 0; // 发送一单一握手脉冲 25us
Delay(6);
Clock_7281 = 1;
Delay(6);
i=0;
while (( Data_7281) && (i<200)){i++;}; // 等待bc7281a 发送低电平,表示准备好
if(i<200){
Data_7281 = 1; //漏开置1
Clock_7281 = 0; // 15us内再发送一时钟信号 9us
Delay(6);
Clock_7281 = 1;
Delay(6);
for ( i = 0; i < 8; i ++ ) {
Delay ( 20 );
Data_7281 = 1; //漏开置1
ddata = ddata << 1;
if ( Data_7281 ) // 接收第7——0位
ddata = ddata | 0x01;
Clock_7281 = 0; // 15 us内发送一时钟信号
Delay ( 10 );
Clock_7281 = 1;
Delay(10);
}
}
Clock_7281 = 0; // 发送一时钟信号,表示接收完毕
Delay ( 12 );
Clock_7281 = 1;
Delay ( 20 );
return ddata;
}
void BC7281Init(){
Write_7281 ( 0x12 ); // 写BC7281A工作模式寄存器
Write_7281 ( 0x8a ); // 扫描使能,扩展开关,164模式,扩展闪烁模式,输出反向,键盘工作模式为‘ 1 ’
Write_7281 ( 0x11 ); // 写闪烁速度控制寄存器
Write_7281 ( 0x80 ); // 闪烁频率 2 HZ
Write_7281 ( 0x10 ); // 初始化时,不闪烁显示
Write_7281 ( 0xFF );
Write_7281 ( 0x19 );
Write_7281 ( 0xFF );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -