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

QQ登錄

只需一步,快速開始

搜索
查看: 2038|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

新人求51單片機(jī)串口通訊LED程序的編寫思路

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:734389 發(fā)表于 2020-10-2 14:14 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
30黑幣
單片機(jī)89C52RC    現(xiàn)在只會(huì)用P0口控制,無(wú)法鎖存,相當(dāng)于數(shù)碼管的顯示
要求PO P1口,用16個(gè)0/1口串口通訊控制16個(gè)LED燈的開關(guān),可單獨(dú)開關(guān)互不影響。
求思路,想自己編寫

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

使用道具 舉報(bào)

沙發(fā)
ID:825447 發(fā)表于 2020-10-3 20:13 | 只看該作者
首先你可以規(guī)定下P0口控制數(shù)碼管位選,P1口控制數(shù)碼管段選。分別用十六進(jìn)制賦值。
eg.
{
  P0=0xfe;   //選定位選
  P1=0xff;   //位選8
  delay(1);    //延時(shí)幾短造成是錯(cuò)覺感覺一直亮
}
當(dāng)然你也可以先編寫一個(gè)數(shù)組
uchar code table[]={0x3f,0x06,0x5b,0x4f};
然后位選再段選
voidm main()
{
P0=0xfe;
P1=table[num];
delay(1);
}
再加個(gè)中斷在,中斷里面再加上num++;就OK了
可以實(shí)現(xiàn)變化
我的89c52無(wú)法一起控制8個(gè)數(shù)碼管,只能一個(gè)一個(gè)控制P0,再輸入不同的P1,加上幾短延時(shí)即可。

回復(fù)

使用道具 舉報(bào)

板凳
ID:734389 發(fā)表于 2020-10-3 21:06 | 只看該作者
#include "reg52.h"
#include "uart.h"


void LED_OFF(u8 char_num) //關(guān)閉LED
{
        switch(char_num)//對(duì)象碼
        {
                 case '1':               
                         P1|=1<<0;
                         UART_SendStr("LED1_OFF \r\n");
                 break;
                 case '2':               
                         P1|=1<<1;
                         UART_SendStr("LED2_OFF \r\n");
                 break;
                 case '3':               
                         P1|=1<<2;
                         UART_SendStr("LED3_OFF \r\n");
                 break;
                 case '4':               
                         P1|=1<<3;
                         UART_SendStr("LED4_OFF \r\n");
                 break;
                 case '5':               
                         P1|=1<<4;
                         UART_SendStr("LED5_OFF \r\n");
                 break;
                 case '6':               
                         P1|=1<<5;
                         UART_SendStr("LED6_OFF \r\n");
                 break;
                 case '7':               
                         P1|=1<<6;
                         UART_SendStr("LED7_OFF \r\n");
                 break;
                 case '8':               
                         P1|=1<<7;
                         UART_SendStr("LED8_OFF \r\n");
                 break;               
  }
}
void LED_ON(u8 char_num) //打開LED
{
        switch(char_num)//對(duì)象碼
        {
                 case '1':               
                         P1&=~(1<<0);
                         UART_SendStr("LED1_ON \r\n");
                 break;
                 case '2':               
                         P1&=~(1<<1);
                         UART_SendStr("LED2_ON \r\n");
                 break;
                 case '3':               
                         P1&=~(1<<2);
                         UART_SendStr("LED3_ON \r\n");
                 break;
                 case '4':               
                         P1&=~(1<<3);
                         UART_SendStr("LED4_ON \r\n");
                 break;
                 case '5':               
                         P1&=~(1<<4);
                         UART_SendStr("LED5_ON \r\n");
                 break;
                 case '6':               
                         P1&=~(1<<5);
                         UART_SendStr("LED6_ON \r\n");
                 break;
                 case '7':               
                         P1&=~(1<<6);
                         UART_SendStr("LED7_ON \r\n");
                 break;
                 case '8':               
                         P1&=~(1<<7);
                         UART_SendStr("LED8_ON \r\n");
                 break;               
  }
}

/*指令說(shuō)明:
*發(fā)送 001  打開LED  (001表示:分類碼='0',功能碼='0',對(duì)象碼='1' ,分類碼='0'表示LED控制類,功能碼'0'表示關(guān)閉LED,對(duì)象碼'1'表示第1個(gè)LED)
*發(fā)送 011  打開LED  (011表示:分類碼='0',功能碼='1',對(duì)象碼='1' ,分類碼='0'表示LED控制類,功能碼'1'表示打開LED,對(duì)象碼'1'表示第1個(gè)LED)

*無(wú)結(jié)束符,適用于固定長(zhǎng)度的指令,本工程設(shè)計(jì)為固定長(zhǎng)度為2個(gè)字符的指令
*第一個(gè)字符表示類別碼,即是什么分類
*第二個(gè)字符代表功能碼,即是什么功能
*第三個(gè)字符代表對(duì)象碼,即是什么對(duì)象
*可以修改長(zhǎng)度來(lái)增減指令長(zhǎng)度,獲得更多嵌套層數(shù)功能控制。
*/
void main(void) //主函數(shù)掃描方式
{
  UART_Configure(9600);//配置9600波特率(默認(rèn)無(wú)奇偶校驗(yàn),1位停止位,8位數(shù)據(jù)位)
        while(1)
        {
                if(Uart.RX_COUNT>=3) //判斷串口是否接收到3個(gè)以上數(shù)據(jù),修改此處的數(shù)據(jù)可改變指令長(zhǎng)度
                {
                         switch(Uart.RX_BUFF[0]) //類別碼
                         {
                                 case '0': //LED控制類
                                         switch(Uart.RX_BUFF[1]) //功能碼
                                         {
                                                 case '0':  //功能碼0 :關(guān)閉LED
                                                                        LED_OFF(Uart.RX_BUFF[2]);//將對(duì)象碼輸入函數(shù)中
                                                 break;               
                                                 case '1':  //功能碼1 :打開LED  
                                                                        LED_ON(Uart.RX_BUFF[2]);//將對(duì)象碼輸入函數(shù)中
                                                 break;                                         
                                         }
                                 break;
                                 case '1': //其他類

                                 break;
                                 case '2': //其他類

                                 break;                                  
                         }                                 
                         
                         //清除數(shù)據(jù)必須在處理代碼后面
                         Uart.RX_COUNT=0;  //緩存計(jì)數(shù)清0
                         UART_RX_BUFF_Clear();//清除接收緩存
                }
        }
}
Build target 'Target 1'
compiling 串口通信控制led亮滅.c...
..\..\..\..\串口通信控制led亮滅.c(3): warning C318: can't open file 'uart.h'
..\..\..\..\串口通信控制LED亮滅.C(6): error C141: syntax error near 'char_num', expected ')'
..\..\..\..\串口通信控制LED亮滅.C(8): error C202: 'char_num': undefined identifier
Target not created
出這樣的錯(cuò)誤求解答
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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