📄 7281.c
字号:
//----------------------------------------------------------------------------------
//----------------------------------------------------------------------------------
//--------------------- BC7281应用程序
//--------------------- 本程序为BC7281A测试程序,目的是测试其数码管
//--------------------- 驱动现实的性能。与MAX7219/MAX7221进行性能比较。
//--------------------- 若性能符合要求,则其低廉的成本将对我们的电子灌
//--------------------- 装秤的数码显示的成本有很大比例的降低。
//--------------------- 硬件搭建、程序编写、测试人:Mr.LU
//--------------------- 时 间:2006年2月10日
//--------------------- 地 点:
//----------------------------------------------------------------------------------
//----------------------------------------------------------------------------------
//----------------------- 头文件定义
#include "reg52.h"
#include "intrins.h"
#include "string.h"
//-- I/O定义
sbit clk=P2^3; // BC7281A串行数据发送端口定义
sbit dat=P2^2; // BC7281A串行脉冲控制端口定义
unsigned char ku1[10]={0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89};
unsigned char ku2[12]={0x80,0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
unsigned int tmr;
//-- 函数定义
void delay(unsigned char);
void write7281(unsigned char,unsigned char);
void send_byte(unsigned char);
//------------------------------------------------------------------
//-- 自定义小延时
void delay(unsigned char t)
{
while(t!=0)
{t--;}
}
void Delay1(unsigned char MS)
{
unsigned char us,usn;
while(MS!=0)
{
usn=4;
while(usn!=0)
{
us=0xf0;
while(us!=0)
{us--;}
usn--;
}
MS--;
}
}
//------------------------------------------------------------------
//-- 向BC7281A发送一个字节
void send_byte(unsigned char sdata)
{
unsigned char j;
clk=0; //产生一个clk脉冲
clk=1;
do{
clk=0;
clk=1;
}while(dat);
clk=0;
clk=1;
while(!dat); //等待BC7281进入接收状态
for(j=0;j<8;j++)
{
if((sdata&0x80)==0)
{
dat=0;
}
else
{
dat=1;
}
sdata=sdata<<1; //sdata左移一位。若写成sdata*=2;代码不优化。
clk=0; //输出一clk脉冲
clk=1;
delay(1); //短暂延时
}
dat=1; //恢复dat为高延时
delay(2); //指令间设置一微小延时
}
//------------------------------------------------------------------
//-- 写入BC7281A,第一位参数为目标寄存器地址,第二位为要写入的参数
void write7281(unsigned char s,unsigned char d)
{
send_byte(s); //发地址
send_byte(d); //发数据
}
void main(void)
{
unsigned char i;
unsigned char k,k1,k2;
for(tmr=0;tmr<0xffff;tmr++);
write7281(0x12,0x80);
//write7281(0x12,0x88);
write7281(0x11,0x00);
//write7281(0x10,0xff);
//write7281(0x19,0xff);
//write7281(0x00,0x66);
write7281(0x0c,0x00);
while(1)
{
for(i=0;i<12;i++)
{
//随便弄点显示数据,测试一下
write7281(0x00,ku2[i]);write7281(0x01,ku2[i]);
write7281(0x02,ku2[i]);write7281(0x03,ku2[i]);
write7281(0x04,ku2[i]);write7281(0x05,ku2[i]);
write7281(0x06,ku2[i]);write7281(0x07,ku2[i]);
write7281(0x08,ku2[i]);write7281(0x09,ku2[i]);
write7281(0x0a,ku2[i]);write7281(0x0b,ku2[i]);
write7281(0x0c,ku2[i]);write7281(0x0d,ku2[i]);
write7281(0x0e,ku2[i]);write7281(0x0f,ku2[i]);
Delay1(500);Delay1(500);
}
i=0;k1=0x07;k2=0x0f;
for(k=2;k<10;k++)
{
write7281(k1,ku2[k]);write7281(k2,ku2[k]);
k1--;k2--;
Delay1(500);Delay1(500);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -