欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3147|回復: 3
打印 上一主題 下一主題
收起左側

數字氣壓計仿真

[復制鏈接]
跳轉到指定樓層
樓主

數字氣壓計.rar

19.4 KB, 下載次數: 70, 下載積分: 黑幣 -5

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

使用道具 舉報

沙發
ID:1 發表于 2017-5-25 15:26 | 只看該作者
樓主能分享下源碼嗎?
回復

使用道具 舉報

板凳
ID:204697 發表于 2017-5-25 22:09 | 只看該作者
admin 發表于 2017-5-25 15:26
樓主能分享下源碼嗎?

#include <reg51.H>
#include "intrins.h"
#define uint unsigned int
#define uchar unsigned char

//設置ADC0832的引腳
sbit ADCS =P2^0;  //ADC0832 chip seclect
sbit ADDI =P3^7;  //K值輸入端
sbit ADDO =P3^7;  //K值輸出端
sbit ADCLK =P3^6;  //ADC0832 clock signal080307208

unsigned char
dispbitcode[8]={0xf7,0xfb,0xfd,0xfe,0xef,0xdf,0xbf,0x7f};  //位掃描
unsigned  char
dispcode[11]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff};  //共陽數碼管字段碼
unsigned char dispbuf[4];
uint temp;
uchar getdata; //獲取ADC轉換回來的值


void delay_1ms(void)  //晶振10MHz,延遲1ms
{
   unsigned char x,y;   
   x=3;
   while(x--)
  {
       y=40;
       while(y--);
    }
}
void display(void)  //數碼管顯示函數
{
  char k;
  for(k=0;k<4;k++)
  {

  P1 = dispbitcode[k];
  P0 = dispcode[dispbuf[k]];
  if(k==1)          //加上數碼管的dp小數點
          P0&=0x7f;
   delay_1ms();          
  }
}

/************
讀ADC0832函數
************/

//采集并返回
unsigned int Adc0832(unsigned char channel)     //AD轉換,返回結果
{
    uchar i=0;
    uchar j;
    uint dat=0;
    uchar ndat=0;

    if(channel==0)channel=2;
    if(channel==1)channel=3;
    ADDI=1;
    _nop_();
    _nop_();
    ADCS=0;//拉低CS端
    _nop_();
    _nop_();
    ADCLK=1;//拉高CLK端
    _nop_();
    _nop_();
    ADCLK=0;//拉低CLK端,形成下降沿1
    _nop_();
    _nop_();
    ADCLK=1;//拉高CLK端
    ADDI=channel&0x1;
    _nop_();
    _nop_();
    ADCLK=0;//拉低CLK端,形成下降沿2
    _nop_();
    _nop_();
    ADCLK=1;//拉高CLK端
    ADDI=(channel>>1)&0x1;
    _nop_();
    _nop_();
    ADCLK=0;//拉低CLK端,形成下降沿3
    ADDI=1;//控制命令結束
    _nop_();
    _nop_();
    dat=0;
    for(i=0;i<8;i++)
    {
        dat|=ADDO;//收數據
        ADCLK=1;
        _nop_();
        _nop_();
        ADCLK=0;//形成一次時鐘脈沖
        _nop_();
        _nop_();
        dat<<=1;
        if(i==7)dat|=ADDO;
    }  
    for(i=0;i<8;i++)
    {
        j=0;
        j=j|ADDO;//收數據
        ADCLK=1;
        _nop_();
        _nop_();
        ADCLK=0;//形成一次時鐘脈沖
        _nop_();
        _nop_();
        j=j<<7;
        ndat=ndat|j;
        if(i<7)ndat>>=1;
    }
    ADCS=1;//拉低CS端
    ADCLK=0;//拉低CLK端
    ADDO=1;//拉高數據端,回到初始狀態
    dat<<=8;
    dat|=ndat;
    return(dat);            //return ad
}


void main(void)
{  
  while(1)
  {          unsigned int temp;
      float  press;                             
          getdata=Adc0832(0);
          if(14<getdata<243)                                       //當壓力值介于15kpa到115kpa之間時,遵循線性變換
                 {                            
                    int vary=getdata;                                                 
//y=(115-15)/(243-13)*X+15kpa                       
                        press=((10.0/23.0)*vary)+9.3;                        //測試時補償值為9.3
                                                                                                                  
                        temp=(int)(press*10);                        //放大10倍                                                                                       
                        dispbuf[3]=temp/1000;                                     //取壓力值百位
                        dispbuf[2]=(temp%1000)/100;                            //取壓力值十位
                        dispbuf[1]=((temp%1000)%100)/10;                    //取壓力值個位
                        dispbuf[0]=((temp%1000)%100)%10;                        //取壓力值十分位
                        display();
                      }            
  
  }
}
回復

使用道具 舉報

地板
ID:522603 發表于 2019-5-7 13:01 | 只看該作者
樓主很厲害啊!對我很有用處!
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

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