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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 784|回復: 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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久99视频免费观看 | 亚洲一本 | 欧美日韩成人在线 | av黄色在线 | 欧美一区二区三区免费在线观看 | 视频在线亚洲 | 亚洲国产精品激情在线观看 | 国产精品国产三级国产aⅴ中文 | 日韩欧美三区 | 国产一区二区三区 | 国产乱码精品一区二区三区忘忧草 | 久久精品亚洲欧美日韩久久 | 久久久九九 | 亚洲精品一区二区三区丝袜 | 天天干天天玩天天操 | 欧美日韩精品 | 91素人| 久久大陆| 午夜精品久久久久久久久久久久久 | 久久国产欧美日韩精品 | 99精品国产在热久久 | 一区二区三区精品视频 | 中文字幕人成乱码在线观看 | 国产高清一区二区三区 | 一级黄色短片 | 久久999| 一区二区三区视频在线 | 日韩欧美在线观看一区 | 91精品国产综合久久精品 | 国产美女永久免费无遮挡 | 婷婷成人在线 | 欧美激情一区二区 | 久久99这里只有精品 | 亚洲免费一 | 色综久久 | 波多野结衣中文字幕一区二区三区 | 欧美国产日韩一区 | 美国黄色一级片 | 欧美日韩国产一区二区三区不卡 | 国产精品久久午夜夜伦鲁鲁 | 欧美精品a∨在线观看不卡 欧美日韩中文字幕在线播放 |