打印

单片机新手,请教个问题

[复制链接]
5444|34
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 tongshaoqiang 于 2012-12-4 22:39 编辑

各位前辈,刚入门51单片机,没想通用4位数码管显示十进制数字,感觉即使位选后,段选总是想通的,实现不了。大家给指点一下。
我想实现前两位数码管显示0~59每隔1s计数,没考虑好怎么实现。(下面我写的代码)哪位有耐心的帮俺指点一下啊,困惑了好几晚上了。:dizzy:
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
sbit pnp1=P1^0;
sbit pnp2=P1^1;
sbit pnp3=P1^2;
sbit pnp4=P1^3;
sbit D1=P2^0;
void delayms(uint);
void display(uchar,uchar);
uchar num,num1,shi,ge;
   void main()
{
TMOD=0x01;
EA=1;
ET0=1;
TR0=1;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
  while(1)
{
display(shi,ge);
  }
}
void display(uchar shi,uchar ge)
{
     P0=table[shi];
  // P0=0xff;
      pnp1=0;
      delayms(5);  //显示十位
  
      
       P0=table[ge];
       P0=0xff;
       pnp1=1;
       pnp2=0;
    // P0=0xff;
       delayms(5);  //显示ge位
      //pnp2=1;
}
void T0_time() interrupt 1
{

   TH0=(65536-45872)/256;
   TL0=(65536-45872)%256;
   num1++;
   if(num1==20)
   {
     num1=0;
     num++;
     if(num==60)
     num=0;
     shi=num/10;
     ge=num%10;
   
    }
}

void delayms(uint xms)
{         
  uint i,j;
  for(i=xms;i>0;i--)
  for(j=110;j>0;j--);
}

相关帖子

沙发
anazel| | 2012-12-2 23:46 | 只看该作者
没大看明白

使用特权

评论回复
板凳
chenyu988| | 2012-12-3 08:24 | 只看该作者
感觉即使位选后,段选总是想通的-->感觉即使位选后,段选总是先通的??

使用特权

评论回复
地板
tongshaoqiang|  楼主 | 2012-12-3 09:32 | 只看该作者
chenyu988 发表于 2012-12-3 08:24
感觉即使位选后,段选总是想通的-->感觉即使位选后,段选总是先通的??

即使位选后,点亮数码管时,两个数码管的段选总是相通的,所以控制个位,十位数字也跟着变。

使用特权

评论回复
5
T_X_T| | 2012-12-3 10:02 | 只看该作者
好好看看电路分析下,这个应该不难

使用特权

评论回复
6
hdl551890| | 2012-12-3 10:11 | 只看该作者
表达的不怎么清楚  没弄明白

使用特权

评论回复
7
W_Controller| | 2012-12-3 10:27 | 只看该作者
首先,你控制个位的时候,有没有关掉十位;
其次,你关掉十位,有没有灭余晖。

使用特权

评论回复
8
chen583128612| | 2012-12-3 13:10 | 只看该作者
顶一个:lol

使用特权

评论回复
9
zhang7676050| | 2012-12-3 13:20 | 只看该作者
有点不明白

使用特权

评论回复
10
alvin_zhou2009| | 2012-12-3 14:01 | 只看该作者
静态还是动态显示?如果是静态的话,你可以先将位选用硬件接通再试一下,然后再送段码一试。

使用特权

评论回复
11
qkhhyga| | 2012-12-3 15:26 | 只看该作者
要是单片机直接连LED数码管的话要通过扫描位选的方式来点亮数码管

使用特权

评论回复
12
tongshaoqiang|  楼主 | 2012-12-3 17:07 | 只看该作者
W_Controller 发表于 2012-12-3 10:27
首先,你控制个位的时候,有没有关掉十位;
其次,你关掉十位,有没有灭余晖。 ...

如果十位数跟个位数同时显示,比如11 12 13 14.......关掉十位的话,十位“1”显示不了。

使用特权

评论回复
13
wangyy608| | 2012-12-3 17:10 | 只看该作者
tongshaoqiang 发表于 2012-12-3 17:07
如果十位数跟个位数同时显示,比如11 12 13 14.......关掉十位的话,十位“1”显示不了。 ...

切换的速度足够快,超过人眼的反应时间久不存在这个问题

使用特权

评论回复
14
W_Controller| | 2012-12-3 17:20 | 只看该作者
tongshaoqiang 发表于 2012-12-3 17:07
如果十位数跟个位数同时显示,比如11 12 13 14.......关掉十位的话,十位“1”显示不了。 ...

数码管的这种显示称作动态扫描,原理就是利用人的视觉暂留现象;这个时间一般在5ms左右,人肉眼是感觉不出闪烁的。

使用特权

评论回复
15
nmji12| | 2012-12-3 18:52 | 只看该作者
你连问题都没表达清楚说明你对你碰到的问题的点都没把握住

使用特权

评论回复
16
xzwangc| | 2012-12-3 20:42 | 只看该作者
新概念51单片机C语言教程:入门、提高、开发、拓展全攻略------郭天祥
看看这本书也许对你有点帮助。

使用特权

评论回复
17
yuyi21ic| | 2012-12-3 21:31 | 只看该作者
除了7楼说的原因外,再用万用表检查下硬件连线是否有短路的地方。

使用特权

评论回复
18
tongshaoqiang|  楼主 | 2012-12-3 21:39 | 只看该作者
xzwangc 发表于 2012-12-3 20:42
新概念51单片机C语言教程:入门、提高、开发、拓展全攻略------郭天祥
看看这本书也许对你有点帮助。 ...

呵呵,我正在看。

使用特权

评论回复
19
icecut| | 2012-12-3 22:57 | 只看该作者
让1bit led交替显示2个数.速度快点,然后用手晃晃开发板,你就能发现神奇

使用特权

评论回复
20
W_Controller| | 2012-12-4 08:07 | 只看该作者
icecut 发表于 2012-12-3 22:57
让1bit led交替显示2个数.速度快点,然后用手晃晃开发板,你就能发现神奇

呵呵,这个就是摇摇棒的原理。

使用特权

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

本版积分规则

155

主题

993

帖子

5

粉丝