找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机秒表程序有点问题,不知道怎么改了,求助

[复制链接]
跳转到指定楼层
楼主
ID:450993 发表于 2018-12-20 19:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #include <REGX51.H>
  2. #define uchar unsigned char
  3. #define uint unsigned int

  4. #define PIN0 P0;  //数码管段选端
  5. #define PIN1 P1;  //数码管位选端
  6. uint cnt=0;   //1s的次数的计数值
  7. uint num=0;     //进入中断次数的计数值(一次50ms)
  8. uint num1=0;  //0.001s的次数的计数值
  9. uint haomiaou=0;
  10. uchar code table[]={0x3f,0x06,0x5b,
  11. 0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f};
  12. //不带小数点的共阴极数码管段码0-9
  13. uchar code table1[]={0xbf,0x86,
  14. 0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
  15. //带小数点的共阴极数码管段码0-9
  16. char code table2[]={0xc0,0xf9,0xa4,
  17. 0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  18. //不带小数点的共阳极数码管段码0-9
  19. uint a,b,c,d,e,f,g,w;
  20. void Display(uint a,uint b,uint c,uint d,uint e,uint f,uint g,uint w);  //声明显示函数
  21. void InitTimer0();  //声明定时器初始化函数
  22. void Delayms(uint x);  //声明延时函数
  23. void main ()
  24. {
  25. uint haomiao,haomiao1,haomiao2,s,s1,min,min1,minu=0,shi,shiu=0;
  26. //分别是毫秒的个位,毫秒的十位,毫秒的百位,
  27. //秒的个位,秒的十位,分的个位,分的十位,时的各位

  28.     InitTimer0();   //初始化定时器
  29.      while(1)   //进入死循环
  30.   {
  31.   //Delayms(20); //延时消抖
  32.     num=0;      //进入中断次数的计数值(一次50ms)
  33.   num1=0;  //进入中断次数值清0
  34.   haomiaou=0; //毫秒的计数值清0
  35.   cnt=0;  //秒的计数值清0
  36.   minu=0;  //分的计数值清0
  37.   shiu=0;    //时的计数值清0
  38.   }
  39.   if(num1>=200)           //检测是否达到0.1s,(两百个50ms)
  40.   {
  41.    num1=0;    //进入中断次数值清零
  42.    haomiao++;  //毫秒秒的个位的计数值加1
  43.    if(haomiao>=10)  //若毫秒的个位计数值达到10
  44.    {
  45.     haomiao=0;       //清零毫秒的个位的计数值
  46.     num1=0;//进入中断次数值置0
  47.    }
  48.   }
  49.   
  50.       if(num>=20)  //判断计时时间是否达到1s(20个50ms)
  51.    {
  52.       cnt++;   //秒的计数值加1
  53.       if(cnt>=60) //判断是否达到60s
  54.       {
  55.         cnt=0;  //若达到60s,将秒的计数值置零
  56.          minu++;   //分的计数值加1
  57.    
  58.        TR0=!TR0;   //达到60分钟则关闭定时器并清零所有的计数值
  59.        num1=0;
  60.        num=0;
  61.       haomiao=0;
  62.       cnt=0;  
  63.      minu=0;
  64.       }
  65.     }
  66.   haomiao=haomiaou%10;   //从毫秒的计数值里面分离毫秒的个位
  67. haomiao1=haomiaou/10;   //从毫秒的计数值里面分离毫秒的十位
  68. haomiao2=haomiaou/100;   //从毫秒的计数值里面分离毫秒的百位
  69. s=cnt%10;   //从秒的计数值里面分离秒的个位
  70. s1=cnt/10;  //从秒的计数值里面分离秒的十位
  71. min=minu%10; //从分的计数值里面分离分的个位
  72. min1=minu/10; //从分的计数值里面分离分的十位
  73. Display(haomiao,haomiao1,haomiao2,s,s1,min,min1,shi);  //显示这8个数
  74. }
  75. void InitTimer0() //定时器初始化函数
  76. {
  77. TMOD=0x10; //选择定时器1的工作方式1
  78. TH0=(65536-45872)/65536;  //装初值(定时50ms),晶振11.0592MHz
  79. TL0=(65536-45872)%65536;
  80. EA=1;  //打开总中断
  81. ET0=1; //打开定时器中断
  82. TR0=0; //先不要启动定时器
  83. }
  84. void TI_time()interrupt 1  //定时器中断服务函数
  85. {
  86. TH0=(65536-45872)/65536;  //重装初值
  87. TL0=(65536-45872)%65536;
  88. num++;  //让进入中断次数值加1,用于判断是否达到1s
  89. num1++;  //让进入中断次数值加1,用于判断是否达到0.1s
  90. }
  91. void Delayms(uint x)   //延时xms
  92. {
  93. uint i,j;
  94. for(i=x;i>0;i--)
  95.   for(j=110;j>0;j--);
  96. }
  97. void Display(uint a,uint b,uint c,uint d,uint e,uint f,uint g,uint w) //定义显示函数
  98. {
  99. PIN0 = table[a];  //毫秒的个位的段选
  100. PIN1 = 0x7f;   //毫秒的个位的位选
  101. Delayms(5);

  102. PIN0=table1[b];  //毫秒的十位的段选
  103. PIN1=0xbf;   //毫秒的十位的位选
  104. Delayms(5);        

  105. PIN0=table1[c];  //毫秒的百位的段选
  106. PIN1=0xdf;   //毫秒的百位的位选
  107. Delayms(5);         

  108. PIN0=table[d]; //秒的个位的段选
  109. PIN1=0xef;   //秒的个位的位选
  110. Delayms(5);   

  111. PIN0=table1[e];  //秒的十位的段选
  112. PIN1=0xf7;   //秒的十位的位选
  113. Delayms(5);

  114. PIN0=table[f];  //分的个位的段选(带小数点)
  115. PIN1=0xfb;    //分的个位的位选
  116. Delayms(5);
  117.   
  118. PIN0=table1[g];  //分的十位的段选
  119. PIN1=0xfd;    //分的十位的位选
  120. Delayms(5);

  121. PIN0=table[w];  //时的个位的段选
  122. PIN1=0xfe;   //时的个位的位选
  123. Delayms(5);            
  124. }

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

使用道具 举报

沙发
ID:1 发表于 2018-12-20 22:06 | 只看该作者
您这个问题给的信息不全,估计是没人能回答得了的,先转移到冷门区了,自行点击编辑按钮补充一下吧,审核员会帮你重新转到热门问答区的
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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