数码管显示问题:写的c程序在运行时,2位数码管只能每一位单独显示,如果一起显示就出错

作者&投稿:双寇 (若有异议请与网页底部的电邮联系)
数码管显示问题:写的c程序在运行时,2位数码管只能每一...~


  #include reg52.h>
  #define uint unsigned int
  #define uchar unsigned char
  sbit PRESS1=P1^0;
  sbit PRESS2=P1^1;
  sbit PRESS3=P1^2;
  uint a[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0到9
  uint b[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
  int miao=45,fen=58,shi=15;
  uint jishu;
  uint miaog,miaos,feng,fens,shig,shis;
  int ji;
  void init()//初始化函数设置中断寄存器的值。
  {
  jishu=0;
  TMOD=0x01;
  TR0=1;
  ET0=1;
  EA=1;
  TH0=0x3c;
  TL0=0xb0;

  }
  void delay(x)//延时函数。
  {
  uint i,j;
  for(i=x;i>0;i--)
  for(j=120;j>0;j--);
  }
  void xian()//把时分秒送到数码管显示。
  {
  uint i;
  miaog=miao%10;
  miaos=miao/10;
  feng=fen%10;
  fens=fen/10;
  shig=shi%10;
  shis=shi/10;
  for(i=0;i8;i++)
  {
  switch(i)
  {
  case 0:P3=b[7];P2=a[miaog];break;
  case 1:P3=b[6];P2=a[miaos];break;
  case 2:P3=b[5];P2=0x40;break;
  case 3:P3=b[4];P2=a[feng];break;
  case 4:P3=b[3];P2=a[fens];break;
  case 5:P3=b[2];P2=0x40;break;
  case 6:P3=b[1];P2=a[shig];break;
  case 7:P3=b[0];P2=a[shis];break;
  }
  delay(1);
  };
  }
  void jiance()//检测键是否按下按不同键实现不同的处理。
  {
  if(PRESS1==0)
  {
  delay(2);
  if(PRESS1==0)
  {
  while(!PRESS1);
  ji++;
  if(ji>=4)
  ji=0;
  }
  }
  if(ji==1)
  {
  if(PRESS2==0)
  {
  delay(1);
  while(!PRESS2);
  miao++;
  if(miao>=60)
  {
  miao=0;
  fen++;
  }
  }
  if(PRESS3==0)
  {
  delay(1);
  while(!PRESS3);
  miao--;
  if(miao0)
  {
  miao=59;

  }
  }
  }
  if(ji==2)
  {
  if(PRESS2==0)
  {
  delay(1);
  while(!PRESS2);
  fen++;
  if(fen>=60)
  {
  fen=0;
  sh......顺一门有百福 平安二字值千金 万象更新

动态显示程序,必须不停的、反复的调用。
稍有停顿,就只能看见最后显示的一位字符。

解决方法,可以参考我以前回答的问题:
http://zhidao.baidu.com/question/408722818.html

while(1)
{
p20=1;
//p20=0;
//p21=1;
P0=gewei;
delay(300);
p20=0;

//p20=1;
//p21=0;
p21=1;
P0=shiwei;
delay(300);
p21=0;

}
显示这样改一下。 一般是开位选,送段(这2 个先后可以试),延时1~3ms,关位选 。再下一位。。。这样处理比较容易成功。

是延时太快了吧

扫描显示有问题 一般都是延时的事


单片机串口控制数码管显示两位数字时显示不对。
程序都是对的,你对16进制 10进制数。可能没理解透彻。。。你的数码管显示是10进制显示模式。所以出现了这种情况。你可以改成16进制显示。也可以自己发送数据的时候换算一下10进制应该是什么?是否跟显示的值一样?文本模式也是显示的对的。。。下面网址是ASII码表。你发送的文本1ASII码值就是49(10...

51单片机控制数码管显示不正常问题,为什么后面4位数码管1234和5678都...
授人以鱼不如授之以渔。先建立程序的一般结构,然后定义一个code数组,里边存放数码管显示0~9的数据,之后定义一个display显示函数,传递参数但不返回参数,然后将传递的参数(1234或5678)分解成4哥单个数,然后依次选择要显示的数码管和数据,紧接消影和简单暂时,这样一个数码管显示就完成了,之后三个...

单片机中二位数码管的显示,怎样用c语言写一段从0到99的程序啊?
公阳,P0.2,P0.3 分别通过PNP管接个位,十位数码管公共端,P1口输出数据,都是低电平有效 include <reg51.h> sbit shi=P0^3; \/\/十位公共极 sbit ge=P0^2; \/\/个位公共极 define Out P1 \/\/数据输出端 unsigned char tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8...

数码管动态显示
然后延时delay(5);执行到时(10),由于P0给出了ge的段码,而位码还没改变,这时候当然要在第一个数码管上显示第二个数码管的内容。执行到(14),位码改变,第二个数码管被选中,这时段码和位码共同作用,第二个数码管显示ge所对应的数字。然后延时。由于第一个数码管显示ge的时间很短,只有不到...

用数码管显示路灯亮的时间,用C语言写单片机程序
数码管显示路灯亮的时间是一个常见的应用场景,可以通过单片机来实现。下面是一个简单的C语言程序示例,用于控制数码管显示路灯亮的时间。```c include sbit D1 = P2^0; \/\/ 定义数码管引脚 sbit D2 = P2^1;sbit D3 = P2^2;sbit D4 = P2^3;void delay(unsigned int t) \/\/ 延时函数...

...我在做protues仿真数字温度电路时,数码管不显示数字?
这种情况,一般用排它法来找问题原因。你先写个最简单的数码管显示程序,就让数码管固定显示“123”之类的,来检查硬件电路和数码管驱动函数是否正确。如果显示空白,那就检查仿真电路是否正确,数码管是否接电源,有没有把单片机IO口搞错;如果有显示但显示的是乱码,那多半是把数码管共阴共阳搞反了,...

STC89C51单片机串口通讯 ,发送数据数码管不显示,大佬们帮忙看看代码哪里...
STC89C51单片机串口通讯 ,发送数据数码管不显示,是因为串口初始化程序错误,设置串口方式1,要写成一行,别分开写,那样写是错的。写成SCON=0x50;TMOD方式也错了,串口用定时器T1的方式2。应该是TMOD|=0x20;你这个程序,T0和串口初始化写成了两个子程序,最好不要这么写程序,直接在主程序中合并写一...

为什么Proteus中数码管显示不全,是不是89c51单片机自身存在的问题
动态显示的话Proteus中数码管显示有时会不全 和刷新频率有关 同时Proteus中数码管显示效果和实际有很大出入 静态显示的话是肯定没问题的啦

什么是数码管动态显示
P0 = dis_code[dis_index]; \/\/ 段码送P0口 P2 = (char) pow(2, dis_index); \/\/ 位码送P2口 delayms(255); } 再次下载到板上发现仍有问题, 即延时很小的时候显示混乱,但加大延时时间(如程序中的值)可以观查到数码管是按位正确显示的。另外用这种方法产生的代码量也很大(从写入速度看,很明显)。

我有一个病历管理系统,一点代码维护它就显示错误,自动退出系统是怎么...
6. 对库房的药品自动进行助记码的添加。7. 可实现病人电子照片及文书一类文件添加,从而进行察看、对比,及时了解病人的治疗效果。8. 对病人的治疗疗程实现自动提醒的功能,还可对诊疗的患者进行临床分析。9. 对一些禁忌药品的可进行提示警告。10. 病历、处方的自定义设置、打印预览和打印。免却手工写...

陆良县18799632307: c语言数码管显示问题 -
鲜兔芩连: void display(int n) { char b3, b2, b1; //定义两个有符号整形数b3,b2和b1 b3=n/100; b2=(n/10)%10;//这里应该这样才对不然会大于10的 b1=n%10;//百位 P0=seg7[b3]; // en3=0; //显示DS2 ms_delay(10); //延时 en3=1; //关闭DS2 //十位 P0=...

陆良县18799632307: 求单片机数码管显示C程序 -
鲜兔芩连: 这个就是数码管的动态刷新问题,你直接将要显示的数的对应数码管值从你的p1口输出,然后选择1或者2来显示,再做个几毫秒的延时,再将下一个要显示的数的对应数码管值从你的p1口输出,然后选择2或者1来显示,再做个几毫秒的延时,循环这个过程就行了.当然数码管的1、2也要接到单片机的输出口上,才能选择,而且还要考虑你的数码管是共阴还是共阳的接法,这样才能正确的选择p1口的输出电平和1、2两个接口的输入电平

陆良县18799632307: 51单片机问题 编写4个LED数码管循环显示2008的程序. 用C语言写.. -
鲜兔芩连: #include<reg51.h> //----------------------------------------------- void delay(unsigned int i) //延时 {unsigned char j;while(i--) for(j = 0; j < 115; j++); } //----------------------------------------------- void main(void) {unsigned char n1;unsigned char code SEG[] = {0xc0, ...

陆良县18799632307: C语言中无法控制数码管显示! -
鲜兔芩连: 首先从理论上说这个问题是不存在的,一定是硬件或软件上的原因.如果汇编可以,说明硬件没有问题,那就剩下软件.对应汇编的#10000000b ,C中应该是0x32,建议在包含头文件以后直接: include main() { P3=0x32; } 观察灯的状态,活用万用表直接测量引脚电压确定结果.你好:根据你补充的题目,我想谈一下单片机的学习问题,这是我自己的经历.单片机开始学的时候,如果想要详细了解其内部的工作原理,可以学习汇编,这样可以清楚的知道每一步的寄存器工作.但是从应用的角度来看,还是要用C语言,因为他会让你的思路更加清晰,让你的程序更加易懂.而且汇编能实现的功能,C语言同样可以实现.所以,为什么不选择C语言呢.

陆良县18799632307: C语言控制单片机共阳极数码管,出现问题 -
鲜兔芩连: 把num[4][4]的声明改成 uint code num[4][4]= { {0,1,2,3},{4,5,6,7},{8,9,10,11},{12,13,14,15},};

陆良县18799632307: 求助C语言写了一段控制数码管静态显示的程序,编译老是出错,哪位大哥进来帮帮忙啊,谢谢了!
鲜兔芩连: while(1){}最后的两个分号去掉 for(y=z;y&gt;0;y--) { };加上一个分号

陆良县18799632307: 单片机的数码管显示两位数的c出现了问题? -
鲜兔芩连: s1=0只是让 p0.0口为0 P0=0xfe 也是让 P0.0口为0,但还让别的口为高.你s1=0时,要让s2等等别的口为高才行.要是同时有两个或多个为0就不行了.

陆良县18799632307: C语言编程51单片机,启动时8个LED闪烁,按下K1数码管显示28,求大神给个编好的程序谢谢! -
鲜兔芩连: void onboot() {/* 执行LED灯闪烁*/} void ongpio8() {/* 执行K1数码管显示.例如 */}

陆良县18799632307: 用C语言编写数码管显示3的倍数(0 ,3,6,9.......)6段灯从右边开始亮 -
鲜兔芩连: bool check_multiple(int a, int b) { if (a == 0 || a%b == 0) return true; return false; } 至于你说的从右边开始,sorry, 不清楚,数据是怎么输入的 因为这个数组不太清楚是有序还是无序的排列 然后数码管显示的话,这样要查厂商的API了

陆良县18799632307: 51单片机用c语言编写一个程序,数码管显示从10到30,再从30到10. -
鲜兔芩连: 大概理解你的意思,是在数码管一次排列好这一句话,首先第一步需要做的是数码管的取模工作.#include//这边为了让你看的更容易,用的是单独操作,没有用总线sbitled1=P1^0;sbitled2=P1^1;sbitled3=P1^2;sbitled4=P1^3;sbitled5=P1^4;sbitled6=P1^5;sbitled7=P1^6;//看清楚自己的管脚,不一定对应,这里采用P0对应段选codeunsignedcharled_paly[5]={0x76,0x79,0x38,0x38,0x5c};//HELLOvoiddelay(unsignedintum)//延时函数{inti,j;for(i=0;i

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网