找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2619|回复: 5
打印 上一主题 下一主题
收起左侧

为啥我这个单片机旋转LED程序显示出来的数字是倒着的,搞了半天都正不过来

[复制链接]
跳转到指定楼层
楼主


单片机源程序如下:
  1. #include "NEW_8051.H"
  2. #define uint unsigned int
  3. #define uchar unsigned char

  4. uchar code num[10][5]={
  5. {0x83,0x75,0x6d,0x5d,0x83},
  6.         {0xff,0xbd,0x01,0xfd,0xff},
  7.         {0xbd,0x79,0x75,0x6d,0x9d},
  8.         {0x7b,0x7d,0x5d,0x2d,0x73},
  9.         {0xe7,0xd7,0xb7,0x01,0xf7},
  10.         {0x1b,0x5d,0x5d,0x5d,0x63},
  11.         {0xc3,0xad,0x6d,0x6d,0x03},
  12.         {0x30,0x70,0x71,0x60,0x10},
  13.         {0x93,0x6d,0x6d,0x6d,0x93},
  14.         {0x90,0x6d,0x6d,0x6b,0x87}};

  15. //0~9字表                                            
  16.                         
  17. uchar code maohao[]=
  18. {0xff,0x93,0x93,0xff,0xff};/*":",0*/

  19. uchar code duanxian[]=

  20. {0xef,0xef,0xef,0xef,0xef};/*"-",0*/


  21. uchar n,second,minute,hour;//定义时分秒

  22. void delay(uint t)
  23. {
  24.         register uint bt;
  25.         for(;t;t--)
  26.                 for(bt=0;bt<25;bt++)
  27.                         ;
  28. } //延时函数

  29. void init()  
  30. {        
  31.     hour=11;
  32.     minute=12;
  33.     second=0;
  34.         TMOD=0x01;
  35.         TH0=(65536-50000)/256;
  36.         TL0=(65536-50000)%256;
  37.         EA=1;
  38.         ET0=1;
  39.          TR0=1;        
  40. }//初始化函数,开启定时器

  41. void display()
  42. {
  43.         char m;
  44.           if(n==20)     //延时1s
  45.     {
  46.         n=0;
  47.         second++;
  48.         if(second==60)   //秒到60
  49.         {
  50.             second=0;
  51.             minute++;
  52.             if(minute==60)  //分到60
  53.             {
  54.                  minute=0;
  55.                  hour++;
  56.                  if(hour==24)
  57.                                         hour=0;   //时到24
  58.             }        
  59.         }   
  60.     }//进位操作

  61.                 for(m=4;m>=0;m--)
  62.                         {P0=num[second%10][m];delay(2);}
  63.                 P0=0xff;
  64.                 delay(4);
  65. //显示秒个位

  66.                 for(m=4;m>=0;m--)
  67.                         {P0=num[second/10][m];delay(2);}
  68. //显示秒十位

  69.                 for(m=4;m>=0;m--)
  70.                         {P0=maohao[m];delay(2);}
  71. //显示":"

  72.                 for(m=4;m>=0;m--)
  73.                         {P0=num[minute%10][m];delay(2);}
  74.                 P0=0xff;
  75.                 delay(4);
  76. //显示分个位

  77.                 for(m=4;m>=0;m--)
  78.                         {P0=num[minute/10][m];delay(2);}
  79. //显示分十位        

  80.                 for(m=4;m>=0;m--)
  81.                         {P0=maohao[m];delay(2);}
  82. //显示":"

  83.                 for(m=4;m>=0;m--)
  84.                         {P0=num[hour%10][m];delay(2);}
  85.                 P0=0xff;
  86.                 delay(4);
  87. //显示时个位

  88.                 for(m=4;m>=0;m--)
  89.                         {P0=num[hour/10][m];delay(2);}
  90. //显示时十位

  91.                 P0=0xff;
  92.                 delay(10);
  93. //延时,保证一个周期

  94. }//显示函数


  95. void main()
  96. {
  97.         init();
  98.         while(1)
  99.                 display();
  100. }//一直显示,等待中断


  101. void T_0() interrupt 1
  102. {
  103.         TH0=(65536-50000)/256;
  104.         TL0=(65536-50000)%256;
  105.     n++;
  106. }//定时器0中断程序
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:143767 发表于 2021-6-2 18:12 | 只看该作者
可能是取模软件的设置问题,试试调节一下倒序选项
回复

使用道具 举报

板凳
ID:568565 发表于 2021-6-2 18:28 | 只看该作者
改取模或者硬件都行,如果有排线的话可以把P0口的线倒过来插
回复

使用道具 举报

地板
ID:849913 发表于 2021-6-2 19:10 | 只看该作者
把P0接口的线反插一下就好了
回复

使用道具 举报

5#
ID:762360 发表于 2021-6-2 21:13 | 只看该作者
取模的问题,反过来就行啊
回复

使用道具 举报

6#
ID:931825 发表于 2021-6-2 22:11 | 只看该作者
用一下反码看看
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表