<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EM78P458電壓表的制作

          作者: 時間:2016-11-13 來源:網(wǎng)絡(luò) 收藏
          以前的學(xué)習(xí)筆記——在學(xué)習(xí)74HC164的應(yīng)用,用義隆單片機調(diào)試。用了匯編調(diào)試成功后又用C調(diào)試了下。練習(xí)著就打算用C語言來編寫AD的讀寫,順便結(jié)合74HC164寫了個電壓表的程序。又花了半天時間把C代碼優(yōu)化了下,提高了代碼效率。晚上回家就把此例子記錄下來,以供參考。

          一、功能介紹:

          本文引用地址:http://www.ex-cimer.com/article/201611/316078.htm

          本設(shè)計采用臺灣的義隆單片機EM78P458,此單片機內(nèi)部有4K*13bit一次性ROM(OTPROM)此單片機內(nèi)帶8位多路AD,精度達(dá)到13位。結(jié)合3片74HC164來對三個數(shù)碼管進行數(shù)據(jù)傳輸,實現(xiàn)數(shù)據(jù)的串轉(zhuǎn)并,節(jié)省了單片機的I/O口資源;本設(shè)計只是個舉例應(yīng)用,為了學(xué)習(xí)74HC164的應(yīng)用和義隆單片機C語言的應(yīng)用。實際應(yīng)用中三個數(shù)碼管顯示可以用一個74HC164來賦數(shù)據(jù),三個I/O口來掃描,動態(tài)掃描來顯示。具體不做詳細(xì)介紹。A/D端口輸入電壓范圍:0~5V。顯示精確到小數(shù)點后2位。

          二、具體電路如下:

          三、完整程序

          //**************Voltage**************

          //Use IC: EMC78P458**

          //Author: zhengwen**

          //Date: 2007.1.22**

          //74HC164_PIN Q0~Q7 =LED_PIN a~h**

          //P57==CLRP55==CLOCK P56==data**

          //***********************************

          #include "em78x458_9xx.h"

          #defineuchar unsigned char

          #defineuint unsigned int

          #defineDATA R56//Databit of 74HC164

          #defineCLKR55//Clock bit of 74HC164

          #defineDATA_CLRR57//Clrbit of 74HC164

          #defineENI()_asm{eni}

          //****************存儲空間分配**************

          unsigned short ledm@0x20:bank 1;//short占用2個存儲空間

          unsigned short ledtemp @0x22:bank 1;//AD計算時候的中間量

          unsigned charAD_data @0x24:bank 1;//AD采集數(shù)據(jù)存儲地址

          unsigned charled1@0x20:bank 0;//第1位數(shù)碼管顯示數(shù)

          unsigned charled2@0x21:bank 0;//第2位數(shù)碼管顯示數(shù)

          unsigned charled3@0x22:bank 0;//第3位數(shù)碼管顯示數(shù)

          //******************************************

          //************Table of LED******************

          const unsigned char table[16]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};

          const unsigned char table1[16]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x88,0x00,0x10,0x08,0x03,0xC6,0xA1,0x86,0x8E};

          //用const以后table里的數(shù)據(jù)就存放在ROM里,不然是存在RAM里

          //******************************************

          //*******Subprogram of Delay****************

          void delay(void)

          {unsigned shorti;

          for(i=0;i<60000;i++)

          {;}

          }

          //***********AD參數(shù)設(shè)置子程序***************

          void DO_AD(void)

          {

          ADCON=0x08;//選擇AD0

          ADCOM=0x01;//模擬信號進行轉(zhuǎn)換并設(shè)置轉(zhuǎn)換

          P6CR=1;

          GCON=0;//選擇ADC增益和工作電壓

          ADPD=1;//禁止ADC的低功耗模式

          ENI();//開中斷

          ADRUN=1;//啟動ADC

          while(ADRUN==1);//等待AD轉(zhuǎn)換結(jié)束

          AD_data=ADDATA; //AD數(shù)據(jù)存儲到AD_data地址中

          }

          //******Send Data Subprogram***********

          void sendData(uchar c)

          {

          unsigned char i;

          bit temp;

          for(i=0;i<8;i++)

          {

          if (c&0x80) temp=1;

          else temp=0;

          CLK=0;

          DATA=temp;

          CLK=1;

          c<<=1;

          }

          }

          //****************************************

          //*******Initialization of Program***************

          void init(void)

          {

          P5CR=0x00;//P5 as Output

          P6CR=0x03;//PORT6的,1.2口為輸入,其他口為輸出

          //PDCR=0xff;//下拉電阻設(shè)置

          //ODCR=0x00;//高阻設(shè)置

          //PHCR=0xff;//上拉電阻設(shè)置

          WDTCR&=0xef;//"1" enable R-option ,"0" disable R-option

          }

          //*********Main Program********************

          void main()

          {

          DATA_CLR=1;//unable clr bit of 74HC164

          init();// I/O init

          while(1)

          {

          DO_AD();

          AD_data=ADDATA;

          //******AD采樣進來的數(shù)據(jù)轉(zhuǎn)換*******

          //******Vin=(Dx/256)*5 (V)*********

          ledm=AD_data;

          ledm=ledm*125;

          ledtemp=ledm>>6;

          led1=ledtemp/100;

          led2=(ledtemp%100)/10;

          led3=(ledtemp%100)%10;

          //*********************************

          delay();

          sendData(table1[led1]);//輸出顯示

          sendData(table[led2]);

          sendData(table[led3]);

          }

          }



          關(guān)鍵詞: EM78P458電壓

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();