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

📄 7281.c

📁 新型数码管驱动芯片BC7281应用笔记
💻 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 + -