找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1856|回復: 0
打印 上一主題 下一主題
收起左側(cè)

大神們我這樣計算AD轉(zhuǎn)化值在處理延時有錯誤嗎?

[復制鏈接]
回帖獎勵 60 黑幣 回復本帖可獲得 3 黑幣獎勵! 每人限 1 次
跳轉(zhuǎn)到指定樓層
樓主
ID:156852 發(fā)表于 2016-12-30 15:08 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include<reg51.h>
#include<intrins.h>
#include<stdio.h>
#define uchar unsigned char
#define uint unsigned int
uint temp;
uchar i;
uint a;
float v;
uint v1,v2;
uchar qian,bai,shi,ge;
void display();
void delay(uint z);
void time0_init();
void time1_init();
void AD_0809();
uchar code table1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar code table2[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0xf7,0xfc,0xb9,0xde,0xf9,0xf1};
sbit ST=P2^6;
sbit OE=P2^5;
sbit EOC=P2^4;   
sbit CLK=P2^3;
sbit ALE=P2^6;
sbit OUT=P3^6;
uint gatedate;
uchar flag;
float t;
void main()
{
flag=0;                           //標志位0
time1_init();       
time0_init();

while(1)       
{
  AD_0809(); //AD轉(zhuǎn)換程序
      if(v>1&&v<4)       
      {
          display();
          t=(float)(14060.0/(v*v));
           TR1=1;                  
           display();//數(shù)碼管顯示程序
        while(a>=t)                 
             {                                         
                 flag=1;         //標記位改為1;數(shù)碼管停止計數(shù)
                  display();//數(shù)碼管顯示程序
       
         }
       }
void time0_init()       
{
TMOD=0x12;                       
TH0=6;
TL0=6;//  TL0=(65536-20)%256;
EA=1;
ET0=1;
TR0=1;
}
void timer0()interrupt 1
{
CLK=~CLK;       
}
void display()
{
P3=0xbe;
P0=table1[qian];       
delay(2);
P3=0xbd;
P0=table2[bai];
delay(2);
P3=0xbb;
P0=table1[shi];
delay(2);
P3=0xb7;
P0=table1[ge];
delay(2);
}

void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--); //110
}
void timer1()interrupt 3
{
TH1=(65536-10000)/256;
TL1=(65536-10000)%256;
a++;
i++;

if(i==10)
       {
           i=0;
           if(flag==0)temp++;
                if(temp==9999)
                        temp=0;
                        if(flag==0)
            {
                        qian=temp/1000;
                        bai=temp%1000/100;
                        shi=temp%100/10;
                        ge=temp%10;
}
}       
}
void time1_init()
{
TMOD=0x12;
EA=1;
ET1=1;
TH1=(65536-10000)/256;
TL1=(65536-10000)%256;
TR1=0;
}
void AD_0809()
{
  ST=0;
_nop_();
OE=0;
_nop_();
ST=1;
_nop_();
ST=0;
while(EOC==0);
  OE=1;
  gatedate=P1;
  _nop_();
  OE=0;
  v1=gatedate*5/256;
  v2=(gatedate*500/256)%100;
  v=v1+(float)v2/100;

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表