标题: 求大神解决单片机问题,小白一个 [打印本页]

作者: leel5211314    时间: 2015-10-21 23:05
标题: 求大神解决单片机问题,小白一个
想要实现数码管从1显示到9每隔一秒显示,程序和电路如图,程序编译成功,但就是实现不了功能

V40[P03BX%_$1ES_23})SQJ.png (27.62 KB, 下载次数: 75)

V40[P03BX%_$1ES_23})SQJ.png

OP]H37}E0WV}OLOO[~[[2XQ.png (16.92 KB, 下载次数: 73)

OP]H37}E0WV}OLOO[~[[2XQ.png

作者: 腾飞的龙    时间: 2015-10-22 08:37
数码管的段码对吗?位要加三极管驱动,要不就要把IO写成强推挽输出。
作者: 腾飞的龙    时间: 2015-10-22 08:40
这个程序你试试
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. #define p0 =p0
  6. #define p1 =p1
  7. #define p3 =p3
  8. uchar temp ,aa,num;
  9. sbit wela=P3^6;
  10. sbit dula=P1^4;
  11.                                         //带小数点段编码
  12. uchar code dianduma[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,
  13.                                         0x78,0x00,0x10};         
  14. //共阳段码
  15. uchar code table[18]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,
  16.                                         0x82,0xf8,0x80,0x90,0x88,0x83,
  17.                                         0xc6,0xa1,0x86,0x8e,0x89,0x8c};
  18. //位码
  19. uchar code tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xfb};
  20. void delay(uint z);
  21. void main()
  22. {  
  23.         num=0;
  24.         aa=0;
  25.         TMOD=0x01;
  26.         TH0=(65536-50000)/256;//初值
  27.         TL0=(65536-50000)%256;
  28.         EA=1;//总中断
  29.         ET0=1;//开外中断0
  30.         TR0=1;//开定时器
  31.         temp=0xfe;
  32.         P0=temp;
  33.         P1=0;
  34.         while(1)
  35.         {
  36.        
  37.                 delay(1000);
  38.             temp=_crol_(temp,1);//流水灯库函数
  39.             P0=temp;
  40.        
  41.         }               
  42. }

  43. void delay(uint z)//延时函数
  44. {
  45.         uint x,y;
  46.         for(x=z;x>0;x--)
  47.         for(y=120;y>0;y--);
  48. }
  49. void timer0() interrupt 1//中断函数
  50.         {
  51.                 TH0=(65536-50000)/256;
  52.                 TL0=(65536-50000)%256;
  53.                 aa++;
  54.                 if(aa==20)
  55.                 {
  56.                         aa=0;
  57.                         num++;
  58.                     if(num==17)
  59.                         num=0;
  60.                         P0=table[num];
  61.                 }
  62.         }
复制代码

作者: 腾飞的龙    时间: 2015-10-22 08:44
没有初始中断TNOD=0X01;EA=1;TR0=1;ET0=1;
作者: lele5211314    时间: 2015-10-22 14:59
把楼上的流水灯程序去掉即可!
作者: lele5211314    时间: 2015-10-22 15:01
也可以用延时函数
作者: hjjlovelf    时间: 2015-10-22 15:52
仿真是没有问题的。
作者: trm999    时间: 2015-10-22 16:09
一般的51芯片适合灌入电流,所以一般用共阳的LED
作者: CSWZ    时间: 2015-10-22 16:58
太强悍了 !~!还能自己编写驱动,。,,,学习ixa!
作者: liaolinhui    时间: 2015-10-22 19:09
while(1);这多了个号
作者: zuza    时间: 2015-10-22 19:44
第30行不是TII而是TH,定时计数器高八位




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1