亚洲春色中文字幕久久久-三上亚,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