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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

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

高分求stc12C5A60S2單片機(jī)自帶AD程序代碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
200黑幣
要求用12C5A60S2單片機(jī)自帶AD功能,最好也是單片機(jī)自帶晶振,檢測(cè)電壓,然后用數(shù)碼管顯示出來(lái)的程序,

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

我手冊(cè)里沒(méi)有
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

10#
ID:213173 發(fā)表于 2019-1-8 14:11 | 只看該作者
給你寫個(gè)簡(jiǎn)單示例程序程序,仿真圖不代表實(shí)際電路,實(shí)際數(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;                //定時(shí)器時(shí)鐘12T模式
        TMOD &= 0xF0;                //設(shè)置定時(shí)器模式
        TMOD |= 0x02;                //設(shè)置定時(shí)器模式
        TL0 = 0x1A;                        //設(shè)置定時(shí)初值
        TH0 = 0x1A;                        //設(shè)置定時(shí)重載值
        TF0 = 0;                                //清除TF0標(biāo)志
        TR0 = 1;                                //定時(shí)器0開(kāi)始計(jì)時(shí)
}
/*------------------
        演示結(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++;                                //計(jì)數(shù)器變量自+1
        if(count>=10)                        //如果計(jì)數(shù)到10次采樣
        {
                count=0;                        //計(jì)數(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存儲(chǔ)器以前的結(jié)果
        ADC_RESL=0;
        ADC_CONTR=ADC_POWER|ADC_SPEEDL; //ADC 開(kāi)啟電源、轉(zhuǎn)換速度 1010 0000
        Delay(2);                                               
}
//Get ADC Result
uint GetADCResult(uchar ch)                                //獲取ADC結(jié)果
{
        ADC_CONTR=ADC_POWER|ADC_SPEEDL|ch|ADC_START;//啟動(dòng)轉(zhuǎn)換1010 1000
    _nop_();                        //延時(shí)確保正確讀到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ù)點(diǎn)
                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ù)

使用道具 舉報(bào)

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

#include

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

使用道具 舉報(bào)

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

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

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

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


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

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

/*************        以下宏定義用戶請(qǐng)勿修改        **************/
#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)        //自動(dòng)清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ù)。
// 參數(shù): ms,要延時(shí)的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í)間函數(shù)
{
        uint i;
        i = ((MAIN_Fosc / 100) * 104) / 140000L - 1;                //根據(jù)主時(shí)鐘來(lái)計(jì)算位時(shí)間
        while(--i);
}

//模擬串口發(fā)送
void        Tx1Send(uchar dat)                //9600,N,8,1                發(fā)送一個(gè)字節(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ù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 精品99爱视频在线观看 | 国产成人精品综合 | 日韩欧美中文字幕在线观看 | 日韩精品视频在线播放 | 精产嫩模国品一二三区 | 免费一区二区 | 精品一区二区三区四区五区 | 国产精品欧美一区喷水 | 一区二区三区久久 | 99久久中文字幕三级久久日本 | 久久精品国产99国产精品 | 日韩一二三区视频 | 精品国产乱码久久久久久丨区2区 | 日韩一区二区在线播放 | 国产精品二区三区在线观看 | 久久中文字幕一区 | 日韩国产黄色片 | 久久久久久久一区二区三区 | 午夜精品久久久久久久星辰影院 | 日本三级视频 | 亚洲综合久久网 | 一区二区三区在线看 | 成人影院一区二区三区 | 999热精品视频 | 亚洲播放 | 91久久国产综合久久 | 2018中文字幕第一页 | 久久免费精品 | 日韩激情一区 | 在线中文一区 | 精品国产一区二区三区久久狼黑人 | 中文在线a在线 | 91精品久久久久久久久久 | 亚洲导航深夜福利涩涩屋 | 91在线看片 | 日韩精品一区二区三区 | 色综合色综合色综合 | 97国产精品视频人人做人人爱 | 精品国产一区探花在线观看 | 天天久久 | 久久综合一区 |