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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1825|回復: 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;
    }
}


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

使用道具 舉報

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

使用道具 舉報

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

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

使用道具 舉報

地板
ID:161164 發表于 2023-12-25 22:41 | 只看該作者
電路圖呢?沒有電路圖改不了
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产美女自拍视频 | 999热精品视频 | 国产成人一区二区三区电影 | 亚洲精品女优 | 综合久久99| 亚洲三区在线观看 | 亚洲欧美日韩精品久久亚洲区 | 香蕉91 | 国产精品一区久久久 | 日韩和的一区二区 | 国产视频一区二区在线观看 | 欧美一级在线免费观看 | 久久一区二区三区四区五区 | 精品在线播放 | 在线观看成人 | 亚洲网站在线观看 | 狠狠色综合久久婷婷 | 精品日韩一区二区 | 天堂av免费观看 | 国际精品久久 | 国产精品久久久一区二区三区 | 欧美性猛片aaaaaaa做受 | 国产在线精品一区二区三区 | 久久成人精品视频 | 日韩精品 电影一区 亚洲 | 亚洲手机视频在线 | 国产在线精品一区二区 | 日本成人一区二区 | 久久久性色精品国产免费观看 | 欧美精品91 | 天堂久| 亚洲一区二区三区免费在线观看 | 欧美一区二区三区在线视频 | 天天草视频| a免费视频 | 国产精品黄视频 | 一区二区高清 | 国产精品欧美一区二区三区不卡 | 国产免费一区二区三区免费视频 | 精品久久久久久久久久久久久久久久久 | 欧美 日韩 国产 一区 |