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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

求大神幫我看看顯示板的控制

[復制鏈接]
跳轉到指定樓層
樓主

3個數碼管顯示這些玩意兒,但是我現在沒有什么思路,請大神幫我搭個框架,謝謝你們

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

使用道具 舉報

沙發
ID:404160 發表于 2024-8-23 11:14 | 只看該作者
#include <REGX51.H>

#define uchar unsigned char
#define uint unsigned int

// 數碼管顯示數字的編碼
uchar code num_table[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};

// 假設數碼管的段選連接到P0口,位選連接到P2口
sbit DIGIT1 = P0;
sbit DIGIT2 = P2;

// 按鍵定義
sbit KEY_SET = P3^0; // 設置鍵
sbit KEY_PLUS = P3^1; // 加鍵
sbit KEY_MINUS = P3^2; // 減鍵
sbit KEY_START = P3^3; // 開始鍵

// 全局變量
uchar timeSet = 5; // 設置的時間,默認5分鐘
uchar degreeSet = 4; // 設置的焦度,默認4檔
uchar timeCount = 0; // 計時器變量
bit isTimerRunning = 0; // 計時器運行狀態

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

// 數碼管顯示函數
void DisplayDigit(uchar pos, uchar num) {
    if (pos == 1) {
        DIGIT1 = 0xFF; // 關閉所有數碼管
        DIGIT2 = num_table[num]; // 顯示數字
    } else {
        DIGIT2 = 0xFF; // 關閉所有數碼管
        DIGIT1 = num_table[num]; // 顯示數字
    }
}

// 更新時間顯示
void UpdateTimeDisplay() {
    uchar minutes = timeSet / 10;
    uchar seconds = timeSet % 10;
    DisplayDigit(1, minutes); // 分鐘十位
    DisplayDigit(2, seconds); // 分鐘個位
}

// 更新焦度顯示
void UpdateDegreeDisplay() {
    DisplayDigit(3, degreeSet); // 焦度
}

// 按鍵掃描函數
void KeyScan() {
    if (KEY_SET == 0) { // 設置模式
        // 進入設置模式,可能需要額外的邏輯來設置時間和焦度
        while (KEY_SET == 0); // 等待按鍵釋放
    }
    if (KEY_PLUS == 0) { // 增加時間或焦度
        if (isTimerRunning) {
            timeSet++;
            if (timeSet > 59) timeSet = 59; // 時間限制為0-59分鐘
        } else {
            degreeSet++;
            if (degreeSet > 8) degreeSet = 8; // 焦度限制為1-8檔
        }
        while (KEY_PLUS == 0); // 等待按鍵釋放
    }
    if (KEY_MINUS == 0) { // 減少時間或焦度
        if (isTimerRunning) {
            timeSet--;
            if (timeSet < 1) timeSet = 1; // 時間限制為1-59分鐘
        } else {
            degreeSet--;
            if (degreeSet < 1) degreeSet = 1; // 焦度限制為1-8檔
        }
        while (KEY_MINUS == 0); // 等待按鍵釋放
    }
    if (KEY_START == 0) { // 開始計時
        isTimerRunning = !isTimerRunning;
        timeCount = timeSet; // 重置計時器
        while (KEY_START == 0); // 等待按鍵釋放
    }
}

// 定時器中斷服務程序
void Timer0_isr() interrupt 1 {
    TH0 = (65536 - 500) / 256; // 重新加載定時器初值
    TL0 = (65536 - 500) % 256;
    if (isTimerRunning) {
        timeCount--;
        if (timeCount == 0) {
            isTimerRunning = 0; // 停止計時器
            // 可以添加代碼來處理計時結束的事件
        }
    }
}

void main() {
    TMOD = 0x01; // 設置定時器模式
    TH0 = (65536 - 500) / 256; // 定時器初值設置
    TL0 = (65536 - 500) % 256; // 定時器初值設置
    ET0 = 1; // 開啟定時器0中斷
    EA = 1; // 開啟全局中斷
    TR0 = 1; // 啟動定時器

    while (1) {
        KeyScan(); // 掃描按鍵
        UpdateTimeDisplay(); // 更新時間顯示
        UpdateDegreeDisplay(); // 更新焦度顯示

        // 可以添加其他功能,如翻面提醒等
    }
}
程序包括了以下功能:

數碼管顯示時間和焦度。
按鍵控制時間和焦度的設置。
定時器中斷用于計時功能。
開始/停止計時器的功能。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 蜜桃毛片 | 日韩一区二区在线视频 | 欧美日韩理论 | 成人福利片 | 午夜精品久久久久久不卡欧美一级 | 欧美精品a∨在线观看不卡 国产精品久久国产精品 | 国产亚洲一区二区三区 | 亚洲精品自在在线观看 | 国产精品免费一区二区三区四区 | 91偷拍精品一区二区三区 | 日本国产欧美 | 国产玖玖| 久久夜视频| 国产成人精品一区二区三区在线 | 日韩欧美一区二区三区四区 | 中文字幕精品一区二区三区精品 | 在线观看免费毛片 | 亚洲视频三区 | 91精品国产91久久久久久 | 欧美99久久精品乱码影视 | 日韩美女一区二区三区在线观看 | 国产精品国产三级国产aⅴ中文 | 亚洲一区二区三区在线免费 | 激情三区 | 欧美日韩在线看 | 久久无毛 | 日本亚洲一区 | 精品一区二区久久久久久久网站 | yiren22综合网成人 | 国产一区二区小视频 | 免费天天干 | 成人二区| 亚洲免费精品 | 99久久成人| 日韩精品区 | 国产精品 亚洲一区 | 91免费福利在线 | 精品在线一区二区 | 2018中文字幕第一页 | 91精品久久久久久久久久小网站 | 国产精品美女久久久久aⅴ国产馆 |