標(biāo)題: 求助單片機(jī)加減計(jì)數(shù)器程序 為什么是從第三位開(kāi)始計(jì)數(shù)? [打印本頁(yè)]

作者: new至    時(shí)間: 2024-12-12 10:09
標(biāo)題: 求助單片機(jī)加減計(jì)數(shù)器程序 為什么是從第三位開(kāi)始計(jì)數(shù)?
我的加減計(jì)數(shù)器的個(gè)位一直是0,計(jì)數(shù)是從第三位開(kāi)始的;
#include <stc8h.h>
#define uchar unsigned char
#define uint unsigned int

sbit k1 = P1^0;                   // 加
sbit k2 = P1^1;                   // 減
sbit k3 = P1^2;                   // 復(fù)位

void key(void);
void display(void);

uchar code table[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
                        0x07,0x7f,0x6f}; // 數(shù)碼管段碼

uchar m = 0, n = 0;               // 初始化為 0000

// 延時(shí)函數(shù)
void delayms(uint xms) {
    uint i, j;
    for (i = xms; i > 0; i--)
        for (j = 110; j > 0; j--);
}

// 數(shù)碼管顯示程序
void display(void) {
    P2 = 0x08;                     // 個(gè)位
    P0 = table[m % 10];            // 顯示個(gè)位數(shù)字
    delayms(5);
    P2 = 0x04;                     // 十位
    P0 = table[m / 10];            // 顯示十位數(shù)字
    delayms(5);
    P2 = 0x02;                     // 百位
    P0 = table[n % 10];            // 顯示百位數(shù)字
    delayms(5);
    P2 = 0x01;                     // 千位
    P0 = table[n / 10];            // 顯示千位數(shù)字
    delayms(5);
}

// 按鍵處理程序
void key() {
    if (k1 == 0) {                // 檢測(cè)加按鍵是否按下
        delayms(10);              // 延時(shí)消抖
        if (k1 == 0) {            // 再次檢測(cè)
            m++;
            if (m >= 100) {
                m = 0;
                n++;
                if (n >= 100) {
                    m = 99;       // 最大顯示 9999
                    n = 99;
                }
            }
        }
        while (k1 == 0);          // 等待松開(kāi)
    }

    if (k2 == 0) {                // 檢測(cè)減按鍵
        delayms(10);              // 延時(shí)消抖
        if (k2 == 0) {
            if (m == 0 && n == 0) {
                m = 0;            // 最小值 0000
                n = 0;
            } else {
                if (m == 0) {
                    m = 99;
                    n--;
                } else {
                    m--;
                }
            }
        }
        while (k2 == 0);          // 等待松開(kāi)
    }

    if (k3 == 0) {                // 檢測(cè)復(fù)位按鍵
        delayms(10);
        if (k3 == 0) {
            m = 0;                // 復(fù)位顯示 0000
            n = 0;
        }
        while (k3 == 0);          // 等待松開(kāi)
    }
}

// 主函數(shù)
void main() {
        // 配置端口模式
        P2M0 = 0xff;
        P2M1 = 0x00;
        P1M0 = 0xff;
        P1M1 = 0x00;
        P0M0 = 0xff;
        P0M1 = 0x00;
        P4M0 = 0xff;
        P4M1 = 0x00;
    while (1) {
        key();                    // 檢測(cè)按鍵
        display();                // 刷新顯示
    }
}


作者: lkc8210    時(shí)間: 2024-12-12 15:29
代碼要配合電路
請(qǐng)?zhí)峁┰韴D
作者: 眼小自然萌    時(shí)間: 2024-12-12 20:43
線(xiàn)接錯(cuò)了?從左邊計(jì)數(shù)?
作者: xiaobendan001    時(shí)間: 2024-12-13 19:00
在主函數(shù)WHILE前邊加上m = 12;n=34;先看看顯示順序?qū)Σ粚?duì)
話(huà)說(shuō)0-9999的四位計(jì)數(shù),為啥不直接用int,還要搞這么麻煩?
作者: xjlfh    時(shí)間: 2024-12-14 12:42
可能線(xiàn)接錯(cuò)了,檢查一下吧。




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