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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4316|回復(fù): 11
打印 上一主題 下一主題
收起左側(cè)

高分求stc12C5A60S2單片機自帶AD程序代碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:229232 發(fā)表于 2019-1-7 23:29 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
200黑幣
要求用12C5A60S2單片機自帶AD功能,最好也是單片機自帶晶振,檢測電壓,然后用數(shù)碼管顯示出來的程序,

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

使用道具 舉報

沙發(fā)
ID:23606 發(fā)表于 2019-1-8 08:44 | 只看該作者
12C5A60S2的數(shù)據(jù)手冊里就有例程
回復(fù)

使用道具 舉報

板凳
ID:426861 發(fā)表于 2019-1-8 08:59 | 只看該作者
去官方網(wǎng)站,這個是官網(wǎng)有的
回復(fù)

使用道具 舉報

地板
ID:229232 發(fā)表于 2019-1-8 09:20 | 只看該作者
求具體鏈接或截圖
回復(fù)

使用道具 舉報

5#
ID:229232 發(fā)表于 2019-1-8 09:21 | 只看該作者
YJGG 發(fā)表于 2019-1-8 08:44
12C5A60S2的數(shù)據(jù)手冊里就有例程

我手冊里沒有
回復(fù)

使用道具 舉報

6#
ID:424598 發(fā)表于 2019-1-8 10:42 來自手機 | 只看該作者
回復(fù)

使用道具 舉報

7#
ID:97554 發(fā)表于 2019-1-8 10:42 | 只看該作者
回復(fù)

使用道具 舉報

8#
ID:424598 發(fā)表于 2019-1-8 10:43 來自手機 | 只看該作者
要學(xué)會自己搜索,論壇都有人發(fā)的
回復(fù)

使用道具 舉報

9#
ID:453974 發(fā)表于 2019-1-8 12:32 | 只看該作者
網(wǎng)上找找數(shù)據(jù)手冊吧
回復(fù)

使用道具 舉報

10#
ID:213173 發(fā)表于 2019-1-8 14:11 | 只看該作者
給你寫個簡單示例程序程序,仿真圖不代表實際電路,實際數(shù)碼管電路要加限流電阻。

#include <STC12C5A60S2.H>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char

sbit V1 = P3^0;
sbit V2 = P3^1;
sbit V3 = P3^2;       
sbit V4 = P3^3;       

/*Define ADC operation const for ADC_CONTR*/
#define ADC_POWER   0x80            //ADC power control bit
#define ADC_FLAG    0x10            //ADC complete flag
#define ADC_START   0x08            //ADC start control bit
#define ADC_SPEEDLL 0x00            //420 clocks
#define ADC_SPEEDL  0x20            //280 clocks
#define ADC_SPEEDH  0x40            //140 clocks
#define ADC_SPEEDHH 0x60            //70 clocks
uchar code table[]={//數(shù)碼管數(shù)組0~F.V
        0x3f,0x06,0x5b,0x4f,
        0x66,0x6d,0x7d,0x07,
        0x7f,0x6f,0x77,0x7c,
        0x39,0x5e,0x79,0x71,0x3e};
uchar Cnt250us;
uint V_CY;

void Delay(uint n);
void Timer0Init();
void ShowResult();
void InitADC();
uint GetADCResult(uchar ch);
void LB_ADC();
void display();

void main()
{
        P1M1 = 0x01;                                         //設(shè)置P1.0高阻:ADC輸入高阻
        P1M0 = 0x00;                                         //設(shè)置P1.0高阻:ADC輸入高阻
        P2M1 = 0x00;                                         //設(shè)置P2.0~2.7推挽
        P2M0 = 0xFF;                                         //設(shè)置P2.0~2.7推挽
        P3M1 = 0x00;                                         //設(shè)置P3.0~3.3推挽
        P3M0 = 0x0F;                                         //設(shè)置P3.0~3.3推挽
        Timer0Init();
        InitADC();                 //Init ADC sfr       
        while(1)
        {
                ShowResult();
        }
}
void Timer0Init()                //250微秒@11.0592MHz
{
        AUXR &= 0x7F;                //定時器時鐘12T模式
        TMOD &= 0xF0;                //設(shè)置定時器模式
        TMOD |= 0x02;                //設(shè)置定時器模式
        TL0 = 0x1A;                        //設(shè)置定時初值
        TH0 = 0x1A;                        //設(shè)置定時重載值
        TF0 = 0;                                //清除TF0標(biāo)志
        TR0 = 1;                                //定時器0開始計時
}
/*------------------
        演示結(jié)果 周期2ms
--------------------*/
void ShowResult()
{
        if(TF0==1)
        {
                TF0=0;
                if(++Cnt250us>=8)
                {
                        Cnt250us=0;
                        LB_ADC();
                        display();
                }
        }
}
/*--------------------------
  ADC采樣平均法濾波程序
---------------------------*/
void LB_ADC()
{
        static long PJZ_ADC=0;                //累加10次采樣的變量
        static uchar count=0;
        PJZ_ADC += GetADCResult(0);        //累加采樣值
        count++;                                //計數(shù)器變量自+1
        if(count>=10)                        //如果計數(shù)到10次采樣
        {
                count=0;                        //計數(shù)器清0
                V_CY=(PJZ_ADC*5*10+512)/1024;//獲取100倍電壓值四舍五入取整數(shù)
                PJZ_ADC=0;                        //采樣變量清0        
        }
}
/*--------------------------
        Initial ADC sfr
---------------------------*/
void InitADC()
{
        P1ASF=0x01;                                                //設(shè)置P1的0通道端口作為模擬輸入
        ADC_RES=0;                                                //清除ADC_RES存儲器以前的結(jié)果
        ADC_RESL=0;
        ADC_CONTR=ADC_POWER|ADC_SPEEDL; //ADC 開啟電源、轉(zhuǎn)換速度 1010 0000
        Delay(2);                                               
}
//Get ADC Result
uint GetADCResult(uchar ch)                                //獲取ADC結(jié)果
{
        ADC_CONTR=ADC_POWER|ADC_SPEEDL|ch|ADC_START;//啟動轉(zhuǎn)換1010 1000
    _nop_();                        //延時確保正確讀到ADC_CONTR寄存器的值
    _nop_();
    _nop_();
    _nop_();
        while(!(ADC_CONTR & ADC_FLAG));        //等待ADC轉(zhuǎn)換完成標(biāo)志置位 1001 1000
        ADC_CONTR &=~ADC_FLAG;                                //關(guān)閉ADC
        return (ADC_RES<<2)|ADC_RESL;                //返回十位ADC結(jié)果
}
void display()//數(shù)碼管顯示程序
{
        static uchar i=0;
        P2=0x00;//消隱
        switch(i)
        {
                case 0: V1=0;V2=1;V3=1;V4=1;P2=table[V_CY/100%10]|0x80;i++;break;//加小數(shù)點
                case 1: V1=1;V2=0;V3=1;V4=1;P2=table[V_CY/10%10];i++;break;
                case 2: V1=1;V2=1;V3=0;V4=1;P2=table[V_CY%10];i++;break;
                case 3: V1=1;V2=1;V3=1;V4=0;P2=table[16];i=0;break;
        }
}
/*----------------------------
Software delay function
----------------------------*/
void Delay(uint n)
{
    uint x;
    while (n--)
    {
        x = 5000;
        while (x--);
    }
}


回復(fù)

使用道具 舉報

11#
ID:412814 發(fā)表于 2019-1-25 14:32 | 只看該作者
wulin 發(fā)表于 2019-1-8 14:11
給你寫個簡單示例程序程序,仿真圖不代表實際電路,實際數(shù)碼管電路要加限流電阻。

#include

這個程序真挺好,謝謝
回復(fù)

使用道具 舉報

12#
ID:432823 發(fā)表于 2019-1-25 19:16 | 只看該作者
/*************        本程序功能說明        **************

P1.0做ADC輸入,從串口輸出結(jié)果(ASCII),9600,8,N,1.

用戶只需要更改 MAIN_Fosc 來適應(yīng)自己的系統(tǒng)。

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


/*************        用戶系統(tǒng)配置        **************/

#define MAIN_Fosc                22118400L        //定義主時鐘, 模擬串口和和延時會自動適應(yīng)。5~35MHZ

/*************        以下宏定義用戶請勿修改        **************/
#include        "reg51.H"
#define        uchar        unsigned char
#define uint        unsigned int
/******************************************/

sfr P1ASF     = 0x9D;        //12C5A60AD/S2系列模擬輸入(AD或LVD)選擇
sfr ADC_CONTR = 0xBC;        //帶AD系列
sfr ADC_RES   = 0xBD;        //帶AD系列
sfr ADC_RESL  = 0xBE;        //帶AD系列

//                                                                7       6      5       4         3      2    1    0   Reset Value
//sfr ADC_CONTR = 0xBC;                ADC_POWER SPEED1 SPEED0 ADC_FLAG ADC_START CHS2 CHS1 CHS0 0000,0000        //AD 轉(zhuǎn)換控制寄存器
#define ADC_OFF()        ADC_CONTR = 0
#define ADC_ON                (1 << 7)
#define ADC_90T                (3 << 5)
#define ADC_180T        (2 << 5)
#define ADC_360T        (1 << 5)
#define ADC_540T        0
#define ADC_FLAG        (1 << 4)        //軟件清0
#define ADC_START        (1 << 3)        //自動清0
#define ADC_CH0                0
#define ADC_CH1                1
#define ADC_CH2                2
#define ADC_CH3                3
#define ADC_CH4                4
#define ADC_CH5                5
#define ADC_CH6                6
#define ADC_CH7                7


/************* 本地變量聲明 **************/
sbit        P_TXD1 = P3^1;


/************* 本地函數(shù)聲明 **************/
void        Tx1Send(uchar dat);
void        PrintString(unsigned char code *puts);
void          delay_ms(unsigned char ms);
uint        adc10_start(uchar channel);        //channel = 0~7




/********************* 主函數(shù) *************************/
void main(void)
{
        uint        j;

        PrintString("****** STC12C5A60S2系列ADC程序 2011-02-27 ******\r\n");        //上電后串口發(fā)送一條提示信息

        P1ASF = (1 << ADC_CH0);                        //12C5A60AD/S2系列模擬輸入(AD)選擇
        ADC_CONTR = ADC_360T | ADC_ON;

        while(1)
        {
                delay_ms(250);
                delay_ms(250);
                delay_ms(250);
                delay_ms(250);
               
                j = adc10_start(0);                // P1.0 ADC
                Tx1Send('A');
                Tx1Send('D');
                Tx1Send('0');
                Tx1Send('=');
                Tx1Send(j/1000 + '0');
                Tx1Send(j%1000/100 + '0');
                Tx1Send(j%100/10 + '0');
                Tx1Send(j%10 + '0');
                Tx1Send(0x0d);
                Tx1Send(0x0a);
               
        }
}

/********************* 做一次ADC轉(zhuǎn)換 *******************/
uint        adc10_start(uchar channel)        //channel = 0~7
{
        uint        adc;
        uchar        i;

        ADC_RES = 0;
        ADC_RESL = 0;

        ADC_CONTR = (ADC_CONTR & 0xe0) | ADC_START | channel;

//        for(i=0; i<250; i++)                //13T/loop, 40*13=520T=23.5us @ 22.1184M
        i = 250;
        do{
                if(ADC_CONTR & ADC_FLAG)
                {
                        ADC_CONTR &= ~ADC_FLAG;
                //        adc = 0;
                //        adc = (ADC_RES << 8) | ADC_RESL;        //ADRJ_enable()
                        adc = (uint)ADC_RES;
                        adc = (adc << 2) | (ADC_RESL & 3);
                        return        adc;
                }
        }while(--i);
        return        1024;
}

//========================================================================
// 函數(shù): void  delay_ms(unsigned char ms)
// 描述: 延時函數(shù)。
// 參數(shù): ms,要延時的ms數(shù).
// 返回: none.
// 版本: VER1.0
// 日期: 2010-12-15
// 備注:
//========================================================================
void  delay_ms(unsigned char ms)
{
     unsigned int i;
         do{
              i = MAIN_Fosc / 14000;
                  while(--i)        ;   //14T per loop
     }while(--ms);
}


/********************** 模擬串口相關(guān)函數(shù)************************/

void        BitTime(void)        //位時間函數(shù)
{
        uint i;
        i = ((MAIN_Fosc / 100) * 104) / 140000L - 1;                //根據(jù)主時鐘來計算位時間
        while(--i);
}

//模擬串口發(fā)送
void        Tx1Send(uchar dat)                //9600,N,8,1                發(fā)送一個字節(jié)
{
        uchar        i;
        EA = 0;
        P_TXD1 = 0;
        BitTime();
        for(i=0; i<8; i++)
        {
                if(dat & 1)                P_TXD1 = 1;
                else                        P_TXD1 = 0;
                dat >>= 1;
                BitTime();
        }
        P_TXD1 = 1;
        EA = 1;
        BitTime();
        BitTime();
}

void PrintString(unsigned char code *puts)                //發(fā)送一串字符串
{
    for (; *puts != 0;        puts++)  Tx1Send(*puts);         //遇到停止符0結(jié)束
}
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久机热| 精品欧美一区二区三区久久久 | 五月天国产视频 | 综合一区 | 日韩中文字幕区 | 91久久精品一区二区二区 | 日韩免费一级 | 国产欧美日韩 | 国产亚洲精品久久yy50 | 免费在线黄 | 激情五月综合 | 北条麻妃av一区二区三区 | 国产精品一区二区av | 91视频大全 | 国产一区二区三区视频 | 玖玖视频网 | 欧美久久久久 | 欧美v免费 | 精品在线一区 | 亚洲欧美日韩在线 | 黄网免费看 | 伊人艹 | 欧美成人免费电影 | 国产精品久久二区 | 99成人| 久久精品日产第一区二区三区 | 国产成人99久久亚洲综合精品 | 日本成人中文字幕 | 亚洲午夜电影 | 国产欧美日韩 | 午夜精品 | 涩涩视频在线观看免费 | 欧美日韩亚洲视频 | 中文字幕亚洲视频 | 黄色大片在线 | 91网站在线观看视频 | 国产成人精品一区二区三区在线 | 国产伦精品| 超碰在线人人 | 91极品视频 | 亚洲欧美综合精品久久成人 |