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

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

QQ登錄

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

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

用STC8G1K08單片機(jī)的P1.1口采集NTC溫度顯示000 還請(qǐng)大佬抽空幫忙看看問(wèn)題所在

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主



原理圖如上,測(cè)試STC8G1K08的NTC溫度采樣,3位數(shù)碼管始終顯示000。P5.4口接LED測(cè)試發(fā)現(xiàn)ADC轉(zhuǎn)換函數(shù)未采樣出數(shù)值。
單片機(jī)代碼如下:
#include    "STC8xxxx.h"       //包含此頭文件后,里面聲明的寄存器不需要再手動(dòng)輸入,避免重復(fù)定義
#include    "intrins.h"
#include    "math.h"
#define     MAIN_Fosc       24000000L   //定義主時(shí)鐘
#define    Timer0_Reload    (MAIN_Fosc / 1000)        //Timer 0 中斷頻率, 1000次/秒
#define    Timer1_Reload    (MAIN_Fosc / 1000)        //Timer 1 中斷頻率, 1000次/秒
#define     Vref     5


/****************************** 用戶定義宏 ***********************************/

#define ADCTIM (*(unsigned char volatile xdata *)0xfea8)

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


#define DIS_DOT     0x20
#define DIS_BLACK   0x10
#define DIS_        0x11

sbit DS = P1^7;                //串行輸入
sbit ST = P1^6;                //鎖存時(shí)鐘
sbit SH = P1^5;                //串行輸入時(shí)鐘
sbit COM1 = P1^2;            //數(shù)碼管公共端COM1
sbit COM2 = P1^3;            //數(shù)碼管公共端COM2
sbit COM3 = P1^4;            //數(shù)碼管公共端COM3
sbit LED = P5^4;
u16 temperature;

            //         0    1    2    3     4      5       6    7    8    9   0.   1.   2.   3.   4.   5.   6.   7.   8.   9.    A    B    C    D    E    F     
u8 SEG_Code[29] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x88,0x83,0xc6,0xa1,0x86,0x8e,        //共陽(yáng)數(shù)碼管段碼:0~F,   
                                        0xFF,0xBF,0x00};    //數(shù)碼管全滅(17),橫桿-(18),數(shù)碼管全亮(19)

void  delayms(u16 ms)        //簡(jiǎn)單延時(shí)函數(shù),自適應(yīng)主頻,1毫秒*ms
{
    u16 i;
    do{
            i = MAIN_Fosc / 15000;
            while(--i);
        }while(--ms);
}


/*************  本地變量聲明    **************/

bit B_1ms;          //1ms標(biāo)志
u16 msecond;

/*************  本地函數(shù)聲明    **************/
u16 get_temperature(u16 adc);
u16 Get_ADC10bitResult(u8 channel); //channel = 0~15
void Write595();
void DisplayScan();


/**********************************************/
void main(void)
{
    u16 j;
    P1M1 = 0x03;P1M0 = 0x1C;        //設(shè)置P1口模式 00:準(zhǔn)雙向口 01:推挽輸出 10:高阻輸入 11:開(kāi)漏輸出
    P3M1 = 0x14;P3M0 = 0x28;        //設(shè)置P3口模式 00:準(zhǔn)雙向口 01:推挽輸出 10:高阻輸入 11:開(kāi)漏輸出  0001 0100      
    P5M1 = 0x00;P5M0 = 0x10;        //設(shè)置P5口模式 00:準(zhǔn)雙向口 01:推挽輸出 10:高阻輸入 11:開(kāi)漏輸出  0010 1000

        ADC_CONTR = 0x81;
    P_SW2 |= 0x80;
        ADCTIM = 0x3f;                //設(shè)置 ADC 內(nèi)部時(shí)序,ADC采樣時(shí)間建議設(shè)最大值
        P_SW2 &= 0x7f;
        ADCCFG = 0x2f;                //設(shè)置 ADC 時(shí)鐘為系統(tǒng)時(shí)鐘/2/16/16
        ADC_CONTR |= 0x80; //使能 ADC 模塊

    AUXR = 0x80;    //Timer0 set as 1T, 16 bits timer auto-reload,
    TH0 = (u8)(Timer0_Reload / 256);
    TL0 = (u8)(Timer0_Reload % 256);
    ET0 = 1;    //Timer0 interrupt enable
    TR0 = 1;    //Tiner0 run
    EA = 1;     //打開(kāi)總中斷
    LED = 0;

    while(1)
    {
        if(B_1ms)   //1ms到
        {
            B_1ms = 0;
            if(++msecond >= 300)    //300ms到
            {
                msecond = 0;

                j = Get_ADC10bitResult(1);  //參數(shù)0~15,查詢方式做一次ADC, 返回值就是結(jié)果, == 1024 為錯(cuò)誤

                if(j < 1024)
                    temperature = get_temperature(j); //計(jì)算溫度值
            }
        }

    }
}
/**********************************************/

//========================================================================
// 函數(shù): u16 Get_ADC10bitResult(u8 channel)
// 描述: 查詢法讀一次ADC結(jié)果.
// 參數(shù): channel: 選擇要轉(zhuǎn)換的ADC.
// 返回: 10位ADC結(jié)果.
// 版本: V1.0, 2012-10-22
//========================================================================
u16 Get_ADC10bitResult(u8 channel)  //channel = 0~15
{  
    u16 ADC_Data = 0;
    ADC_RES = 0;
    ADC_RESL = 0;

    ADC_CONTR = (ADC_CONTR & 0xF0) | 0x40 | channel;    //啟動(dòng) AD 轉(zhuǎn)換
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    ADC_CONTR|=0x01;
    while((ADC_CONTR & 0x20) == 0)  ;   //wait for ADC finish
    ADC_CONTR &= ~0x20;     //清除ADC結(jié)束標(biāo)志
    ADC_Data = ((u16)(ADC_RES << 8) | ADC_RESL);
    if(ADC_Data != 0)
        LED = 1;
    return ADC_Data;
}

void Write595(u8 dat)                  //向595寫數(shù)據(jù)函數(shù)
{
    u16 i;
    u8 datcode;
    datcode = SEG_Code[dat];           //十進(jìn)制數(shù)轉(zhuǎn)段碼
    for(i = 0;i < 8;i++)               //寫數(shù)據(jù)
    {
        SH = 0;                        //拉低串行輸入時(shí)鐘SCLK
        DS = datcode & 0x80;           //取最高位
        SH = 1;                        //SCKL時(shí)鐘上升沿,數(shù)據(jù)存移位寄存器
     datcode <<= 1;                    //每次一位
    }
    ST = 0;                            //拉低ST時(shí)鐘
    ST = 1;                            //ST時(shí)鐘上升沿,更新輸出存儲(chǔ)器數(shù)據(jù)
}

//顯示掃描函數(shù)
void DisplayScan(void)
{   
    while(1)
    {
        Write595((u8)(temperature%1000/100));     //顯示00-999計(jì)數(shù)百位
        COM1 = 0;
        COM2 = 0;
        COM3 = 1;                    //共陽(yáng)極數(shù)碼管,公共端給高電平點(diǎn)亮,點(diǎn)亮數(shù)碼管左起第1位
        delayms(3);                                    //延時(shí)3毫秒

        Write595((u8)(temperature%100/10)+10);    //顯示00-999計(jì)數(shù)十位
        COM1 = 0;
        COM2 = 1;
        COM3 = 0;                    //共陽(yáng)極數(shù)碼管,公共端給高電平點(diǎn)亮,點(diǎn)亮數(shù)碼管左起第2位
        delayms(3);                                    //延時(shí)3毫秒

        Write595((u8)(temperature%10));           //顯示00-999計(jì)數(shù)個(gè)位
        COM1 = 1;
        COM2 = 0;
        COM3 = 0;                    //共陽(yáng)極數(shù)碼管,公共端給高電平點(diǎn)亮,點(diǎn)亮數(shù)碼管左起第3位
        delayms(3);                                    //延時(shí)3毫秒        
    }
}

//  MF52E 10K at 25, B = 3950, ADC = 12 bits
u16 code temp_table[]={
        140,    //;-40  0
        149,    //;-39  1
        159,    //;-38  2
        168,    //;-37  3
        178,    //;-36  4
        188,    //;-35  5
        199,    //;-34  6
        210,    //;-33  7
        222,    //;-32  8
        233,    //;-31  9
        246,    //;-30  10
        259,    //;-29  11
        272,    //;-28  12
        286,    //;-27  13
        301,    //;-26  14
        317,    //;-25  15
        333,    //;-24  16
        349,    //;-23  17
        367,    //;-22  18
        385,    //;-21  19
        403,    //;-20  20
        423,    //;-19  21
        443,    //;-18  22
        464,    //;-17  23
        486,    //;-16  24
        509,    //;-15  25
        533,    //;-14  26
        558,    //;-13  27
        583,    //;-12  28
        610,    //;-11  29
        638,    //;-10  30
        667,    //;-9   31
        696,    //;-8   32
        727,    //;-7   33
        758,    //;-6   34
        791,    //;-5   35
        824,    //;-4   36
        858,    //;-3   37
        893,    //;-2   38
        929,    //;-1   39
        965,    //;0    40
        1003,   //;1    41
        1041,   //;2    42
        1080,   //;3    43
        1119,   //;4    44
        1160,   //;5    45
        1201,   //;6    46
        1243,   //;7    47
        1285,   //;8    48
        1328,   //;9    49
        1371,   //;10   50
        1414,   //;11   51
        1459,   //;12   52
        1503,   //;13   53
        1548,   //;14   54
        1593,   //;15   55
        1638,   //;16   56
        1684,   //;17   57
        1730,   //;18   58
        1775,   //;19   59
        1821,   //;20   60
        1867,   //;21   61
        1912,   //;22   62
        1958,   //;23   63
        2003,   //;24   64
        2048,   //;25   65
        2093,   //;26   66
        2137,   //;27   67
        2182,   //;28   68
        2225,   //;29   69
        2269,   //;30   70
        2312,   //;31   71
        2354,   //;32   72
        2397,   //;33   73
        2438,   //;34   74
        2479,   //;35   75
        2519,   //;36   76
        2559,   //;37   77
        2598,   //;38   78
        2637,   //;39   79
        2675,   //;40   80
        2712,   //;41   81
        2748,   //;42   82
        2784,   //;43   83
        2819,   //;44   84
        2853,   //;45   85
        2887,   //;46   86
        2920,   //;47   87
        2952,   //;48   88
        2984,   //;49   89
        3014,   //;50   90
        3044,   //;51   91
        3073,   //;52   92
        3102,   //;53   93
        3130,   //;54   94
        3157,   //;55   95
        3183,   //;56   96
        3209,   //;57   97
        3234,   //;58   98
        3259,   //;59   99
        3283,   //;60   100
        3306,   //;61   101
        3328,   //;62   102
        3351,   //;63   103
        3372,   //;64   104
        3393,   //;65   105
        3413,   //;66   106
        3432,   //;67   107
        3452,   //;68   108
        3470,   //;69   109
        3488,   //;70   110
        3506,   //;71   111
        3523,   //;72   112
        3539,   //;73   113
        3555,   //;74   114
        3571,   //;75   115
        3586,   //;76   116
        3601,   //;77   117
        3615,   //;78   118
        3628,   //;79   119
        3642,   //;80   120
        3655,   //;81   121
        3667,   //;82   122
        3679,   //;83   123
        3691,   //;84   124
        3702,   //;85   125
        3714,   //;86   126
        3724,   //;87   127
        3735,   //;88   128
        3745,   //;89   129
        3754,   //;90   130
        3764,   //;91   131
        3773,   //;92   132
        3782,   //;93   133
        3791,   //;94   134
        3799,   //;95   135
        3807,   //;96   136
        3815,   //;97   137
        3822,   //;98   138
        3830,   //;99   139
        3837,   //;100  140
        3844,   //;101  141
        3850,   //;102  142
        3857,   //;103  143
        3863,   //;104  144
        3869,   //;105  145
        3875,   //;106  146
        3881,   //;107  147
        3887,   //;108  148
        3892,   //;109  149
        3897,   //;110  150
        3902,   //;111  151
        3907,   //;112  152
        3912,   //;113  153
        3917,   //;114  154
        3921,   //;115  155
        3926,   //;116  156
        3930,   //;117  157
        3934,   //;118  158
        3938,   //;119  159
        3942    //;120  160
};

/********************  計(jì)算溫度 ***********************************************/
// 計(jì)算結(jié)果: 0對(duì)應(yīng)-40.0度, 400對(duì)應(yīng)0度, 625對(duì)應(yīng)25.0度, 最大1600對(duì)應(yīng)120.0度.
// 為了通用, ADC輸入為12bit的ADC值.
// 電路和軟件算法設(shè)計(jì): Coody
/**********************************************/

#define     D_SCALE     10      //結(jié)果放大倍數(shù), 放大10倍就是保留一位小數(shù)
u16 get_temperature(u16 adc)
{
    u16 code *p;
    u16 i;
    u8  j,k,min,max;

    adc = 1024 - adc;   //Rt接地
    p = temp_table;
    if(adc < p[0])      return (0xfffe);
    if(adc > p[160])    return (0xffff);

    min = 0;        //-40度
    max = 160;      //120度

    for(j=0; j<5; j++)  //對(duì)分查表
    {
        k = min / 2 + max / 2;
        if(adc <= p[k]) max = k;
        else            min = k;
    }
         if(adc == p[min])  i = min * D_SCALE;
    else if(adc == p[max])  i = max * D_SCALE;
    else    // min < temp < max
    {
        while(min <= max)
        {
            min++;
            if(adc == p[min])   {i = min * D_SCALE; break;}
            else if(adc < p[min])
            {
                min--;
                i = p[min]; //min
                j = (adc - i) * D_SCALE / (p[min+1] - i);
                i = min;
                i *= D_SCALE;
                i += j;
                break;
            }
        }
    }
    return i;
}




/********************** Timer0 1ms中斷函數(shù) ************************/
void timer0 (void) interrupt 1
{
    DisplayScan();  //1ms掃描顯示一位
    B_1ms = 1;      //1ms標(biāo)志
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏4 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:213173 發(fā)表于 2023-4-27 06:05 | 只看該作者
由于你DisplayScan函數(shù)中用了死循環(huán)while(1)并放在中斷中運(yùn)行,一旦進(jìn)入中斷就再也出不來(lái)。
回復(fù)

使用道具 舉報(bào)

板凳
ID:155507 發(fā)表于 2023-4-27 08:27 | 只看該作者
你的顯示掃描函數(shù)有問(wèn)題。


//顯示掃描函數(shù)
void DisplayScan(void)
{   
    while(1) <---------------- 進(jìn)了中斷,就不出來(lái)了。
    {
        Write595((u8)(temperature%1000/100));     //顯示00-999計(jì)數(shù)百位
        COM1 = 0;
        COM2 = 0;
        COM3 = 1;                    //共陽(yáng)極數(shù)碼管,公共端給高電平點(diǎn)亮,點(diǎn)亮數(shù)碼管左起第1位
        delayms(3);                                    //延時(shí)3毫秒
/********************** Timer0 1ms中斷函數(shù) ************************/
void timer0 (void) interrupt 1
{
    DisplayScan();  //1ms掃描顯示一位
    B_1ms = 1;      //1ms標(biāo)志
}
回復(fù)

使用道具 舉報(bào)

地板
ID:1034262 發(fā)表于 2023-4-27 10:10 | 只看該作者
因?yàn)槟愕某绦蛴肋h(yuǎn)在中斷里調(diào)用的 DisplayScan(),不退出,根本就沒(méi)有運(yùn)行其余程序。
回復(fù)

使用道具 舉報(bào)

5#
ID:883242 發(fā)表于 2023-4-27 15:09 | 只看該作者
運(yùn)算放主循環(huán)里面,中斷只負(fù)責(zé)顯示好了,最基本的編程思路都不對(duì)。
回復(fù)

使用道具 舉報(bào)

6#
ID:608427 發(fā)表于 2023-4-27 22:47 | 只看該作者
wulin 發(fā)表于 2023-4-27 06:05
由于你DisplayScan函數(shù)中用了死循環(huán)while(1)并放在中斷中運(yùn)行,一旦進(jìn)入中斷就再也出不來(lái)。

大佬 感激不盡 把掃描顯示調(diào)用從中斷揪到主函數(shù) 并且去掉其中的while(1)完美解決問(wèn)題
回復(fù)

使用道具 舉報(bào)

7#
ID:608427 發(fā)表于 2023-4-27 22:48 | 只看該作者
angmall 發(fā)表于 2023-4-27 08:27
你的顯示掃描函數(shù)有問(wèn)題。

大佬 感激不盡 問(wèn)題解決了
回復(fù)

使用道具 舉報(bào)

8#
ID:608427 發(fā)表于 2023-4-27 22:48 | 只看該作者
coody_sz 發(fā)表于 2023-4-27 10:10
因?yàn)槟愕某绦蛴肋h(yuǎn)在中斷里調(diào)用的 DisplayScan(),不退出,根本就沒(méi)有運(yùn)行其余程序。

大佬 感激不盡 問(wèn)題解決了
回復(fù)

使用道具 舉報(bào)

9#
ID:608427 發(fā)表于 2023-4-27 22:49 | 只看該作者
Hephaestus 發(fā)表于 2023-4-27 15:09
運(yùn)算放主循環(huán)里面,中斷只負(fù)責(zé)顯示好了,最基本的編程思路都不對(duì)。

感謝大佬提點(diǎn) 問(wèn)題已經(jīng)解決了
回復(fù)

使用道具 舉報(bào)

10#
ID:1056945 發(fā)表于 2023-9-20 20:19 | 只看該作者
兄弟,求完整程序包
回復(fù)

使用道具 舉報(bào)

11#
ID:479851 發(fā)表于 2024-9-19 20:05 | 只看該作者
鐵汁,有沒(méi)有完整程序包拿來(lái)研究研究
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日韩欧美国产精品一区二区三区 | 国产一区二区三区网站 | 精精国产xxxx视频在线播放 | 亚洲欧美精 | jav成人av免费播放 | 欧美三级免费观看 | 一区二区在线看 | 国产精品1区2区3区 欧美 中文字幕 | 国产精品2区 | 国产福利91精品一区二区三区 | 黄色在线观看网址 | 欧美日韩国产高清 | 亚洲精品区 | 成人一区二区在线 | 国产成人免费视频网站高清观看视频 | 欧美阿v | 欧美一区二区三区视频 | 久久久久久久久久久一区二区 | 91看片网站| 中文字幕在线三区 | 91精品国产91久久久久久丝袜 | 99精品国自产在线观看 | 日韩欧美成人一区二区三区 | 欧美日产国产成人免费图片 | 欧美日韩视频在线播放 | 精品一区二区电影 | 视频一区二区国产 | 在线视频一区二区三区 | 亚洲在线一区 | 亚洲精品在线免费观看视频 | 一区二区国产在线观看 | 国产成人在线视频免费观看 | 日韩精品一区二区三区视频播放 | 天堂一区二区三区 | 欧美一区二区三区视频 | 中文字幕一页二页 | 国产精品黄色 | 91精品国产色综合久久 | 亚洲国产福利视频 | 久久国产精品视频 | 日日操操|