娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

C8051F005的簡(jiǎn)介及DA/AD程序

發(fā)布者:以泉換泉最新更新時(shí)間:2021-04-29 來(lái)源: eefocus關(guān)鍵字:C8051F005  AD程序 手機(jī)看文章 掃描二維碼
隨時(shí)隨地手機(jī)看文章

簡(jiǎn)介:本文主要介紹了C8051F005的DA驅(qū)動(dòng)程序(C語(yǔ)言)。


C8051F005的DA驅(qū)動(dòng)程序(C語(yǔ)言)

//-----------------------------------------------------------------------------

// Includes

//-----------------------------------------------------------------------------

#include // SFR declarations

#include


//-----------------------------------------------------------------------------

// 16-bit SFR Definitions for 'F00x

//-----------------------------------------------------------------------------


sfr16 DP = 0x82; // data pointer

sfr16 TMR3RL = 0x92; // Timer3 reload value

sfr16 TMR3 = 0x94; // Timer3 counter

sfr16 ADC0 = 0xbe; // ADC0 data

sfr16 ADC0GT = 0xc4; // ADC0 greater than window

sfr16 ADC0LT = 0xc6; // ADC0 less than window

sfr16 RCAP2 = 0xca; // Timer2 capture/reload

sfr16 T2 = 0xcc; // Timer2

sfr16 DAC0 = 0xd2; // DAC0 data

sfr16 DAC1 = 0xd5; // DAC1 data

//-----------------------------------------------------------------------------

// Function PROTOTYPES

//-----------------------------------------------------------------------------

void SYSCLK_Init (void);

//-----------------------------------------------------------------------------

// MAIN Routine

//-----------------------------------------------------------------------------


void main (void){

WDTCN = 0xde; // disable watchdog timer

WDTCN = 0xad;

SYSCLK_Init (); // initialize oscillator

REF0CN = 0x03; // Reference Control Register

//----------------------------------------------------------------------------

// DAC Configuration

//----------------------------------------------------------------------------

DAC0CN = 0x80; // DAC0 Control Register

DAC1CN = 0x80; // DAC1 Control Register

while(1)

{

DAC0L = 0xAB; // DAC0 Low Byte Register

DAC0H = 0x0C; // DAC0 High Byte Register

DAC1L = 0xAB; // DAC1 Low Byte Register

DAC1H = 0x0C; // DAC1 High Byte Register

}

}

//-----------------------------------------------------------------------------

// Initialization Subroutines

//-----------------------------------------------------------------------------


//-----------------------------------------------------------------------------

// Oscillator Configuration

//-----------------------------------------------------------------------------

void SYSCLK_Init (void)

{

int i; // delay counter


OSCXCN = 0x67; // start external oscillator with

// 18.432MHz crystal


for (i=0; i < 256; i++) ; // XTLVLD blanking interval (>1ms)


while (!(OSCXCN & 0x80)) ; // Wait for crystal osc. to settle


OSCICN = 0x88; // select external oscillator as SYSCLK

// source and enable missing clock

// detector

}

C8051F005的AD驅(qū)動(dòng)程序(C語(yǔ)言)

//-----------------------------------------------------------------------------

// Includes

//-----------------------------------------------------------------------------

#include

#include

#include

//-----------------------------------------------------------------------------

// Function PROTOTYPES

//-----------------------------------------------------------------------------

#define uchar unsigned char

#define uint unsigned int

void SYSCLK_Init (void);

void delaynus(unsigned int q) ; //N us延時(shí)函數(shù)

void PORT_Init (void);

void SPI0_Init (void);

void LCD_Init(void);

void SendSPIByte(unsigned char ch);

void delaynms (unsigned int j);

void writecom(unsigned char com);

void writedata(unsigned char d);

void writechar(unsigned char ua);

void lcd_Net(void);

void Write_COM(uchar ins);

void SendSPIByte(uchar disdata);

void lcden(datad);

void LCD_set_xy( unsigned char x, unsigned char y );

void lcd_xhl(void);

void LCD_write_string(unsigned char n);

void lcd_adc(void);

void UART0_Init (void);

void ADC (void);

sbit lcdcs=P3^0;

//-----------------------------------------------------------------------------

// Global CONSTANTS

//-----------------------------------------------------------------------------

#define BAUDRATE 115200 // Baud rate of UART in bps

#define SYSCLK 11059200 // SYSCLK frequency in Hz

#define SAMPLE_RATE 50000 // Sample frequency in Hz

#define INT_DEC 4096 // integrate and decimate ratio



sfr16 DP = 0x82; // data pointer

sfr16 TMR3RL = 0x92; // Timer3 reload value

sfr16 TMR3 = 0x94; // Timer3 counter

sfr16 ADC0 = 0xbe; // ADC0 data

sfr16 ADC0GT = 0xc4; // ADC0 greater than window

sfr16 ADC0LT = 0xc6; // ADC0 less than window

sfr16 RCAP2 = 0xca; // Timer2 capture/reload

sfr16 T2 = 0xcc; // Timer2

sfr16 DAC0 = 0xd2; // DAC0 data

sfr16 DAC1 = 0xd5; // DAC1 data


unsigned char xdata ADC1Data[4];

unsigned int xdata ad_arr[50];

unsigned char datad ,comd,kk,sdf,ppca;

unsigned char virt_port,v,b,m;

unsigned char lcd_data_count;

unsigned char *lcdpoint;

unsigned char qqq;

unsigned char data8;

unsigned int i;

unsigned int AD_MAXT;

unsigned int AD_MINT;

long AD_VAL,AD_VAL_TEST;

unsigned char YYY;

long result;

long fff;

long hhh;

int j,w,z; // temperature in hundredths of a

unsigned int fff_int, fff_frac;

unsigned char p=0,a=0,s,d,f,g=0;

//-----------------------------------------------------------------------------

// MAIN Routine

//-----------------------------------------------------------------------------

void main(void){


WDTCN = 0xde; // disable watchdog timer

WDTCN = 0xad;

SYSCLK_Init ();

PORT_Init ();

UART0_Init() ; // initialize crossbar and GPIO

SPI0_Init ();

LCD_Init() ;

delaynms(100);

Write_COM(0x00);

delaynms(100);

delaynms(100);

Write_COM(0x01);

delaynms(100);

delaynus (100);

LCD_set_xy(0X00,0);

delaynus (200);

lcd_adc();

delaynus (200);

LCD_write_string(5);

delaynms (100);

while (1)

{

delaynms (100);

ADC ();

}

}

//-----------------------------------------------------------------------------

// Initialization Subroutines

//-----------------------------------------------------------------------------



//-----------------------------------------------------------------------------

// ADC

//-----------------------------------------------------------------------------

void ADC (void)

{

AMX0CF = 0x60;// AMUX Configuration Register

AMX0SL = 0x00;// AMUX Channel Select Register

ADC0CN = 0x00;// ADC Control Register

REF0CN = 0x03;

ADC0CN |= 0x80;

AD_VAL=0;

AD_VAL_TEST = 0;

for( YYY = 0;YYY<50;YYY++)

{

ad_arr[YYY]=0;

}

YYY=0;

ADCINT = 0;

for(YYY= 0;YYY<50;YYY++) //AD_TIMES=50

{

ADBUSY = 1;

while (!ADCINT);

ADCINT = 0;

_nop_();

_nop_();

_nop_(); //*AD_POINTER = ADC0

ad_arr[YYY]=ADC0;

}

for(YYY=0;YYY<50;YYY++)// for(i = 0;i{

AD_VAL_TEST += ad_arr[YYY];

}

AD_VAL = (int)(AD_VAL_TEST/50);

_nop_();

_nop_();

_nop_();

_nop_();

hhh=AD_VAL*5;

hhh=hhh*5;

hhh=hhh*100;

hhh=hhh/4096;

ADC1Data[0]=hhh/1000; //將A/D轉(zhuǎn)化值存到顯示數(shù)組

ADC1Data[1]=(hhh-1000*ADC1Data[0])/100;

ADC1Data[2]=(hhh-1000*ADC1Data[0]-100*ADC1Data[1])/10;

ADC1Data[3]=hhh-1000*ADC1Data[0]-100*ADC1Data[1]-10*ADC1Data[2];

delaynus (100);

LCD_set_xy(0X05,0);

delaynus (200);

for(qqq=0;qqq<4;qqq++)

{

data8=ADC1Data[qqq];

if(data8>=0x0a) data8 += 0x37;

else data8 += 0x30;

delaynms (200);

writechar(data8);

}

AD_VAL=0;

}



//-----------------------------------------------------------------------------

// PORT_Init

//-----------------------------------------------------------------------------

void PORT_Init (void)

{


XBR0 = 0x27; // XBAR0: Initial Reset Value

XBR1 = 0x00; // XBAR1: Initial Reset Value

XBR2 = 0x5c; // XBAR2: Initial Reset Value

PRT0CF = 0x14; // Output configuration for P0

PRT1CF = 0x10; // Output configuration for P3

PRT3CF = 0x01; // Output configuration for P3


}

//-----------------------------------------------------------------------------

// SYSCLK_Init

//-----------------------------------------------------------------------------

void SYSCLK_Init (void)

{

// delaynms counter

OSCXCN = 0x67; // start external oscillator with

for (i=0; i < 256; i++) ; // XTLVLD blanking interval (>1ms)

while (!(OSCXCN & 0x80)) ; // Wait for crystal osc. to settle

OSCICN = 0x88; // select external oscillator as SYSCLK

}

//-----------------------------------------------------------------------------

// SPI0_Init

//-----------------------------------------------------------------------------

void SPI0_Init (void)

{

SPI0CFG = 0x07; // data sampled on 1st SCK rising edge

SPI0CFG|=0xC0; //CKPOL =1;

SPI0CN = 0x03; // Master mode; SPI enabled; flags

SPI0CKR = SYSCLK/2/2000000-1; // SPI clock <= 8MHz (limited by

// EEPROM spec.)

}

//-----------------------------------------------------------------------------

// UART0_Init

//-----------------------------------------------------------------------------

void UART0_Init (void)

{

SCON = 0x50; // SCON: mode 1, 8-bit UART, enable RX

TMOD = 0x20; // TMOD: timer 1, mode 2, 8-bit reload

TH1 = -(SYSCLK/BAUDRATE/16); // set Timer1 reload value for baudrate

TR1 = 1; // start Timer1

CKCON |= 0x10; // Timer1 uses SYSCLK as time base

PCON |= 0x80; // SMOD = 1

TI = 1; // Indicate TX ready

}

//-----------------------------------------------------------------------------

// LCD_Init

//-----------------------------------------------------------------------------

void LCD_Init(void) //向LCD送命令


{


// unsigned int xdata x;

delaynms(100);

datad=0x00;

SendSPIByte(datad);

delaynms(10);

Write_COM(0x30);

delaynms(10);

Write_COM(0x30);

delaynms(10);

Write_COM(0x30);

delaynms(10) ;

Write_COM(0x28);

delaynms(100);

virt_port=0;

SendSPIByte(virt_port);

lcden(virt_port);

Write_COM(0x01);

delaynms(100);

Write_COM(0x06);

delaynms(10) ;

Write_COM(0x0C);

delaynms(500) ;




}

//-----------------------------------------------------------------------------

// SendSPIByte

//-----------------------------------------------------------------------------

void SendSPIByte(unsigned char ch)

{ lcdcs=1;

delaynus(100);

SPIF = 0;

SPI0DAT = ch;

while (SPIF == 0);

delaynus(100);

lcdcs=0;

delaynus(100);

_nop_(); // 等待寫結(jié)束

}

//-----------------------------------------------------------------------------

// lcden

//-----------------------------------------------------------------------------

void lcden(datad)

{

datad|=0x08;

SendSPIByte(datad);

datad&=0xf7;

SendSPIByte(datad);

}

//-----------------------------------------------------------------------------

// delaynms

//-----------------------------------------------------------------------------

void delaynms (unsigned int uu)

{

unsigned int oo,ll;

for (oo=0;oo{

for(ll=0;ll<1140;ll++);


}

}

//-----------------------------------------------------------------------------

// writechar

//-----------------------------------------------------------------------------

void writechar(unsigned char ua)

[1] [2]
關(guān)鍵字:C8051F005  AD程序 引用地址:C8051F005的簡(jiǎn)介及DA/AD程序

上一篇:一種嵌入式時(shí)鐘管理器的設(shè)計(jì)與實(shí)現(xiàn)
下一篇:51單片機(jī)頻率計(jì)數(shù)器課程設(shè)計(jì)

推薦閱讀最新更新時(shí)間:2025-05-21 19:43

C8051F005單片機(jī)的比例電磁鐵控制技術(shù)
引言 比例電磁鐵作為執(zhí)行元件,是機(jī)電一體化的關(guān)鍵產(chǎn)品之一,廣泛應(yīng)用于各種自動(dòng)化控制系統(tǒng)中;比例電磁鐵的推力大,結(jié)構(gòu)簡(jiǎn)單,維護(hù)方便,成本低廉,是應(yīng)用非常廣泛的電—機(jī)械轉(zhuǎn)換器 ;比例電磁鐵的特性及工作的可靠性,對(duì)于整個(gè)控制系統(tǒng)具有十分重要的影響,是決定控制系統(tǒng)品質(zhì)的關(guān)鍵部件之一。比例電磁鐵作為電—機(jī)械轉(zhuǎn)換元件,其功能是將比例控制放大器輸給的電流信號(hào),轉(zhuǎn)換成位移或者力信號(hào)輸出。 比例電磁鐵適用于直流電壓為24 V比例控制放大器的控制線路中,作為連續(xù)地、按比例地控制系統(tǒng)執(zhí)行元件的運(yùn)動(dòng)、速度和方向的動(dòng)力元件。比例電磁鐵在其額定行程范圍內(nèi)的推力與通入其線圈的電流成正比,可在其他需要作用力自動(dòng)控制的裝置上作為線性動(dòng)力元件,如自動(dòng)
[單片機(jī)]
C8051F32X單片機(jī)AD數(shù)據(jù)采集程序
  (1)AD數(shù)據(jù)采集程序說(shuō)明      1)過(guò)程簡(jiǎn)單說(shuō)明      使用C8051F32X片內(nèi)10位AD進(jìn)行256個(gè)數(shù)據(jù)(每個(gè)數(shù)據(jù)為10位,占2個(gè)字節(jié))512字節(jié)的數(shù)據(jù)采集。   采用TIME2定時(shí)溢出觸發(fā)啟動(dòng)AD轉(zhuǎn)換方式。   在AD數(shù)據(jù)轉(zhuǎn)換完成,AD結(jié)束標(biāo)志位為1時(shí),自動(dòng)產(chǎn)生AD轉(zhuǎn)換完成中斷(C8051F32X中斷10)。在中斷服務(wù)程序中,將AD轉(zhuǎn)換結(jié)果讀到片內(nèi)RAM中。在程序中表現(xiàn)為:將ADCOH、ADCOL存放到full函數(shù)中,設(shè)該函數(shù)上限為512,當(dāng)fu11=512時(shí),變量bLOCk_finish=l(初始狀態(tài)和表1ADC控制寄存器ADCOCN功能說(shuō)明fu11<512時(shí),block_finish=0)。此時(shí),主程序中的
[單片機(jī)]
C8051F32X單片機(jī)<font color='red'>AD</font>數(shù)據(jù)采集<font color='red'>程序</font>
STC12C5620AD系列A/D轉(zhuǎn)換C語(yǔ)言程序
#include STC12C5620AD.H //--------------------------------------------------------------------- typedef unsigned char INT8U; typedef unsigned int INT16U; //--------------------------------------------------------------------- //以下選擇 ADC 轉(zhuǎn)換速率,只能選擇其中一種 // SPEED1 SPEED0 A/D轉(zhuǎn)換所需
[單片機(jī)]
11路AD轉(zhuǎn)換TLC2543CN c程序
采用1602液晶來(lái)顯示轉(zhuǎn)換結(jié)果,端口可以很方便的自己修改的 #include reg51.h #include intrins.h #include stdlib.h #define uchar unsigned char #define uint unsigned int #include intrins.h #define uchar unsigned char #define uint unsigned int uchar vol ={000},channel ={0x0c,0x1c,0x2c,0x3c,0x4c,0x5c,0x6c,0x7c,0x8c,0x9c,0xac}; /* 端口定義*/ #define LCD_
[單片機(jī)]
小廣播
設(shè)計(jì)資源 培訓(xùn) 開(kāi)發(fā)板 精華推薦

最新單片機(jī)文章
隨便看看

 
EEWorld訂閱號(hào)

 
EEWorld服務(wù)號(hào)

 
汽車開(kāi)發(fā)圈

 
機(jī)器人開(kāi)發(fā)圈

電子工程世界版權(quán)所有 京B2-20211791 京ICP備10001474號(hào)-1 電信業(yè)務(wù)審批[2006]字第258號(hào)函 京公網(wǎng)安備 11010802033920號(hào) Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 广河县| 忻城县| 大宁县| 梅州市| 中超| 玛多县| 绍兴市| 咸宁市| 大兴区| 湖南省| 晋城| 延吉市| 西宁市| 娄烦县| 永春县| 绥宁县| 平果县| 宝兴县| 乌鲁木齐市| 安岳县| 桓台县| 慈利县| 民县| 安丘市| 邹平县| 东乌珠穆沁旗| 波密县| 雅江县| 凤庆县| 三穗县| 怀化市| 顺昌县| 阿拉善右旗| 绥滨县| 西青区| 扶风县| 胶州市| 北京市| 牟定县| 大庆市| 资阳市|