亚洲春色中文字幕久久久-三上亚,91精品国产亚一区二区三区,久久久九色综合亚洲成色777,涩涩视频下载,国产午夜亚洲精品午夜鲁丝片,国产精品A一区二区三区腾讯导航,影音先锋色情AV在线看片,蜜臀国产在线视频,极品少妇高潮啪啪无码吴梦梦 ,精品人妻无码一区二区三区手机版

標題: 求教uchar變量的數值問題 [打印本頁]

作者: kscheang    時間: 2025-10-16 00:58
標題: 求教uchar變量的數值問題
各位好:
我是C51單片機初學者, 做了一個用中斷INT0 INT1作加減數, 靜態數碼管顯示
程序執行時, 我發現當開始時, Count=0, 數碼管顯示0
我一按鍵觸發 INT1 (減), 顯示由0變成5, 我按INT0加后再減, 也是減到0后, 再継續按INT1就顯示 5-4-3-2-1-0-9-8...
unsigned char 不是不能有負數嗎! 請教一下, 第一次顯示5時, 其實Count的數值真正是多少呢?
謝謝

程序如下: (用普中HC6800-EM3開發板)

// 處理器 : STC89C52RC @11.0592Mhz
// 內   容:通過中斷接口P3.2 作加鍵 P3.3 作減鍵
//              讓靜態數碼管累加或遞減 顯示0~

#include <reg52.h>                                         // 使用reg52.h頭文件
#define uchar unsigned char                             // 用uchar代替unsigned char,無符號字符型數。
#define uint  unsigned int                                      // 用uint代替unsigned int,無符號整型數。
#define SMG_Port P0                                        // 定義 SMG_Port 替代 P0

sbit KEY_ADD = P3^2;                                      // 定義位變數 KEY 代替P3.2端口
sbit KEY_DEC = P3^3;                                      // 定義位變數 KEY 代替P3.2端口

uchar Count = 0;                                              // 定義次變變數 Count 置為 0

uchar code PSMGChar[] = {
    0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,        // 共陽數碼管數組 0,1,2,3,4,5,6,7
    0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};   // 共陽數碼管數組 8,9,A,B,C,D,E,F

void Delay(uint t){                                             // 延時程序,延時時間為 10ms*t
        uint i,j;
        for(i=0; i<t; i++)
        for(j=0; j<1827; j++);
}

void INT_Init(void) {                                          // 外部中斷INT初始化
    EA = 1;                                                        // 全局中斷 開
    EX0 = 1;                                                      // INT0外部中斷 允許
    IT0 = 1;                                                       // 下降沿觸發, 即按下由高電平轉為低電平瞬間
    EX1 = 1;                                                      // INT1外部中斷 允許
    IT1 = 1;                                                       // 下降沿觸發, 即按下由高電平轉為低電平瞬間
}

void INT0_Key(void) interrupt 0 using 1 {            // INT0外部中斷程序
    EX0 = 0;                                                      // INT0外部中斷關閉
    if(KEY_ADD == 0) {                                      // 如果K1按下
        Delay(3);                                                       // 延時消抖
        if(KEY_ADD == 0) {                                  // 如果K1真按下
            Delay(3);                                               // 延時消抖
            Count++;                                             // Count累加1
        }
    }   
    Delay(10);                                                     // 延時100ms后再等待跳回主程序執行
    EX0 = 1;                                                       // INT0外部中斷 允許
}

void INT1_Key(void) interrupt 2 using 2 {              // INT1外部中斷程序
    EX1 = 0;                                                        // INT1外部中斷關閉
    if(KEY_DEC == 0) {                                        // 如果K5按下
        Delay(3);                                                        // 延時消抖
        if(KEY_DEC == 0) {                                    // 如果K5真按下
            Delay(3);                                                // 延時消抖
            Count--;                                                 // Count遞減1
        }
    }
    Delay(10);                                                      // 延時300ms后再等待跳回主程序執行
    EX1 = 1;                                                        // INT1外部中斷 允許
}


void main(void) {                                                 // 主程序   
    INT_Init();                                                      // INT 外部中斷0初始化
    while(1) {                                                        // 主循環
        SMG_Port = PSMGChar[Count%10];               // 靜態數碼管顯示累加數除10的余數
                Delay(10);                                           // 延時100ms
        }
}



作者: devcang    時間: 2025-10-16 06:27
初始值
uchar Count = 0;                                              // 定義次變變數 Count 置為 0



在程序初始到正常運行過程,沒有重新修改數值,那第一次顯示就是初始值。
作者: WL0123    時間: 2025-10-16 07:13
減減小于0后并不是負數而是255、254、253、252........。靜態顯示個位,當然就顯示 5-4-3-2-1-0-9-8...
作者: joyb    時間: 2025-10-16 08:18
0-1=F
F%10=5
E%10=4
D%10=3
C%10=2
B%10=1
A%10=0
9%10=9
8%10=8
7%10=7
作者: lids    時間: 2025-10-16 09:15
去學學吳堅鴻的教程吧,你學這種按鍵處理是在浪費時間
作者: yzw846562238    時間: 2025-10-16 09:15
初始值:0
第一次減1:0-1=255
第二次減1:255-1=254
......

作者: lids    時間: 2025-10-16 09:17
http://www.denmoz.com/bbs/dpj-99528-1.html    吳堅鴻的教程
作者: xuyaqi    時間: 2025-10-16 09:48
unsigned char是0-255,沒有負數。
作者: zhuls    時間: 2025-10-16 11:02
8位機中,
char:-128~127
uchar:0-255
作者: xiaobendan001    時間: 2025-10-16 12:20
要有負數就不能定義無符號的
另外數碼管要顯示-號大概是要自己處理一下,它自己應該不會
作者: man1234567    時間: 2025-10-16 15:35
當計算值超過系統規定時,就會發生溢出。溢出后的結果各不相同,此處如樓上所述是環歸。
建議以后寫此類代碼時自己加了防溢出處理,這樣就不會呵呵了。
另:在Count++;前加 if(Count == 200 ) Count = 100 ;在Count--;前加 if(Count == 0 ) Count = 100 ;
這樣你的程序按加減鍵只會在 0-9 之間循環變化了,也適合兩位數0-99。
作者: kscheang    時間: 2025-10-17 00:31
Uchar 0 再減 1 是轉回255
明白了, 謝謝各位
作者: 譚1234    時間: 2025-10-17 08:59
會越界





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