打印

关于89c52单片机的IO输出电压

[复制链接]
4845|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
rr_tm_520|  楼主 | 2011-4-11 11:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

这是原理图,SR42063是4位共阴数码管,为什么我这个不可以让数码管显示0-F,即使你想P0口写数据,数码管的显示也不变,我用万用表检测P0 口电压的时候电压很低,甚至有些是几毫伏(P0口已经接上拉电阻 10K)  然后我给P0 口写0xff的时候P0 口有几个IO 口电压还是只有几毫伏。这是怎么回事啊   我都接了上啦电阻的啊   
  这是让数码管显示数字的程序


  #include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int

sbit SDATA_595=P2^0 ; //串行数据输入
sbit HC595_OE=P2^1; //输出使能端,高电平时  禁止输出
sbit RCK_595=P2^2 ; //输出锁存器控制脉冲 (上升沿时移位寄存器的数据进入数据存储寄存器,下降沿时存储寄存器数据不变。
// 通常将RCK置为低电平,当移位结束后,在RCK端产生一个正脉冲(5V时,大于几十纳秒就行了。通常都选微秒级),更新显示数据)
sbit SCLK_595=P2^3 ; //移位时钟脉冲
//上升沿时数据寄存器的数据移位。QA-->QB-->QC-->...-->QH;下降沿移位寄存器数据不变。(脉冲宽度:5V时,大于几十纳秒就行了。通常都选微秒级
sbit HC595_MR=P2^4; //595复位端,低电平复位 一般接到VCC
sbit P25=P2^5;
sbit P26=P2^6;
unsigned char code Led_Table[]={0xc0,0xf9,0xa4,0xb0, // 0, 1, 2, 3
    0x99,0x92,0x82,0xf8,0x80,0x90, 0x88,0x83,0xc6,0xa1,0x86,0x8e};// 4, 5, 6, 7, 8, 9, off

void delays()
{
uint b,c;
for(b=100;b>0;b--)
  for(c=1000;c>0;c--);
   

  
}

//function
void Display(unsigned char Num);
void Delay(unsigned int TotalTime);
unsigned char KeyScan();
//varible
unsigned char temp;
unsigned char Num;
unsigned char ret=0;


void delay(unsigned int TotalTime)
{
unsigned i,j;
for(i=0;i<TotalTime;i++)
for(j=0;j<114;j++);
}
/********************************************************/
/* *//*将显示数据送入74HC595内部移位寄存器 *//* */
/********************************************************/
void WR_595(uchar date)
{
     uchar j;
      for (j=0;j<8;j++)
     {
      if((date<<j) & 0x80)
   SDATA_595=1;
   else
   SDATA_595=0;
      SCLK_595=0;                     //上升沿发生移位
       _nop_();
       _nop_();
      SCLK_595=1;
     }        
}
/********************************************************/
/* */
/*将移位寄存器内的数据锁存到输出寄存器并显示 *//* */
/********************************************************/
void OUT_595(void)
{
RCK_595=0 ;
_nop_() ;
_nop_() ;
RCK_595=1 ; //上升沿将数据送到输出锁存器
_nop_() ;
_nop_() ;
_nop_() ;
RCK_595=0 ;
}
void main(void)
{
SCLK_595=0 ;
RCK_595=1 ;
HC595_MR=1;
HC595_OE=0;
// temp = 0x
while(ret++<16)
{

  
  WR_595(0x00) ;
  OUT_595() ;
  delays() ;
  P25=0; //低表示选中,为1表示O端为高组态
  P26=1;  //为高表示O随着D变而变,为0则锁存住原电平。
  P0=Led_Table[ret];
  delays() ;
  if(ret == 16)
  ret=0;
  P1=0X00;
}
}
希望各位指点迷津

相关帖子

沙发
rr_tm_520|  楼主 | 2011-4-11 11:45 | 只看该作者
还有 我给所有单片机IO口写高电平的时候  也有很多IO 口电压很低  为什么啊

使用特权

评论回复
板凳
datouyuan| | 2011-4-11 11:52 | 只看该作者
看不到图。

使用特权

评论回复
地板
免证入网| | 2011-4-11 12:10 | 只看该作者
看不到图,发光二极管导通电压按2伏算,驱动电流3毫安。按理说亮了。

使用特权

评论回复
5
Step1toStep5| | 2011-4-11 12:13 | 只看该作者
:sleepy:重新上图吧

使用特权

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

本版积分规则

个人签名:海量的嵌入式,单片机,机器人资料!!! http://item.taobao.com/item.htm?id=9007036584 http://item.taobao.com/item.htm?id=9005706846

28

主题

56

帖子

1

粉丝