簡介:這里用到PCF8591 ADDA芯片和51單片機和一個電位器。通過控制電位器,產生PWM波,控制舵機旋轉。并在數碼管上顯示角度。
電路圖
這是程序,、
/*-----------------------------------------------
名稱:IIC協議 PCF8591ADDA轉換
內容:此程序通過IIC協議對DAAD芯片操作,讀取電位器的電壓,并輸出模擬量,用LED亮度漸變指示,晶體選用12MHz
------------------------------------------------*/
#include"reg52.h"
#include #define AddWr 0x90 //寫數據地址 #define AddRd 0x91 //讀數據地址 sbit Sda=P1^2; //定義總線連接端口 sbit Scl=P1^1; sbit control_signal=P1^5; data unsigned int Display[8];//定義臨時存放數碼管數值 unsigned char code Datatab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//7段數共陰碼管段碼表 unsigned int ADtemp; //定義全局變量 unsigned int high,low; static unsigned int count1; /*------------------------------------------------ 延時程序 ------------------------------------------------*/ void mDelay(unsigned char j) { unsigned int i; for(;j>0;j--) { for(i=0;i<125;i++) {;} } } /*------------------------------------------------ 初始化定時器0 ------------------------------------------------*/ void Init_Timer0(void) { TMOD |=0x01; //定時器設置 0.1ms in 11.0592M crystal TH0=(65536-78)/256; TL0=(65536-78)%256; //定時0.1mS ET0=1;//定時器中斷打開 EA=1;//總中斷 TR0=1; //啟動定時器0 } /*------------------------------------------------ 啟動IIC總線 ------------------------------------------------*/ void Start(void) { Sda=1; _nop_(); Scl=1; _nop_(); Sda=0; _nop_(); Scl=0; } /*------------------------------------------------ 停止IIC總線 ------------------------------------------------*/ void Stop(void) { Sda=0; _nop_(); Scl=1; _nop_(); Sda=1; _nop_(); Scl=0; } /*------------------------------------------------ 應答IIC總線 ------------------------------------------------*/ void Ack(void) { Sda=0; _nop_(); Scl=1; _nop_(); Scl=0; _nop_(); } /*------------------------------------------------ 非應答IIC總線 ------------------------------------------------*/ 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=temp<<1; temp=temp1; } BitCounter--; } while(BitCounter); return(temp); } /*------------------------------------------------ 讀取AD模數轉換的值,有返回值 ------------------------------------------------*/ unsigned int ReadADC(unsigned char Chl) { unsigned int Data; Start(); //啟始信號 Send(AddWr);//0x90 Ack(); Send(0x40|Chl);//寫入選擇的通道,本程序只用單端輸入,差分部分需要自行添加 //Chl的值分別為0、1、2、3,分別代表1-4通道 Ack(); Start(); Send(AddRd); //讀入地址 Ack(); Data=Read(); //讀數據 Scl=0; NoAck(); Stop(); return Data; //返回值 } /******************************************************************/ /* 主程序 */ /******************************************************************/ void main() { Init_Timer0(); while(1) { unsigned int angle; ADtemp=ReadADC(0); //ADtemp的取值范圍是0-255,定時的時間范圍是0.5-2.5ms high=65075-7.2*ADtemp; // ( high=65035-7.8*ADtemp;12MHz)(65535-(460+7.2*ADtemp 11.0592MHz) low=47563+7.2*ADtemp; // ( low=46035+7.8*ADtemp; ) ( 65535-(17972-7.2*ADtemp 11.0592MHz ) angle=ADtemp*0.7; Display[0]=Datatab[angle/100];//處理0通道電壓顯示 Display[1]=Datatab[(angle%100)/10]; Display[2]=Datatab[angle%10]; while(1) { P0=Display[count1];//用于動態掃描數碼管 P2=count1; mDelay(1); count1++; if(count1==3) //表示掃描3個數碼管 { count1=0; break; } } } } /******************************************************************/ /* 定時器中斷函數 /******************************************************************/ void tim(void) interrupt 1 using 1 { static unsigned char count; if (!count) { control_signal = 1; //給高電平 TH0=high/256; TL0=high%256; } else { control_signal=0 ; TH0=low/256; TL0=low%256; } count=~count; }
上一篇:基于DS18B20 的遠程糧倉溫控系統
下一篇:探討PC機與多MCS-51單片機間的串行通信設計
推薦閱讀
史海拾趣
為了進一步拓展市場并加強合作伙伴關系,EnerSys積極尋求與行業領先企業的合作。例如,EnerSys與Verkor攜手打造美國鋰電超級工廠,這一合作項目將有助于提高EnerSys在美國市場的競爭力,并加速全球清潔能源的轉型。通過與合作伙伴的緊密合作,EnerSys在電子行業中的影響力逐漸增強。
Ferraz Shawmut一直致力于技術創新和產品研發。通過不斷的技術創新,公司推出了多款具有競爭力的電氣保護產品,如熔斷器、保險絲等。同時,公司也積極拓展全球市場,目前在全球擁有60個下屬企業,6200名雇員,產品遠銷世界各地。
Panasonic作為電子行業的巨頭,對EMI濾波器市場也早有布局。他們采取的是多元化的產品戰略,針對不同行業和應用場景,推出了多種類型的EMI濾波器。無論是用于消費電子產品的片式濾波器,還是用于工業設備的大功率濾波器,Panasonic都能提供高質量的產品。這種多元化的產品戰略,使得Panasonic在EMI濾波器市場上占據了重要的地位。他們的產品廣泛應用于家電、汽車電子、工業自動化等領域,為全球電子行業的發展做出了重要貢獻。
ECS公司始終堅持以客戶為中心的服務理念。他們深入了解客戶的需求和痛點,為客戶量身定制解決方案。例如,針對某些行業對數據安全性的特殊要求,ECS公司推出了專用的安全加密方案;針對一些大型企業對于大規模計算資源的需求,ECS公司提供了定制化的高性能計算服務。這些定制化服務不僅滿足了客戶的特殊需求,還增強了客戶對ECS公司的信任和忠誠度。
Cambridge Electronic Industries Ltd(簡稱CEI)的創立,標志著劍橋地區電子工業的一次重要飛躍。在20世紀中期,隨著電子技術的快速發展,CEI的創始人看到了其中的商機,并決定成立一家專注于電子設備和系統研發制造的公司。起初,CEI主要面向當地的小型企業和研究機構,提供定制化的電子解決方案。憑借創始人的技術背景和團隊的辛勤努力,CEI逐漸在劍橋地區的電子市場中建立了良好的聲譽。
Epitex Inc公司成立于XXXX年,由一群熱衷于電子技術的工程師和企業家共同創立。當時,電子行業正處于快速發展的階段,各種新技術層出不窮。Epitex的創始人看到了電子材料在半導體制造中的巨大潛力,于是決定專注于研發和生產高性能的電子材料。
在公司創立初期,Epitex面臨著資金、技術和市場等多方面的挑戰。然而,通過不懈的努力和持續的創新,Epitex逐漸在電子材料領域取得了突破。他們研發出了一種新型的電子封裝材料,具有優異的耐熱性和絕緣性能,迅速在市場上獲得了認可。
1、普通視頻監控基本退出參觀者的視線,由網絡監控完全取代。除了網絡化硬盤錄像機,更注重寬帶和高清晰。無線視頻監控,尤其是基于FODM的無線壓縮傳輸被很多廠商所推崇,價格也比前幾年大幅下降。… 查看全部問答∨ |
|
一直不能感性的理解什么是輸入電阻,什么是輸出電阻,請問各位能否幫忙講解一下? 還有,“從輸入端看去,電壓控制的受控源其輸入電阻無限大,電流控制的受控源其輸入電阻為0”怎么理解?… 查看全部問答∨ |
|
我的要求很簡單,就是需要10HZ信號,5V左右的穩定幅度就可以了。供電電源為正負5V。 查過很多(如XR2206,ICL8038,MAX038,XR8038)都停產了,有沒有還沒有停產的推薦一下呀,最好成本不是太高的那種。 先謝謝了。… 查看全部問答∨ |
[求助]遇到問題,FLASH存在壞扇區,U-BOOT應該怎么修改跳過這個扇區? 我向FLASH燒ramdisk.image.gz的時候,遇到壞扇區,怎么辦? 是跳過還是直接這一段扇區不要,ramdisk.image.gz燒到后面,但是我想這樣是要在U-BOOT中做修改,還是image中做修改?U-BOOT引導LINUX的流程是怎么樣的? 還有要如何修改?… 查看全部問答∨ |
求教,我用的筆記本電腦通過并口連著這一臺進口的系統,運行著這個設備的軟件系統。同時我也運行著我自己設備的軟件系統,是通過U口連接的,如果兩個程序同時運行我的程序經常會出現串口管教變化的事件,請問如何解決,非常急!先謝過了。 &nb ...… 查看全部問答∨ |
verilog語言中input[0:0]是什么數據類型 有段語言是這樣的: input [0:0] Hclk0,Hsynco,Vsynco; 不懂啊.高人指點來著...… 查看全部問答∨ |
AMLogic AML8726-M3 CortexA9 產品規格書提供 我司在研發AMLogic方案體有獨特的優勢:結合了原廠的資源(我司和AMLogic合作有6年時間)及自己本身強大的研發實力(自己也有貼片機)能很好的控制研發及生產質量。我們可以根據客戶需要選配帶內置3G GPS 前后攝像頭,目前7寸 8寸 9.7寸 10.1寸An ...… 查看全部問答∨ |
由于以前是學的M3,這次比賽要用launchpad,只有幾天的學習時間,求一個g2553測頻率的程序 [ 本帖最后由 51新手 于 2012-8-8 20:03 編輯 ]… 查看全部問答∨ |