[PIC®/AVR®/dsPIC®产品]

在利用74HC595来驱动数码管这一关就无法通过

[复制链接]
367|18
手机看帖
扫描二维码
随时随地手机跟帖
yinxiangh|  楼主 | 2022-12-4 14:18 | 显示全部楼层 |阅读模式
pic12f675与pic12f629两种不同型号的单片机共用一个说明书,675比629多了数模转换,功能要多一些,本人想利用675的数模转换来设计制作一个显示电压、电流、电量的多功能表,在利用74HC595来驱动数码管这一关就无法通过

使用特权

评论回复
yinxiangh|  楼主 | 2022-12-4 14:22 | 显示全部楼层
相同的程序用pic12f629则能够顺利通过

使用特权

评论回复
shimx| | 2022-12-4 14:24 | 显示全部楼层
可能是对pic12f675的设置没有对

使用特权

评论回复
yinxiangh|  楼主 | 2022-12-4 14:30 | 显示全部楼层

#include<pic.h>  //pic12f629通过,但pic12f765没有任何反应
__CONFIG(0x3F84);
//两块74HC595级联,前一块驱动段,后一块驱动位,驱动的是共阴四位数码管
//本程序依次驱动八位数码管,显示01234567,12345678,23456789,……,89AbCdEF,.....
#define SH_CP GPIO0  // 74HC595时钟输入
#define DS GPIO1  // 74HC595数据端口
#define ST_CP GPIO4  // 74HC595数据锁存
#define uchar unsigned char
#define uint unsigned int
void delay(uint);
void xians(uchar);

const uchar LED[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7d,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};//段选
const uchar WEI[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};  //位选

main()
{
uint x,y,z,m;
OPTION=0b10000000; //禁止弱上拉

WPU= 0x00; //关闭弱上拉

TRISIO=0; //IO 口做输出

CMCON=0x3f; // 设置全部为普通数字IO口 关闭所有比较器

GPIO=0x00; //端口0 输出低电平

while(1)
{
     for(x=0;x<17;x++)
   {  
     for(z=0;z<500;z++)
     {              
      for(y=0;y<8;y++)
      {  
      xians(WEI[y]);
      m=x+y;
      if(m<16);
       else m=m-16;
       xians(LED[m]);
      ST_CP=0;
       asm("NOP");
       asm("NOP");      
      ST_CP=1;
        asm("NOP");
        asm("NOP");
       ST_CP=0;
      }
     }
     delay(20);
  }   
}

}

void delay(uint x)  //短暂延时程序

{

uint a,b;

for(a=x;a>0;a--)

for(b=100;b>0;b--);

}
void xians(uchar udata)  //将数据写入74HC164
{
  uchar i;
   for (i=0;i<8;i++)  
  {
    if(udata&0x80)
    {
      DS=1;
     SH_CP=0;
    asm("NOP");
    asm("NOP");
    SH_CP=1;
    udata = udata<<1;
    }
    else
    {
     DS=0;
    SH_CP=0;
    asm("NOP");
    asm("NOP");
    SH_CP=1;
    udata = udata<<1;
    }

  }
}

使用特权

评论回复
heweibig| | 2022-12-4 14:33 | 显示全部楼层
将用于IO端口的AD功能关了就好了

使用特权

评论回复
yszong| | 2022-12-4 14:35 | 显示全部楼层
应该是初始化io的问题,都初始化为普通io。其他地方两者没啥不同的。

使用特权

评论回复
yinxiangh|  楼主 | 2022-12-4 14:37 | 显示全部楼层
谢谢指教,我找到了关闭AD功能的寄存器了:ANSEL将其设置为0x0c,问题得到解决,再次表示感谢,这个问题困扰我多日,又可以前进一步了。

使用特权

评论回复
yinxiangh 发表于 2022-12-4 14:37
谢谢指教,我找到了关闭AD功能的寄存器了:ANSEL将其设置为0x0c,问题得到解决,再次表示感谢,这个问题困扰 ...

说起来就是ad功能和初始化的问题吧,确实容易忽略

使用特权

评论回复
OKAKAKO| | 2022-12-25 13:14 | 显示全部楼层
yinxiangh 发表于 2022-12-4 14:37
谢谢指教,我找到了关闭AD功能的寄存器了:ANSEL将其设置为0x0c,问题得到解决,再次表示感谢,这个问题困扰 ...

建议楼主还是多看一下用户手册,确实里面有不同的地方,一般手册里面都会写使用过程,单功能实现了整合在一起就没问题了

使用特权

评论回复
tpgf| | 2023-1-4 08:49 | 显示全部楼层
无法通过的话 首先要确定是哪一级出现的问题

使用特权

评论回复
nawu| | 2023-1-4 09:40 | 显示全部楼层
完全可以不使用ad的采集啊 就用普通io口的功能吧

使用特权

评论回复
drer| | 2023-1-4 09:55 | 显示全部楼层
这两种单片机的引脚内部链接上有什么不同吗

使用特权

评论回复
zljiu| | 2023-1-4 10:08 | 显示全部楼层
在寄存器的配置里边关闭掉ad的功能 应该就好用了

使用特权

评论回复
kxsi| | 2023-1-4 10:20 | 显示全部楼层
相当于楼主只想用其中的第二功能 所以默认功能要关掉

使用特权

评论回复
tfqi| | 2023-1-4 10:35 | 显示全部楼层
也可以两个功能进行分时复用 这样就得不停的进行初始化

使用特权

评论回复
cashrwood| | 2023-1-9 17:22 | 显示全部楼层
这个有专用的数码管驱动程序的。              

使用特权

评论回复
wangdezhi| | 2023-1-9 17:32 | 显示全部楼层
你可能对数码管扫描不对吧              

使用特权

评论回复
mollylawrence| | 2023-1-11 20:28 | 显示全部楼层
74hc595可以实现的。              

使用特权

评论回复
mmbs| | 2023-1-12 16:44 | 显示全部楼层
数码管有什么问题?              

使用特权

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

本版积分规则

723

主题

7134

帖子

2

粉丝