标题: C语言show_second函数里面for循环 i!=0xff什么意思 还有定时初值怎么计算的 [打印本页]

作者: 825825    时间: 2018-12-28 09:21
标题: C语言show_second函数里面for循环 i!=0xff什么意思 还有定时初值怎么计算的
单片机源码:
  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. }
复制代码



作者: 周超然    时间: 2018-12-28 10:49
i初始值是3,不等于0xff,就执行下面的函数,执行完在自身加1
定时器,看你晶振用的多少,假设你用的12M,51单片机12个时钟周期,所以就是1M,1次就是1us。定时器往上计数,设置定时器几位的,16位的就是65535。
来个例子 定时50ms ,就是初始值15535,定时器16位。就这样,自己慢慢去看吧,基础东西。
作者: 825825    时间: 2018-12-28 11:50
初值我会了  但是为啥必须不等于0xff  
作者: yzwzfyz    时间: 2018-12-28 12:27
0xff  =256 ,不等于0xff  与 等于0xff,误差1,用什么取决于你计算的结果需要用多大的数字。  
作者: HC6800-ES-V2.0    时间: 2018-12-28 14:59
其实就是循环四次的意思
i=3,再i--,当i由3减少到0即循环了四次了,再减一次,就是255,即0xff,就不循环了
作者: huiyu    时间: 2018-12-28 15:12
i初始值是3,不等于0xff,就执行下面的函数,执行完在自身加1
定时器,看你晶振用的多少,假设你用的12M,51单片机12个时钟周期,所以就是1M,1次就是1us。定时器往上计数,设置定时器几位的,16位的就是65535。




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