[STC单片机]

为了数码管增加亮度增加了三极管,但是为什么显示不正...

[复制链接]
2597|24
手机看帖
扫描二维码
随时随地手机跟帖
xichandoujigu|  楼主 | 2018-1-4 09:18 | 显示全部楼层 |阅读模式
本帖最后由 xichandoujigu 于 2018-1-4 09:22 编辑

我用protus画了个示意图,实际使用stc12c2052AD和5641BH和4个s9012三极管和四个10k的电阻,4个电阻接在基极上,没有画出来,省掉了。第一张是加了三极管的是增加亮度了,但是全部显示8,第二张是没有加三极管的能按正常的时间显示,但是亮度不够。第三张是加三级管的实际图




相关帖子

xichandoujigu|  楼主 | 2018-1-4 09:20 | 显示全部楼层
附程序代码如下。

                                                                                 
#include <REG51.H>
unsigned char Tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

sbit P37=P3^3;
sbit P36=P3^4;
sbit P35=P3^5;
sbit P34=P3^7;
char zhongduan_cnt;

void init()
{   
      TMOD=0x01; //定时器初始化  选择timer0做16位定时器  
       TH0=0x3c;//(65536-50000)/256;  
           TL0=0xb0;//(65536-50000)%256;     
        EA=1;    //开放中断
          ET0=1;  //开放timer0中断  
          TR0=1;  //启动timer0  
}

void timer0(void) interrupt 1
{

           TH0  = 0x3c;//(65536-50000)/256;  
        TL0  = 0xb0;//(65536-50000)%256;   
        zhongduan_cnt++;  
}

  //10ms延时子程序(12MHZ)
   void delay_ms(void)
{  
    unsigned char i,j,k;

         for(i=5;i>0;i--)                             
         for(j=4;j>0;j--)
         for(k=248;k>0;k--);

        }


void display(unsigned int fen_gao,fen_di,miao_gao,miao_di)

{
P1 = 0X00;
P37=1;  
P1=Tab[fen_gao];
delay_ms() ;
P37=0;

P1 = 0X00;
P36=1;  
P1=Tab[fen_di];
delay_ms() ;
P36=0;

P1 = 0X00;
P35=1;  
P1=Tab[miao_gao];
delay_ms() ;
P35=0;

P1 = 0X00;
P34=1;  
P1=Tab[miao_di];
delay_ms() ;
P34=0;

}

  /*********主程序********************/
void main() {

unsigned  int fen_gao;        //分十位
unsigned  int fen_di;        //分个位
unsigned  int miao_gao; //秒十位
unsigned  int miao_di;        // 秒个位


miao_di=0;
miao_gao=0;
fen_di=0;
fen_gao=0;
zhongduan_cnt=0;

P35=0;  
P37=0;
P34=0;
P36=0;

init();

while(1)
{
        if(zhongduan_cnt>=20) //如果到了1S
            {
               zhongduan_cnt=0; //清零
                miao_di++; //秒数累加

            }

if (miao_di>9)
{
    miao_gao=miao_gao+1;
    miao_di=0;}

if (miao_gao>5)
{
   fen_di=fen_di+1;
   miao_gao=0;
}

if (fen_di>9)
{
  fen_gao=fen_gao+1;
fen_di=0;}

display(fen_gao,fen_di,miao_gao,miao_di);

if         (miao_di==0)
  if         (miao_gao==0)
   if         (fen_di==0)
    if         (fen_gao==20)
        {
        while(1)
        {
        //        Play(1);
        }
        }

                }
                   }

使用特权

评论回复
liupk| | 2018-1-4 09:26 | 显示全部楼层
先第一步你先看看数码管能显示简单得不,先把所有的程序都删了,如果接了9012的话先  
P37=1;
P36=1;
P35=1;
P34=1;    P1 = 0x00;  就写这几句

使用特权

评论回复
xichandoujigu|  楼主 | 2018-1-4 09:40 | 显示全部楼层
本帖最后由 xichandoujigu 于 2018-1-4 09:43 编辑
liupk 发表于 2018-1-4 09:26
先第一步你先看看数码管能显示简单得不,先把所有的程序都删了,如果接了9012的话先  
P37=1;
P36=1;

能显示所有的8,但是亮度非常微弱。如果改成         P37=0;P36=0;P35=0;P34=0; P1 = 0x00;也是显示所有的8,比较亮,但是亮度不均匀。

使用特权

评论回复
liuchangyong| | 2018-1-4 09:42 | 显示全部楼层
xichandoujigu 发表于 2018-1-4 09:40
能显示所有的8,但是亮度非常微弱。

P37=0;
P36=0;
P35=0;
P34=0;    P1 = 0x00;  改成0

使用特权

评论回复
xichandoujigu|  楼主 | 2018-1-4 09:44 | 显示全部楼层

是显示所有的8,比较亮,但是亮度不均匀。

使用特权

评论回复
liupk| | 2018-1-4 09:45 | 显示全部楼层
xichandoujigu 发表于 2018-1-4 09:44
是显示所有的8,比较亮,但是亮度不均匀。

改成0以后显示的也是8么?

使用特权

评论回复
xichandoujigu|  楼主 | 2018-1-4 09:47 | 显示全部楼层
liupk 发表于 2018-1-4 09:45
改成0以后显示的也是8么?

是的,比较明显是8,写1之前非常微弱,只是基本确定显示8.

使用特权

评论回复
liupk| | 2018-1-4 09:47 | 显示全部楼层
xichandoujigu 发表于 2018-1-4 09:47
是的,比较明显是8,写1之前非常微弱,只是基本确定显示8.

你把P1改成P0试试

使用特权

评论回复
liupk| | 2018-1-4 09:51 | 显示全部楼层
P37=0;
P36=0;
P35=0;
P34=0;    P0 = 0x01;

使用特权

评论回复
xichandoujigu|  楼主 | 2018-1-4 09:53 | 显示全部楼层
这是 P37=0;P36=0;P35=0;P34=0; P1 = 0x00;的图片
如果P1改成P0,则不显示。

使用特权

评论回复
liupk| | 2018-1-4 09:55 | 显示全部楼层
xichandoujigu 发表于 2018-1-4 09:53
这是 P37=0;P36=0;P35=0;P34=0; P1 = 0x00;的图片
如果P1改成P0,则不显示。

P1改成P0你的接线也要改为P0口的

使用特权

评论回复
liupk| | 2018-1-4 09:56 | 显示全部楼层

P37=0;
P36=0;
P35=0;
P34=0;    P0 = 0x01;

使用特权

评论回复
xichandoujigu|  楼主 | 2018-1-4 10:01 | 显示全部楼层
liupk 发表于 2018-1-4 09:56
P37=0;
P36=0;
P35=0;

我用的是stc12c2052AD单片机,没有p0,的,不用三极管之前也是正常显示的哈。

使用特权

评论回复
liupk| | 2018-1-4 10:06 | 显示全部楼层
xichandoujigu 发表于 2018-1-4 10:01
我用的是stc12c2052AD单片机,没有p0,的,不用三极管之前也是正常显示的哈。 ...

能正常显示啊。。。。。。那你既然数码管是正常的那你看看程序吧

使用特权

评论回复
xichandoujigu|  楼主 | 2018-1-4 10:11 | 显示全部楼层
本帖最后由 xichandoujigu 于 2018-1-4 10:13 编辑

找到了,之前的选位P35;  P37;P34; P36; 在没加三极管之前赋0为关闭该选位,赋值1为开启选位,但是加了三极管后正好相反了,赋1为关闭该选位,赋值0为开启选位,改过来后一切正常,也非常亮,不过还没有想明白是什么原因。

使用特权

评论回复
gx_huang| | 2018-1-4 10:15 | 显示全部楼层
调啥程序呀,先把硬件原理图搞对。

使用特权

评论回复
yyml1| | 2018-1-4 11:21 | 显示全部楼层
PNP不就是0导通吗

使用特权

评论回复
xichandoujigu|  楼主 | 2018-1-4 22:24 | 显示全部楼层
yyml1 发表于 2018-1-4 11:21
PNP不就是0导通吗

谢谢!菜鸟,基础不牢。

使用特权

评论回复
最爱01间| | 2018-1-4 23:03 | 显示全部楼层
慢慢来

使用特权

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

本版积分规则

31

主题

96

帖子

2

粉丝