打印

PIC单片机,AD程序问题请教,数码管显示不变化是什么...

[复制链接]
4475|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
416112364|  楼主 | 2021-11-29 16:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
416112364|  楼主 | 2021-11-30 09:20 | 只看该作者
a457083523 发表于 2021-11-30 09:14
你这是仿真的啊,会不会是电脑问题。

关注我的**:

是仿真的,电脑没啥问题呀,仿真结果就是:4位数码管显示的结果为闪烁的4个0

使用特权

评论回复
评论
416112364 2021-11-30 09:22 回复TA
仿真的结果来看,RC0~RC5引脚没输出,见了鬼了 
板凳
416112364|  楼主 | 2021-11-30 09:24 | 只看该作者
//我把代码上传一下,供大家来找原因。
#include <pic.h>
#include <math.h>
//#include <myfuncs1.h>
//#include <seg74.h>
#include <htc.h>
#define SEG_BITSEL_PORT PORTD                   //位选端口
#define SEG_BITSEL_PORT_DIR TRISD               //位选端口的方向寄存器
#define SEG_FONT_PORT PORTC                     //字形输出端口
#define SEG_FONT_PORT_DIR TRISC                 //字形输出端口的方向寄存器
#define DLY_MS 67
const char Seg7TableN[]={0b11000000,0b11111001,0b10100100,0b10110000,0b10011001,0b10010010,0b10000010,0b11111000,0b10000000,0b10010000};

__CONFIG(FOSC_HS & WDTE_ON & PWRTE_OFF & BOREN_ON & LVP_ON & CPD_OFF & WRT_OFF & CP_OFF);
unsigned int g_ADRTable[12] = {0};
unsigned char g_Count=0;
bit OverFlag = 0;//12位转换次数完成标志位清零;
void delayms (int ms);
void DisplayData (unsigned int iData);
void interrupt ISR (void)
{
    if ( ADIE && ADIF  )
    {
       ADIF = 0;
       g_ADRTable[g_Count]=(((unsigned int)ADRESH)<<8)+ADRESL;
       g_Count++;
       if(g_Count==12)
       {
           g_Count =0;
           OverFlag=1;//
       }
       else
       {
           GO_DONE = 1;//启动AD
       }      
    }
    else
       {
           while(1);
       }
}
void main(void)
{
    //void  DisplayData();
    char i=0,j=0;
    int tmp = 0;//
    int adc_v = 0;
    TRISA0 = 1;
    SEG_BITSEL_PORT_DIR = 0;//位选端口的方向寄存器,确定输出端口
    SEG_FONT_PORT_DIR = 0;//字形输出端口的方向寄存器,确定输出端口
    ADFM = 1;
    PCFG3:PCFG0 = 0000;
    ADCON0 = 0B11000001;
    ADIE = 1;
    ADIF = 0;
    PEIE = 1;
    GIE = 1;
    for(i=0;i<15;i++)
    {

    }
    GO_DONE = 1;
    while(GO_DONE)
    {
        if(OverFlag==1)
        {
            for(i=0;i<12;i++)//冒泡法排序
            {
                for(j=i+1;j<12;j++)
                {
                    if(g_ADRTable[i] > g_ADRTable[j])
                    {
                        tmp = g_ADRTable[i];
                        g_ADRTable[i] = g_ADRTable[j];
                        g_ADRTable[j] = tmp;
                    }
                }   
            }
        tmp = 0;
        for(i=2;i<10;i++)
        {
            tmp = tmp + g_ADRTable[i];            
        }
        tmp = tmp >>3;//将数按照 2进制像右移动.每向右移动一位,相当于 除2的n次幂
        adc_v = tmp;
        adc_v = ((long)adc_v*5000/1023);
        OverFlag = 0;
        GO_DONE = 1;
        }
        DisplayData(adc_v);
    }
}
void DisplayData (unsigned int iData )
{
    char i=0,j=0;//
    char k = 0,NumStr[ 5 ]={0,0,0,0,0};
    NumStr[1]=iData / 1000;//取整
    NumStr[2]=iData % 1000/100;
    NumStr[3]=iData % 100/10;
    NumStr[4]=iData % 10;
    for(i=0;i<10;i++)
    {
        SEG_BITSEL_PORT = k =0X01;
        for(j=0;j<=4;j++)
        {
            SEG_BITSEL_PORT = k;
            if(j==1)
            {
                SEG_FONT_PORT = Seg7TableN[NumStr[1]]&0b01111111;         
            }
            else
            {
                SEG_FONT_PORT = Seg7TableN[NumStr[j]];

            }
            delayms(5);
            k = k <<1;//把1向左移1为显示
        }
    }
}
void delayms (int ms)
{
    int i=0,j =0;
    for(i=0;i < ms;i++)
        for(j =0; j < DLY_MS;j++)
        {;}
}


使用特权

评论回复
地板
dirtwillfly| | 2021-12-3 14:48 | 只看该作者
没用过pic

使用特权

评论回复
5
flytianya2010| | 2021-12-3 15:15 | 只看该作者
学习学习。

使用特权

评论回复
6
一事无成就是我| | 2021-12-14 17:34 | 只看该作者
你这样能显示???

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:我所发表的回复,全是基于个人理解与思考,如果大家发现有错误的地方,请一定要指出来

21

主题

107

帖子

2

粉丝