找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

帖子
查看: 858|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

求助單片機(jī)加減計(jì)數(shù)器程序 為什么是從第三位開(kāi)始計(jì)數(shù)?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1139469 發(fā)表于 2024-12-12 10:09 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
我的加減計(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();                // 刷新顯示
    }
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:161164 發(fā)表于 2024-12-12 15:29 | 只看該作者
代碼要配合電路
請(qǐng)?zhí)峁┰韴D
回復(fù)

使用道具 舉報(bào)

板凳
ID:1130621 發(fā)表于 2024-12-12 20:43 | 只看該作者
線接錯(cuò)了?從左邊計(jì)數(shù)?
回復(fù)

使用道具 舉報(bào)

地板
ID:1109793 發(fā)表于 2024-12-13 19:00 | 只看該作者
在主函數(shù)WHILE前邊加上m = 12;n=34;先看看顯示順序?qū)Σ粚?duì)
話說(shuō)0-9999的四位計(jì)數(shù),為啥不直接用int,還要搞這么麻煩?
回復(fù)

使用道具 舉報(bào)

5#
ID:27161 發(fā)表于 2024-12-14 12:42 | 只看該作者
可能線接錯(cuò)了,檢查一下吧。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表