欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

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

QQ登錄

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

搜索
查看: 1808|回復(fù): 3
收起左側(cè)

串口助手實(shí)現(xiàn)流水燈和數(shù)碼管

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


回復(fù)

使用道具 舉報(bào)

ID:235200 發(fā)表于 2023-12-24 14:06 | 顯示全部樓層
LedBuff[7] = 這一行都少了一個(gè)"{"   串口中斷服務(wù)程序要把按收到的數(shù)據(jù)進(jìn)行分類選擇相應(yīng)流水燈的控制,同時(shí)設(shè)置顯示緩沖區(qū)的數(shù)據(jù),顯示程序由定時(shí)計(jì)數(shù)器負(fù)責(zé)顯示緩 沖區(qū)的內(nèi)容即可
回復(fù)

使用道具 舉報(bào)

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

那個(gè){是我復(fù)制時(shí)不小心刪掉的,我是不知道怎么把上面那段程序改為要求那種的
回復(fù)

使用道具 舉報(bào)

ID:161164 發(fā)表于 2023-12-25 22:41 | 顯示全部樓層
電路圖呢?沒(méi)有電路圖改不了
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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