找回密码
 立即注册

QQ登录

只需一步,快速开始

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

C语言show_second函数里面for循环 i!=0xff什么意思 还有定时初值怎么计算的

[复制链接]
回帖奖励 10 黑币 回复本帖可获得 5 黑币奖励! 每人限 1 次
跳转到指定楼层
楼主
ID:433060 发表于 2018-12-28 09:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
单片机源码:
  1. uchar time_buffer[]={0,0,0,0};
  2. uchar LCD_display_buffer[]={"00:00:00:00"};


  3. void show_second()
  4. {
  5. uchar i;
  6. lcd_pos(0x45);
  7. for(i=3;i!=0xff;i--)
  8. {
  9. LCD_display_buffer[2*i+1]=time_buffer[ i]/10+'0';[ i]
  10. LCD_display_buffer[2*i]=time_buffer[ i]%10+'0';[ i]
  11. lcd_wdat(LCD_display_buffer[2*i+1]);
  12. lcd_wdat(LCD_display_buffer[2*i]);
  13. lcd_wdat(":");
  14. }
  15. }

  16. void time0() interrupt 1 using 0
  17. {
  18. TH0=-10000/256;
  19. TL0=-10000%256;
  20. time_buffer[0]++;
  21. if (time_buffer[0]==100)
  22. {
  23. time_buffer[0]=0;
  24. time_buffer[1]++;
  25. }

  26. if (time_buffer[1]==60)
  27. {
  28. time_buffer[1]=0;
  29. time_buffer[2]++;
  30. }

  31. if (time_buffer[2]==60)
  32. {
  33. time_buffer[2]=0;
  34. time_buffer[3]++;
  35. }

  36. if (time_buffer[3]==24)
  37. {
  38. time_buffer[3]=0;
  39. }
  40. }


  41.   void display_string(uchar * str,uchar lineno)        
  42. {
  43. uchar k;
  44. lcd_pos(lineno);
  45. for(k=0;k<16;k++)
  46. lcd_wdat(str[k]);
  47. }

  48. void main()
  49. {
  50. uchar i;
  51. IE=0X82;
  52. TMOD=0X01;
  53. TH0=-10000/256;
  54. TL0=-10000%256;
  55. lcd_init();
  56. display_string(msg1,0x00);
  57. display_string(msg2,0x40);
  58. EA=1;
  59. ET0=1;
  60. while(1)
  61. {
  62. if(k1==0)
  63. {
  64. delay(100);
  65. i=++keycount;
  66. switch(i)
  67. {
  68. case1:
  69. case3:TR0=1;
  70.        display_string(prompts[i-1],0);
  71.            break;
  72. case2:
  73. case4:TR0=0;
  74.        display_string(prompts[i-1],0);
  75.            break;
  76.            default:TR0=0;
  77.            break;
  78. }
  79. while(k1==0);
  80. }
  81. else
  82. if(k2==0)
  83. {
  84. TR0=0;
  85. keycount=0;
  86. for(i=0;i<4;i++)
  87. time_buffer[ i]=0;[ i]
  88. display_string(msg1,0);
  89. delay(100);
  90. while(k2==0);
  91. }
  92. show_second();
  93. }               
  94. }
复制代码


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

使用道具 举报

沙发
ID:449525 发表于 2018-12-28 10:49 | 只看该作者
i初始值是3,不等于0xff,就执行下面的函数,执行完在自身加1
定时器,看你晶振用的多少,假设你用的12M,51单片机12个时钟周期,所以就是1M,1次就是1us。定时器往上计数,设置定时器几位的,16位的就是65535。
来个例子 定时50ms ,就是初始值15535,定时器16位。就这样,自己慢慢去看吧,基础东西。
回复

使用道具 举报

板凳
ID:433060 发表于 2018-12-28 11:50 来自手机 | 只看该作者
初值我会了  但是为啥必须不等于0xff  
回复

使用道具 举报

地板
ID:123289 发表于 2018-12-28 12:27 | 只看该作者
0xff  =256 ,不等于0xff  与 等于0xff,误差1,用什么取决于你计算的结果需要用多大的数字。  
回复

使用道具 举报

5#
ID:164602 发表于 2018-12-28 14:59 | 只看该作者
其实就是循环四次的意思
i=3,再i--,当i由3减少到0即循环了四次了,再减一次,就是255,即0xff,就不循环了
回复

使用道具 举报

6#
ID:456666 发表于 2018-12-28 15:12 | 只看该作者
i初始值是3,不等于0xff,就执行下面的函数,执行完在自身加1
定时器,看你晶振用的多少,假设你用的12M,51单片机12个时钟周期,所以就是1M,1次就是1us。定时器往上计数,设置定时器几位的,16位的就是65535。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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