欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
新人求51單片機串口通訊LED程序的編寫思路
[打印本頁]
作者:
lmnb2678202
時間:
2020-10-2 14:14
標題:
新人求51單片機串口通訊LED程序的編寫思路
單片機89C52RC 現在只會用P0口控制,無法鎖存,相當于數碼管的顯示
要求PO P1口,用16個0/1口串口通訊控制16個LED燈的開關,可單獨開關互不影響。
求思路,想自己編寫
作者:
上進求學
時間:
2020-10-3 20:13
首先你可以規定下P0口控制數碼管位選,P1口控制數碼管段選。分別用十六進制賦值。
eg.
{
P0=0xfe; //選定位選
P1=0xff; //位選8
delay(1); //延時幾短造成是錯覺感覺一直亮
}
當然你也可以先編寫一個數組
uchar code table[]={0x3f,0x06,0x5b,0x4f};
然后位選再段選
voidm main()
{
P0=0xfe;
P1=table[num];
delay(1);
}
再加個中斷在,中斷里面再加上num++;就OK了
可以實現變化
我的89c52無法一起控制8個數碼管,只能一個一個控制P0,再輸入不同的P1,加上幾短延時即可。
作者:
lmnb2678202
時間:
2020-10-3 21:06
#include "reg52.h"
#include "uart.h"
void LED_OFF(u8 char_num) //關閉LED
{
switch(char_num)//對象碼
{
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)//對象碼
{
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;
}
}
/*指令說明:
*發送 001 打開LED (001表示:分類碼='0',功能碼='0',對象碼='1' ,分類碼='0'表示LED控制類,功能碼'0'表示關閉LED,對象碼'1'表示第1個LED)
*發送 011 打開LED (011表示:分類碼='0',功能碼='1',對象碼='1' ,分類碼='0'表示LED控制類,功能碼'1'表示打開LED,對象碼'1'表示第1個LED)
*無結束符,適用于固定長度的指令,本工程設計為固定長度為2個字符的指令
*第一個字符表示類別碼,即是什么分類
*第二個字符代表功能碼,即是什么功能
*第三個字符代表對象碼,即是什么對象
*可以修改長度來增減指令長度,獲得更多嵌套層數功能控制。
*/
void main(void) //主函數掃描方式
{
UART_Configure(9600);//配置9600波特率(默認無奇偶校驗,1位停止位,8位數據位)
while(1)
{
if(Uart.RX_COUNT>=3) //判斷串口是否接收到3個以上數據,修改此處的數據可改變指令長度
{
switch(Uart.RX_BUFF[0]) //類別碼
{
case '0': //LED控制類
switch(Uart.RX_BUFF[1]) //功能碼
{
case '0': //功能碼0 :關閉LED
LED_OFF(Uart.RX_BUFF[2]);//將對象碼輸入函數中
break;
case '1': //功能碼1 :打開LED
LED_ON(Uart.RX_BUFF[2]);//將對象碼輸入函數中
break;
}
break;
case '1': //其他類
break;
case '2': //其他類
break;
}
//清除數據必須在處理代碼后面
Uart.RX_COUNT=0; //緩存計數清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
出這樣的錯誤求解答
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1