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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2915|回復: 3
打印 上一主題 下一主題
收起左側

關于STC8單片機的AD電壓數碼管顯示轉換不出來

[復制鏈接]
跳轉到指定樓層
樓主
ID:265485 發表于 2021-3-31 23:54 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
求助哪位大哥解釋一下
#include "STC15F2Kxx.h"
#include "Delay.h"
#include "intrins.h"

#define uchar unsigned char       
#define uint unsigned int
       
#define ADC_POWER   0x80            //ADC電源控制位
#define ADC_FLAG    0x10            //ADC完成標志
#define ADC_START   0x08            //ADC起始控制位
#define ADC_SPEEDLL 0x00            //540個時鐘
#define ADC_SPEEDL  0x20            //360個時鐘
#define ADC_SPEEDH  0x40            //180個時鐘
#define ADC_SPEEDHH 0x60            //90個時鐘

void InitADC();
void Init();

uchar ADC_Value=0,Set,seconds=0,Minutes=10,tt;

uchar code  Tab0[] =
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//0、1、2、3、4、5、6、7、8、9的顯示碼
uchar code Tab1[]=                //定義數碼管數組,小數點
{0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF};

sbit KS1 = P1^0;               //數碼管1位選
sbit KS2 = P1^1;                //數碼管2位選
sbit KS3 = P1^2;                //數碼管3位選
sbit KS4 = P1^3;                //數碼管4位選

sbit LED = P5^5;               //LED指示燈
/*------------------------------------------------
mS延時函數,含有輸入參數 unsigned char t,無返回值
unsigned char 是定義無符號字符變量,其值的范圍是
0~255 這里使用晶振12M,精確延時請使用匯編
------------------------------------------------*///
void Delay(unsigned int x)                 ///////1ms延時
{
        unsigned char i,j;
        for(;x>0;x--)
  {
          for(i=10;i>0;i--)
                for(j=10;j>0;j--);
   }
}

void Display0()                        //顯示時鐘
{
if(Set==0)
                        {
                                P3=Tab0[ADC_RES/10];                //顯示秒的個位       
                                KS1=0;                                        //段選
                                Delay(10);                                        //延時
                                KS1=1;                                        //消隱

                                P3=Tab0[ADC_RES%10];                //顯示秒的十位
                                KS2=0;                                        //段選
                                Delay(10);                                        //延時
                                KS2=1;                                        //消隱

                                P3=Tab0[Minutes/10];                //顯示分的個位,需要加上小數點做分隔符
                                KS3=0;                                        //段選
                                Delay(10);                                        //延時
                                KS3=1;                                        //消隱

                                P3=Tab0[Minutes%10];                //顯示分的十位
                                KS4=0;                                        //段選
                                Delay(10);                                        //延時
                                KS4=1;                                        //消隱       
                        }
        else
          {
                    P3=Tab1[seconds/10];                //顯示秒的個位       
                                KS1=0;                                        //段選
                                Delay(10);                                        //延時
                                KS1=1;                                        //消隱

                                P3=Tab1[seconds%10];                //顯示秒的十位
                                KS2=0;                                        //段選
                                Delay(10);                                        //延時
                                KS2=1;                                        //消隱

                                P3=Tab1[Minutes/10];                //顯示分的個位,需要加上小數點做分隔符
                                KS3=0;                                        //段選
                                Delay(10);                                        //延時
                                KS3=1;                                        //消隱

                                P3=Tab1[Minutes%10];                //顯示分的十位
                                KS4=0;                                        //段選
                                Delay(10);                                        //延時
                                KS4=1;                                        //消隱       
               
                  }
}
/*******************************************************************************
* 函數名  : main
* 描述    : 主函數,用戶程序從main函數開始運行
* 輸入    : 無
* 輸出    : 無
* 返回值  : 無
* 說明    : 無
*******************************************************************************/
void main(void)
{
         
    P3M1 &= 0x00;
    P3M0 |= 0x00;
    P1M1 &= 0x00;
    P1M0 |= 0x00;
          P5M1 &= 0x00;
    P5M0 |= 0xFF;
    Init();
    Timer0_Init_Config();        //定時器0 16位自動重載模式初始配置
    InitADC();        //初始化ADC
//    Display0();       
    while(1)
    {
//                        LED=!LED;
                        Delay_Nms(200);
    }
}


/*******************************************************************************
* 函數名  : InitADC
* 描述    : 初始化ADC
* 輸入    : 無
* 輸出    : 無
* 返回值  : 無
* 說明    : 無
*******************************************************************************/
void InitADC()
{
    unsigned char ch;

    ch=0;
    P1ASF = 0x10;        //設置P1.0口為AD口
    ADC_RES = 0;        //清除結果寄存器
    ADC_CONTR = 0;
    ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC_START | ch;
    Delay_Nms(5);//延時500ms//ADC上電并延時
    EADC = 1;//使能ADC中斷
    EA=1;//使能總中斷
}

/*******************************************************************************
* 函數名  : ADC_ISR
* 描述    : ADC中斷服務函數
* 輸入    : 無
* 輸出    : 無
* 返回值  : 無
* 說明    : 無
*******************************************************************************/
void ADC_ISR() interrupt 5
{
    unsigned char ch;

    ADC_CONTR &= !ADC_FLAG;         //清除ADC中斷標志

    if(ADC_RES > 100)//A/D轉換結果高8位
    {
        //LED=1;        //點亮LED.P21
    }
    else
    {
        //LED=0;        //關閉LED.P21
    }

    ch=0;
    ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC_START | ch;
}
/*************************************************************************
**************************************************************************
******************************* 中斷初始化函數*****************************
**************************************************************************
***********************************************************************////
void Init()                                                         //中斷初始化函數
{
    EA=1;                                                         //開總中斷
    TMOD=0X11;                                                  //定時器工作方式選擇,定時器0和定時器1都選擇第1種工作方式
    TH0=(65536-10000)/256;                        //定時器0裝初值,定時50ms
    TL0=(65536-10000)%256;
    ET0=1;                                                        //開定時器0開關
    TR0=1;                                                           //開定時器0小開關

    TH1=(65536-10000)/256;                        //定時器1裝初值,定時50ms
    TL1=(65536-10000)%256;
    ET1=1;                                                          //開定時器1開關
    TR1=1;                                                        //關定時器1小開關
}

/*************************************************************************
******************************* 定時器1***********************************
***********************************************************************////
void Time1() interrupt 3                          //定時器1函數
{
        TH1=(65536-10000)/256;                        //重裝初值
        TL1=(65536-10000)%256;       
  Display0();                                //數碼管在定時器1里時時顯示時間                   
        tt++;
  if(tt>50)                                        //每溢出10次Time0_bit取反一次
          {          
      Set=1;                       
                        LED=1;                                          //0.5秒閃爍一次指示
     }
  if(tt>100)                                        //每溢出10次Time0_bit取反一次
          {
      tt=0;       
      Set=0;                       
                        LED=0;                                          //0.5秒閃爍一次指示
     }       
}

/*************************************************************************
******************************* 定時器0***********************************
***********************************************************************////
void Time0() interrupt 1                                         //定時器0函數
{       
        TH0=(65536-1000)/256;                                           //重裝初值
        TL0=(65536-1000)%256;
//        tt++;
//  if(tt>20)                                        //每溢出10次Time0_bit取反一次
//          {          
//      Set=1;                       
//                        LED=1;                                          //0.5秒閃爍一次指示
//     }
//  if(tt>40)                                        //每溢出10次Time0_bit取反一次
//          {
//      tt=0;       
//      Set=0;                       
//                        LED=0;                                          //0.5秒閃爍一次指示
//     }               
       
}

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

使用道具 舉報

沙發
ID:328014 發表于 2021-4-1 00:41 | 只看該作者
有可能是電路的問題,或者是短路 短路等,拍張板子運行的照片看看 什么情況
回復

使用道具 舉報

板凳
ID:65956 發表于 2021-4-1 08:19 | 只看該作者
你用的是STC15W及以前產品的ADC采集函數,這次的STC8是和以前任何一款不能兼容采集方式,所以你只要對照手冊,稍改一下就可以了,我也是這么處理的
回復

使用道具 舉報

地板
ID:213173 發表于 2021-4-1 12:01 | 只看該作者
STC8系列與15W系列的ADC相關寄存器有區別,不能直接套用15W系列的程序。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 美女二区 | 91免费看片 | 日韩精品一区二区三区在线播放 | 欧美精品网 | 精品久久久久久亚洲国产800 | 999国产精品视频 | 亚洲成人精品在线观看 | 黄色免费网站在线看 | a在线视频 | 国产99久久 | av手机免费在线观看 | 欧美一级欧美一级在线播放 | 国产精品资源在线 | 99精品国产一区二区青青牛奶 | 成人在线观看免费 | 国产性色视频 | 91成人在线视频 | 久久久久久国产一区二区三区 | 综合色婷婷| 天堂亚洲网 | 天天草草草 | 日本不卡免费新一二三区 | 午夜亚洲 | 欧美在线观看网站 | 国产精品亚洲精品日韩已方 | 中文字幕国产一区 | 精品一区二区久久久久久久网精 | 欧美午夜精品 | 日韩aⅴ片 | 伊人精品在线视频 | 在线播放国产一区二区三区 | 亚洲国产精品区 | 国产成人精品午夜 | 免费色网址 | 国产高清在线 | 国产一区二区三区四区在线观看 | 欧美a∨ | 免费一级淫片aaa片毛片a级 | 中文字幕高清免费日韩视频在线 | 91精品国产91久久久久青草 | 欧美日韩久久久 |