久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 896|回復: 4
打印 上一主題 下一主題
收起左側

求助單片機加減計數器程序 為什么是從第三位開始計數?

[復制鏈接]
跳轉到指定樓層
樓主
ID:1139469 發表于 2024-12-12 10:09 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
我的加減計數器的個位一直是0,計數是從第三位開始的;
#include <stc8h.h>
#define uchar unsigned char
#define uint unsigned int

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

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

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

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

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

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

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

    if (k2 == 0) {                // 檢測減按鍵
        delayms(10);              // 延時消抖
        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);          // 等待松開
    }

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

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

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

使用道具 舉報

沙發
ID:161164 發表于 2024-12-12 15:29 | 只看該作者
代碼要配合電路
請提供原理圖
回復

使用道具 舉報

板凳
ID:1130621 發表于 2024-12-12 20:43 | 只看該作者
線接錯了?從左邊計數?
回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩电影免费在线观看中文字幕 | 亚洲一区久久 | 成人免费看 | 久久www免费人成看片高清 | 91亚洲国产亚洲国产 | 91精品国产一区二区三区 | 欧美午夜精品理论片a级按摩 | 欧美精品乱码久久久久久按摩 | 四虎午夜剧场 | 久久久久免费精品国产小说色大师 | 精品国产欧美一区二区 | 亚洲电影第三页 | 国产精品久久 | 久久综合久久久 | 欧美黄页 | 国产小网站 | 女人天堂av| 日本小电影网站 | 欧美日韩综合一区 | 断背山在线观看 | 高清色| 午夜一区 | 四虎影院一区二区 | 欧美在线观看一区 | 青青草原综合久久大伊人精品 | 99只有精品| 午夜精品久久久久久久久久久久久 | 天天影视综合 | 日韩一二区 | 日韩影院在线 | 色综合天天综合网国产成人网 | 成人精品视频99在线观看免费 | 免费观看黄网站 | 国产精品日韩 | 国产传媒视频在线观看 | 久久久久国产 | 午夜看看| 欧美伊人久久久久久久久影院 | 日本国产高清 | 国产精品久久久久久久久久久久 | 欧美午夜精品 |