51定时10秒计数bc7218显示

#include <reg51.h>
#define uchar unsigned char
#define NUM 10
#define count_M1 50000          ///T0的计数植0.05s
#define H_0 (65636-count_M1)/256   高八位
#define L_0 (65636-count_M1)%256

unsigned int count[NUM];
uchar i=0;

unsigned int over=0;
unsigned int cun;
sfr16 DPTR=0x82;
unsigned int Speed;
uchar Times=0;
sbit clk=P2^2;
sbit dat=P2^0;
sbit key=P2^1;
sbit p01=P0^1;
/*向bc728x发送一个字节*/
void send_byte(uchar send_byte)
{
  uchar bit_counter;
  clk=0;    //产生一个clk脉冲
  clk=1;
  do
  {
    clk=0;
 clk=1;
  }
  while(dat);   //发送clk脉冲直至dat为低电平
  clk=0;
  clk=1;    //Ta时间之内再次输入一clk脉冲
  while(!dat);       //等待bc728x进入接收状态
  for(bit_counter=0;bit_counter<8;bit_counter++)
  {
    if((send_byte&0x80)==0)
 {
   dat=0;
 }
 else
 {
   dat=1;
 }
 send_byte=send_byte<<1;
 clk=0;
 clk=1;
  }
  dat=1;
}
void write728x(uchar reg_add,uchar write_data)
{
  send_byte(reg_add);  //发送寄存器地址
  send_byte(write_data);//发送数据字节
}
int Sum_AVE()
{
 int sum;
 int average;
 uchar i;
 for(i=0;i<NUM;i++)
 {
  sum+=count[i];
 }
 / 可以加iic  存
       average=sum/NUM;
 return (average);
}
void T0_1s(void) interrupt 1   //
{
 uchar i=0;
 TH0=H_0;
 TL0=L_0;
 if(++Times==20)           //计够1s
 { over++;
  TR1=0;
  Times=0;
  DPL=TL1;
  DPH=TH1; 
  TH0=0;
  TL0=0;
  Speed=DPTR;
  count[i]=Speed;
  i++;
  if(i==NUM)
  {
   cun=Sum_AVE();
                              write728x(0x14,0x30+cun/256);
                              write728x(0x14,(0x40+cun%256));
  }
 }
}

 

void main()
{      unsigned int tmr;
 IE=0x8a;      1000 1010
 TMOD = 0x51;  ///0101 0001B   计数1 定时0
 TH0=H_0;
 TL0=L_0;
 TH1=0;
 TL1=0;
 TR0=1;
 TR1=1;
     for(tmr=0;tmr<0xffff;tmr++);   //等待复位
  write728x(0x12,0xc8);     //初始化BC7281B为SCN=1,RP=1;BMS=1
  write728x(0x14,0x00);     //在第0位显示0
  write728x(0x14,0x10);     //在第1位显示0
 while(1){
                 if(over==10)
                         {
                                 TR0=0;
                                 TR1=0;
                              write728x(0x14,0x30+cun/256);
                              write728x(0x14,(0x40+cun%256));
                                  }
                                //TR0=1;
                                 //TR1=1;

        }
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值