久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

pcf8591電壓表,幫忙改一下,謝謝

[復制鏈接]
跳轉到指定樓層
樓主
本帖最后由 123gkhkhkhkhgg 于 2017-12-29 15:08 編輯

#include<reg52.h>
#include<intrins.h>
#define AddWr 0x90
#define AddRd 0x91
#define uchar unsigned char
#define uint unsigned int

sbit Scl=P1^1;
sbit Sda=P1^2;

bit ADFlag;
uchar code Datatab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};  //0 1 2 3 4 5 6 7 8 9
data uchar Display[8];
uchar code wei[]={0xf8,0xf9,0xfa,0xfb,0xfc,0xfd};

void mDelay(uint j)
{
        unsigned int x,i;
        for(x=j;x>0;x--)
        {
                for(i=0;i<125;i++)
                {;}
         }
}

void Init_Timer1(void)
{
        TMOD|=0x10;
         TH1=0Xff;
         TH0=0x00;
         EA=1;
         ET1=1;
         TR1=1;
}

void Start(void)
{
         Sda=1;
         _nop_();
         Scl=1;
         _nop_();
         Sda=0;
          _nop_();
          Scl=0;
}

void Stop(void)
{
         Sda=0;
         _nop_();
         Scl=1;
         _nop_();
         Sda=1;
         _nop_();
         Scl=0;
}

void Ack(void)
{
         Sda=0;
         _nop_();
         Scl=1;
         _nop_();
         Scl=0;
         _nop_();
}

void NoAck(void)
{
         Sda=1;
         _nop_();
         Scl=1;
         _nop_();
         Scl=0;
         _nop_();
}

void Send(unsigned char Data)
{
         unsigned char BitCounter=8;
         unsigned char temp;
         do
         {
                  temp=Data;
                  Scl=0;
            _nop_();
                if((temp&0x80)==0x80)
                Sda=1;
                else
                Sda=0;
                Scl=1;
                temp=Data<<1;
                Data=temp;
                BitCounter--;
         }
         while(BitCounter);
                 Scl=0;
}

unsigned char Read(void)
{
         unsigned char temp=0;
         unsigned char temp1=0;
         unsigned char BitCounter=8;
         Sda=1;
         do
         {
                  Scl=0;
                   _nop_();
                   Scl=1;
            _nop_();
                if(Sda)
                         temp=temp|0x01;
                 else
                         temp=temp&0xfe;
                 if(BitCounter-1)
                 {
                          temp1=temp1<<1;
                          temp=temp1;
                 }
                BitCounter--;
         }
         while(BitCounter);
         return(temp);
}

void DAC(unsigned char Data)
{
         Start();
         Send(AddWr);
         Ack();
         Send(0x40);
         Ack();
         Send(Data);
         Ack();
         Stop();
}

unsigned char ReadADC()
{
          unsigned char Data;
          Start();
          Send(AddWr);
          Ack();
          Send(0x40);                   //選擇通道
          Ack();
          Start();
          Send(AddRd);
          Ack();
          Data=Read();
          Scl=0;
          NoAck();
          Stop();
          return Data;
}

void main()
{
         unsigned char num;
         uint ADtemp;
        int count;
         Init_Timer1();
         while(1)
         {
                  DAC(num);
                  num++;
                  mDelay(20);
                  if(ADFlag)
                  {
                           ADFlag=0;
                           ADtemp=ReadADC()*2;                                           //0-512對應0-5v

                    Display[0]=Datatab[ADtemp/100]|0x80;           //整數部分和小數點(0x80)
                           Display[1]=Datatab[(ADtemp/10)%10];                   //小數點后第一位
                        Display[2]=Datatab[ADtemp%10];                       //小數點后第二位
                        Display[3]=0x3e;                                                       //v

                        for(count=0;count<4;count++)
                        {
                                P0=Display[count];                                 //數碼管顯示程序
                                 P2=wei[count];
                         }
                  }
         }
}

void Time1_isr(void) interrupt 3 using 1
{
         static unsigned int j=0;
         TH1=0xfb;
         TL1=0x00;
         j++;
         if(j==300)
         {
                  j=0;
                  ADFlag=1;        //采樣
         }         
}

捕獲.PNG (98.97 KB, 下載次數: 84)

捕獲.PNG

程序.zip

32.86 KB, 下載次數: 32

仿真.zip

45.76 KB, 下載次數: 23

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

使用道具 舉報

沙發
ID:205697 發表于 2017-12-29 15:07 | 只看該作者
運行不出來誰可以幫忙改一下
回復

使用道具 舉報

板凳
ID:258566 發表于 2017-12-29 19:23 | 只看該作者
參考程序, 109-PCF8591 4路AD數碼管顯示.zip (34.22 KB, 下載次數: 72)



obj.zip (21.19 KB, 下載次數: 41) for proteus8

回復

使用道具 舉報

地板
ID:205697 發表于 2018-1-5 11:00 | 只看該作者

謝謝啦
回復

使用道具 舉報

5#
ID:859799 發表于 2020-12-16 20:24 | 只看該作者
你好,我已經仿真成功了,也在開發板上實驗成功了,但是我仔細看了一下,沒明白代碼到底是哪個文件里的哪一個
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美13videosex性极品 | 久久久久久综合 | 国产精品黄视频 | 日韩一级精品视频在线观看 | 日一区二区 | 91精品国产综合久久久动漫日韩 | 亚洲精品字幕 | 99re6在线视频精品免费 | 日韩免费视频一区二区 | 亚洲精品乱码久久久久久9色 | 在线视频 欧美日韩 | 久草视| 日本一区精品 | 色综合天天天天做夜夜夜夜做 | 久久精品国产久精国产 | 欧美在线观看一区 | 91精品国产综合久久久动漫日韩 | 国产一区二区三区四区区 | 国产在线观看网站 | 国产精品久久久久无码av | 国产jizz女人多喷水99 | 色婷婷亚洲国产女人的天堂 | 欧美久久久网站 | 亚洲网址在线观看 | 中文字幕乱码一区二区三区 | 国产日韩免费视频 | 黑人粗黑大躁护士 | 国产乱码精品一品二品 | 亚洲欧美第一视频 | 成人av一区 | 日本午夜视频 | 九九热精品在线视频 | 免费在线一区二区三区 | 91视频一区二区 | 国产精品69久久久久水密桃 | 久久综合一区 | 国产精品自产av一区二区三区 | 91欧美| 成人欧美一区二区三区色青冈 | 国产视频一区二区三区四区五区 | 99精品一区二区 |