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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1865|回復: 3
收起左側

串口助手實現流水燈和數碼管

[復制鏈接]
ID:1105996 發表于 2023-12-24 12:34 | 顯示全部樓層 |閱讀模式
有人能幫我改一下程序嗎,真不會
要求如下:利用串口助手,通過串口助手發送0,則流水燈左移,同時數碼管顯示管顯示0。發送1,則流水燈右移,同時數碼管顯示管顯示1。發送2,則流水燈中間向兩端發散,同時數碼管顯示管顯示2。發送3,則流水燈全滅,同時數碼管顯示管顯示3。發送4,則流水燈全亮,同時數碼管顯示管顯示4。

#include <reg52.h>

sbit ADDR3 = P1^3;
sbit ENLED = P1^4;

unsigned char code LedChar[] = {
    0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,
    0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E
};
unsigned char LedBuff[7] =
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
};
unsigned char T0RH = 0;  
unsigned char T0RL = 0;
unsigned char RxdByte = 0;
unsigned char flag200ms = 0;  
unsigned char flagLight = 1;  

void ConfigTimer0(unsigned int ms);
void ConfigUART(unsigned int baud);
void FlowingLight();

void main()
{
    EA = 1;      
    ENLED = 0;  
    ADDR3 = 1;
    ConfigTimer0(1);  
    ConfigUART(9600);

    while (1)
    {
        if (flagLight == 0)
        {
            LedBuff[6] = 0xFF;
        }
        else
        {
            if (flag200ms != 0)
            {
                flag200ms = 0;
                FlowingLight();
            }
        }        LedBuff[0] = LedChar[RxdByte & 0x0F];
        LedBuff[1] = LedChar[RxdByte >> 4];
    }
}void FlowingLight()
{
    static unsigned char dir = 0;   
    static unsigned char shift = 0x01;

    LedBuff[6] = ~shift;   
    if (dir == 0)            
    {
        shift = shift << 1;
        if (shift == 0x80)  
        {
            dir = 1;
        }
    }
    else                    
    {
        shift = shift >> 1;  
        if (shift == 0x01)
        {
            dir = 0;
        }
    }
}void ConfigTimer0(unsigned int ms)
{
    unsigned long tmp;

    tmp = 11059200 / 12;   
    tmp = (tmp * ms) / 1000;
    tmp = 65536 - tmp;
    tmp = tmp + 13;      
    T0RH = (unsigned char)(tmp>>8);
    T0RL = (unsigned char)tmp;
    TMOD &= 0xF0;  
    TMOD |= 0x01;
    TH0 = T0RH;  
    TL0 = T0RL;
    ET0 = 1;      
    TR0 = 1;      
}
void ConfigUART(unsigned int baud)
{
    SCON  = 0x50;  
    TMOD &= 0x0F;
    TMOD |= 0x20;
    TH1 = 256 - (11059200/12/32)/baud;
    TL1 = TH1;  
    ET1 = 0;   
    ES  = 1;      
    TR1 = 1;   
}void LedScan()
{
    static unsigned char i = 0;

    P0 = 0xFF;         
    P1 = (P1 & 0xF8) | i;
    P0 = LedBuff[i];      
    if (i < 6)            
        i++;
    else
        i = 0;
}void InterruptTimer0() interrupt 1
{
    static unsigned char tmr200ms = 0;

    TH0 = T0RH;
    TL0 = T0RL;
    LedScan();  
    tmr200ms++;
    if (tmr200ms >= 200)
    {
        tmr200ms = 0;
        flag200ms = 1;
    }
}void InterruptUART() interrupt 4
{
    if (RI)
    {
        RI = 0;
        RxdByte = SBUF;
        SBUF = RxdByte;

        flagLight = !flagLight;
    }
    if (TI)
    {
        TI = 0;
    }
}


回復

使用道具 舉報

ID:161164 發表于 2023-12-25 22:41 | 顯示全部樓層
電路圖呢?沒有電路圖改不了
回復

使用道具 舉報

ID:1105996 發表于 2023-12-24 16:05 | 顯示全部樓層
csmyldl 發表于 2023-12-24 14:06
LedBuff[7] = 這一行都少了一個"{"   串口中斷服務程序要把按收到的數據進行分類選擇相應流水燈的控制,同 ...

那個{是我復制時不小心刪掉的,我是不知道怎么把上面那段程序改為要求那種的
回復

使用道具 舉報

ID:235200 發表于 2023-12-24 14:06 | 顯示全部樓層
LedBuff[7] = 這一行都少了一個"{"   串口中斷服務程序要把按收到的數據進行分類選擇相應流水燈的控制,同時設置顯示緩沖區的數據,顯示程序由定時計數器負責顯示緩 沖區的內容即可
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品一区在线 | 日韩欧美在线一区二区 | 一区二区三区黄色 | 中国毛片视频 | 日本少妇中文字幕 | 夜夜操网站 | 中文字幕在线免费视频 | 青青草免费在线视频 | 99超碰在线观看 | 日韩毛片网 | 成人国产精品 | 一区二区黄色 | 日日操视频 | 日韩在线免费视频 | 欧美不卡一区二区三区 | 在线观看三级 | 亚洲人成免费 | 欧美日韩在线免费观看 | 久久久国产一区二区三区 | 久久久久久久国产精品 | 久热99| 国产性猛交╳xxx乱大交 | 亚洲精品第一 | 天堂一区二区三区 | 国产在线一区二区三区 | www中文字幕| 国产美女视频网站 | 六月婷婷综合 | 免费特级毛片 | 国产精品99精品久久免费 | 免费黄色一级视频 | 亚洲激情欧美激情 | 日韩视频精品 | 五月天在线 | 亚洲一区免费视频 | 日韩欧美不卡 | 成人午夜视频在线观看 | 亚洲精品911| 日韩av高清在线观看 | 91网站在线免费观看 | 亚洲国产欧美日韩在线 |