欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 為什么按鍵加,設置時間999分鐘為上限,為什么加到255自動復位從0開始?附單片機代碼 [打印本頁]

作者: qwettyuio    時間: 2021-12-10 16:42
標題: 為什么按鍵加,設置時間999分鐘為上限,為什么加到255自動復位從0開始?附單片機代碼
代碼設置的上限是999分鐘,為什么加到255分鐘之后,再按加就變為0了,求解原因

代碼:
  1. #include "CH554.H"                                                   
  2. #include "Debug.H"
  3. #include "GPIO.H"
  4. #include "HT1621.H"
  5. #include "Timer.H"
  6. #include "stdio.h"
  7. #include <string.h>
  8. #include <intrins.h>

  9. #define uchar unsigned char
  10. #define uint  unsigned int
  11. //                    //  0    1    2    3    4    5    6    7    8    9        
  12. uchar code tabe1[11] = {0xF0,0x00,0xD0,0x90,0x20,0xB0,0xF0,0x10,0xF0,0xB0};
  13. uchar code tabe2[11] = {0xA0,0xA0,0x60,0xE0,0xE0,0xC0,0xC0,0xA0,0xE0,0xE0};

  14. sbit key1 = P3^3;   //分鐘加
  15. sbit key2 = P3^4;   //分鐘減
  16. uchar min,min0,min1,min2,sec,sec1,sec2,count;

  17. void delay_ms(uint z)                //延時程序1
  18. {
  19.         uint x,y;
  20.         for(x=z;x>0;x--)
  21.          for(y=110;y>0;y--);
  22. }
  23. /*******************************************************************************
  24. * Function Name  : void Display_Init()
  25. * Description    : 時間顯示
  26. *******************************************************************************/
  27. void Display_Init(uchar min0,uchar min1,uchar min2,uchar sec1,uchar sec2)
  28. {
  29.         Write_1621(3,tabe1[min0],4);
  30.         Write_1621(4,tabe2[min0],4);
  31.         Write_1621(5,tabe1[min1],4);
  32.         Write_1621(6,tabe2[min1],4);
  33.         Write_1621(7,tabe1[min2],4);
  34.         Write_1621(8,tabe2[min2],4);
  35.         Write_1621(11,tabe1[sec1],4);
  36.         Write_1621(12,tabe2[sec1],4);
  37.         Write_1621(13,tabe1[sec2],4);
  38.         Write_1621(14,tabe2[sec2],4);
  39. }
  40. /*******************************************************************************
  41. * Function Name  : void Timer0_Init()
  42. * Description    : 定時器初始化
  43. *******************************************************************************/
  44. void Time0_Init()
  45. {
  46.         count = 0;
  47.         min   = 0;
  48.         sec   = 59;
  49.         mTimer0Clk12DivFsys();                                     //T0定時器時鐘設置
  50.         mTimer_x_ModInit(0,1);                                     //T0定時器模式設置
  51.         mTimer_x_SetData(0,0xC350);                                //T0定時器賦值
  52.         mTimer0RunCTL(1);                                          //T0定時器啟動
  53.         ET0   = 1;                                                 //T0定時器中斷開啟
  54.         EA    = 1;
  55. }
  56. /*******************************************************************************
  57. * Function Name  : mTimer0Interrupt()
  58. * Description    : CH554定時計數器0定時計數器中斷處理函數
  59. *******************************************************************************/
  60. void        mTimer0Interrupt( void ) interrupt INT_NO_TMR0 using 1           //timer0中斷服務程序,使用寄存器組1
  61. {
  62.         mTimer_x_SetData(0,0xC350);                                          //非自動重載方式需重新給TH0和TL0賦值        
  63.         count++;
  64.         if(count==10)
  65.         {
  66.         count=0;
  67.                 if(sec==0)
  68.                 {
  69.                         if(min!=0)
  70.                         {
  71.                                 sec=59;
  72.                                 min--;
  73.                         }
  74.                         else
  75.                         {
  76.                                 mTimer0RunCTL(0);                                          //T0定時器停止
  77.                         }
  78.                 }
  79.                 else sec--;
  80.         }
  81. }
  82. void main( )
  83. {
  84.         Time0_Init();
  85.         Init_1621();       //初始化HT1621
  86.         HT1621_all_off();  //清空LCD顯示
  87.         while(1)
  88.         {
  89.                 if(key1==0)
  90.                 {
  91.                         delay_ms(100);
  92.                         if(key1==0)
  93.                         {
  94.                                 if(min!=999)
  95.                                 {
  96.                                         min++;
  97.                                 }
  98.                         }
  99.                         while(!key2);
  100.                         delay_ms(1000);
  101.                         while(!key2);
  102.                 }
  103.                 if(key2==0)
  104.                 {
  105.                         delay_ms(100);
  106.                         if(key2==0)
  107.                         {
  108.                                 if(min!=0)
  109.                                 {
  110.                                         min--;
  111.                                 }
  112.                         }
  113.                         while(!key1);
  114.                         delay_ms(1000);
  115.                         while(!key1);
  116.                 }
  117.                 min0=min/100;
  118.                 min1=min%100/10;
  119.                 min2=min%10;
  120.                 sec1=sec/10;
  121.                 sec2=sec%10;
  122.                 Display_Init(min0,min1,min2,sec1,sec2);
  123.         }
  124. }
復制代碼



作者: 天ノ憶    時間: 2021-12-10 17:16
本帖最后由 天ノ憶 于 2021-12-10 17:18 編輯

既然想加到999,為什么把變量用數據長度為256的unsigned char定義
作者: npn    時間: 2021-12-10 17:26
min變量要用uint類型
作者: 名字不是重點    時間: 2021-12-10 17:26
因為你是用牛來拉火車了。。。
unsigned char 取值范圍:0-255,溢出了。

作者: qwettyuio    時間: 2021-12-10 17:27
npn 發表于 2021-12-10 17:26
min變量要用uint類型

懂了,好像聲明錯了,謝謝
作者: qwettyuio    時間: 2021-12-10 17:28
名字不是重點 發表于 2021-12-10 17:26
因為你是用牛來拉火車了。。。
unsigned char 取值范圍:0-255,溢出了。

懂了,范圍弄錯了,謝謝
作者: 13205495918    時間: 2021-12-10 20:26
變量范圍問題,嘿嘿嘿,uchar就是0~255




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1