導航:首頁 > 操作系統 > chl單片機

chl單片機

發布時間:2022-10-22 15:14:03

1. 單片機程序詳細講解

如此詳細的注釋,你還要怎麼「詳解」,個人覺得你還是應該多看看單片機原理書籍。

2. 求助:關於89C52單片機定時器中斷產生PWM的問題。

TH1,TL1開始沒有賦初值,所以第一次就需要65毫秒才能進入中斷,而且你的中斷服務程序特別是定時器的中斷服務程序處理東東太多,看開始還加上了延時,你想想定時器最大溢出時間才六十多毫秒,顯然是無法完成這個艱巨任務的。

3. avr單片機之延時問題

/*******************************************
文件:MEGA16_AD.C
環境:編譯為ICC AVR6.25A,模擬為AVR Studio4.10
硬體:ATMEGA16晶元
日期:2006年12月10日
功能:驅動MEGA16片上自帶的AD轉換器
備註:參考《AVR系列單片機C語言編程與應用實例》(清華大學出版社)
/******************************************/
#include <iom16v.h> //包含型號頭文件
#include <macros.h> //包含"位"操作頭文件
#include <stdio.h> //標准輸入輸出頭文件
#include <AVR_PQ1A.h> //包含自定義常量頭文件
#include "SMG.C" //包含數碼管顯示函數

/*******************************************
函數名稱: Mega16_ad
功 能: 對指定的通道進行模數轉換
參 數: chl--指定的通道(本開發板只用了通道0)
返回值 : addata--10位數據輸出
/********************************************/
uint Mega16_ad(uchar chl)
{
uint addata;
DDRA&=~(BIT(PA0)|BIT(PA1)); //轉換口設置為輸入、無上拉
PORTA&=~(BIT(PA0)|BIT(PA1));
ADMUX=0; //採用外部參考電壓,輸出數據右對齊
ADMUX|=chl; //設置指定的通道
ADCSR=0x80; //採用單次轉換,查詢模式,2分頻
ADCSR|=BIT(ADSC); //啟動轉換
while(!(ADCSR&(BIT(ADIF)))); //等待轉換結束
addata=ADCL; //讀取低8位數據
addata+=ADCH*256; //讀取高8位數據
return addata;
}
/*******************************************
函數名稱: Num_BCD
功 能: 將一個位元組的整數轉換成三位BCD碼
參 數: num--需要轉換的整數
返回值 : chr--三位BCD碼數組指針
/********************************************/
uchar* Num_BCD(uchar num)
{
uchar i,chr[3];
uchar *rept;
rept=&(chr[0]); //返回指針指向BCD碼數組
for(i=0;i<3;i++)
{
chr[2-i]=num%10; //對10取余數(其實是求模,但是對於正數,取余與求模是相等的)
num/=10; //除以10,為取出下一位做准備
}
return rept; //返回指針
}
/*******************************************
函數名稱: main
功 能: 驅動MEGA16的AD,並在數碼管上顯示採集值
參 數: 無
返回值 : 無
/********************************************/
void main(void)
{
uchar *adpt; //定義一個接受返回指針的指針變數
uchar i,ad0[3];
Board_init( ); //初始化開發板
while(1)
{
adpt=Num_BCD(Mega16_ad(0)/4); //啟動AD轉換通道0,同時將數值轉換成BCD碼
for(i=0;i<3;i++) //將轉換後的BCD碼存入顯示數組
{
ad0[i]=*(adpt+i);
}
for(i=0;i<3;i++) //顯示轉換的數值
{
One_smg_display(ad0[i],i+1);
Delayms(2);
}
}
}

4. 單片機簡單的AD轉換程序問題

玩了8年的程序,竟然看不懂這一小段,俺也是丟人丟大了。
不過話說,能把 C語言的 可讀性 侮辱成這樣,也算是 程序猿中的 奇葩了!

5. 單片機pcf8591 ad轉換輸出四個通道,可是,我寫的時候他並不是按1,2,3,4顯示的,而是4,1,2,3顯示,為什麼

也可能是你啟動通道一時,它剛剛結束了通道四的轉換。

把啟動順序改為:2341,即可。

6. 利用STC89C52單片機以及PCF8591的AD轉換設計一個數字電壓表,求大神給個程序例子,在線等!!!急!!!

這是吳鑒鷹單片機開發板配套的常式。

/*-----------------------------------------------

名稱:IIC協議PCF8591AD/DA轉換

內容:使用4路AD中的4路檢測外部模擬量輸入使用液晶顯示

------------------------------------------------*/

#include<reg52.h>

#include"i2c.h"

#include"delay.h"

#include"1602.h"

#include<stdio.h>


#defineAddWr0x90//寫數據地址

#defineAddRd0x91//讀數據地址


externbitack;

unsignedcharReadADC(unsignedcharChl);

bitWriteDAC(unsignedchardat);

/*------------------------------------------------

主程序

------------------------------------------------*/

main()

{

unsignedcharnum=0,i;

unsignedchartemp[7];//定義顯示區域臨時存儲數組

floatVoltage;//定義浮點變數

LCD_Init();//初始化液晶

DelayMs(20);//延時有助於穩定

LCD_Clear();//清屏

while(1)//主循環

{

for(i=0;i<5;i++)//連續讀5次,取最後一次,以便讀取穩定值

num=ReadADC(0);//讀取第1路電壓值,范圍是0-255

Voltage=(float)num*5/256;//根據參考電源VREF算出時間電壓,float是強制轉換符號,用於將結果轉換成浮點型

sprintf(temp,"V0%3.2f",Voltage);//格式輸出電壓值,%3.2f表示浮點輸出,共3位數,小數點後2位

LCD_Write_String(0,0,temp);


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

num=ReadADC(1);

Voltage=(float)num*5/256;

sprintf(temp,"V1%3.2f",Voltage);

LCD_Write_String(8,0,temp);


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

num=ReadADC(2);

Voltage=(float)num*5/256;

sprintf(temp,"V2%3.2f",Voltage);

LCD_Write_String(0,1,temp);


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

num=ReadADC(3);

Voltage=(float)num*5/256;

sprintf(temp,"V3%3.2f",Voltage);

LCD_Write_String(8,1,temp);

//主循環中添加其他需要一直工作的程序

DelayMs(200);


}

}


/*------------------------------------------------

讀AD轉值程序

輸入參數Chl表示需要轉換的通道,范圍從0-3

返回值范圍0-255

操作分四步:

(1)、發送地址位元組,選擇該器件。

(2)、發送控制位元組,選擇相應通道。

(3)、重新發送地址位元組,選擇該器件的讀寫。

(4)、接收目標通道的數據。

------------------------------------------------*/

unsignedcharReadADC(unsignedcharChl)

{

unsignedcharVal;

Start_I2c();//啟動匯流排

SendByte(AddWr);//發送器件地址

if(ack==0)return(0);

SendByte(0x40|Chl);//發送器件子地址

if(ack==0)return(0);

Start_I2c();

SendByte(AddWr+1);//10010001是讀命令

if(ack==0)return(0);

Val=RcvByte();

NoAck_I2c();//發送非應位

Stop_I2c();//結束匯流排

return(Val);

}

閱讀全文

與chl單片機相關的資料

熱點內容
dockerpythonweb 瀏覽:969
程序員演算法有多強 瀏覽:713
pythonworkbook模塊 瀏覽:242
什麼app能查醫生 瀏覽:175
輕量級的編程語言 瀏覽:338
程序員那麼可愛生孩子 瀏覽:432
後綴him3加密文件是什麼軟體 瀏覽:984
堅果隱藏app為什麼要140版本才能用 瀏覽:313
淘寶dns伺服器地址 瀏覽:259
領英轉型app哪個好用 瀏覽:943
壓縮軟體的圖標 瀏覽:97
賣鞋哪個app是真的 瀏覽:469
python迭代是累計嗎 瀏覽:419
程序員哪些平台接私活 瀏覽:175
單片機充電電路原理圖 瀏覽:1000
android軟體雲伺服器地址 瀏覽:213
如何用伺服器做內網穿透服務 瀏覽:401
oracle加密表空間重置密碼 瀏覽:302
mdk編譯後目標文件 瀏覽:616
老人動手解壓 瀏覽:720