導航:首頁 > 操作系統 > 單片機buf4

單片機buf4

發布時間:2022-09-21 20:43:55

『壹』 單片機編程出現問題 我現在只是讓它能實現24小時的時鍾 但是燒錄程序後,8位數碼管顯示00-00-00,不會走動

你的主函數寫的有問題,當然,其實你整個函數架構都寫的不好,但是你描述的問題,是你的主函數有問題,看看你的主函數:

void main()
{
TMOD=0x01;//設置定時器零為工作方式1
TH0=0x3C;
TL0=0xB0;
EA=1;
ET0=1;
TR0=1;
P1=Tab[shi/10%10];buf0=0;delay(1);buf0=1;
P1=Tab[shi%10];buf1=0;delay(1);buf1=1;
P1=0x40;buf2=0;delay(1);buf2=1;
P1=Tab[fen/10%10];buf3=0;delay(1);buf3=1;
P1=Tab[fen%10];buf4=0;delay(1);buf4=1;
P1=0x40;buf5=0;delay(1);buf5=1;
P1=Tab[miao/10%10];buf6=0;delay(1);buf6=1;
P1=Tab[miao%10];buf7=0;delay(1);buf7=1;
}

從第一句 TMOD = 0x01到最後一句:P1 = Tab[....]
執行了一次,這個程序就徹底完了,就是說,你的程序已經執行完了,不在執行了。
你沒發現,所有的C語言程序都有While(1)或者for(;;)嗎?

所以,你的主程序修改一下:
把顯示放到while(1)里或者for(;;)

while(1)
{

P1=Tab[shi/10%10];buf0=0;delay(1);buf0=1;
P1=Tab[shi%10];buf1=0;delay(1);buf1=1;
P1=0x40;buf2=0;delay(1);buf2=1;
P1=Tab[fen/10%10];buf3=0;delay(1);buf3=1;
P1=Tab[fen%10];buf4=0;delay(1);buf4=1;
P1=0x40;buf5=0;delay(1);buf5=1;
P1=Tab[miao/10%10];buf6=0;delay(1);buf6=1;
P1=Tab[miao%10];buf7=0;delay(1);buf7=1;
}
這樣這個程序就能永遠的執行下去。
當然,結果能不能達到你的預期我不知道,我沒仔細看,但是肯定不會只顯示 00 -00 -00然後不動

『貳』 uchar buf ()在單片機什麼意思

定義一個無符號字元型的數組,數組名稱是buf(一般指緩沖的縮寫)
uchar buf [10]={1,2,3,4,6,7,8,9,10};
括弧內10代表數組有10個元素,也可以不寫

『叄』 51單片機串口接收指令控制發送速度 怎麼接收到的指令經常有錯誤的位元組 跪求大神

uchar buf[6]={0x7f}; 你通過這個定義了buf是6個字元的數組,
但是在中斷中你要他顯示範圍之外的東西,不出錯也算怪了。
把buf加大到11看看吧

『肆』 幫忙看一下,51單片機的4位數碼管動態顯示

你的現象應該是那兩位數碼管在
16 以前顯示的是 0 和 一個數,如15 時顯示的是 0 和 F、14 時顯示的是 0 和 e。。。
16 時顯示的是 1 和 0 ,17 時顯示的是 1 和 1

disbuf[0]=(((firstdat&0xf0)>>4)&0x0f);
disbuf[1]=firstdat&0x0f;
disbuf[2]=(((seconddat&0xf0)>>4)&0x0f);
disbuf[3]=seconddat&0x0f;
這里不用這么麻煩吧,直接
disbuf[0]=firstdat>>4; 右移時,低四位被移出,高四位移入0,就是你要的結果了
disbuf[1]=firstdat&0x0f;
disbuf[2]=seconddat>>4;
disbuf[3]=seconddat&0x0f;
或者
disbuf[0]=firstdat/16; 除以16 得到 16 進制的十位
disbuf[1]=firstdat%16; 對16取余得到 16進制的個位
disbuf[2]=seconddat/16;
disbuf[3]=seconddat%16;
就行了吧
我想應該不會出現沒消影的,不知道你說的消影是指什麼現象

『伍』 單片機串口發送中斷程序

結部分我自己用的程序用參考下了

;***********************************************************************************************
ORG 0000H
SJMP START
ORG 0003H
LJMP INT0_INT
ORG 000BH
LJMP TIMER0_INT
ORG 0023H
LCALL UART_INT
RETI

;-----------------------------------------------

START:
MOV SP,#70H
LCALL INITIAL ; 初始化
;
LCALL LOAD_DATA ;讀入EPORM數據
;
MOV A,DATA_SET_ALME ;設置參數-警報開關
CLR ALM_ON
JZ SS1
SETB ALM_ON
SS1:
;
MOV DIS_S_DA1,DATA_SET_SET1
MOV DIS_S_DA2,DATA_SET_SET2
MOV DIS_S_DA3,DATA_SET_SET3
MOV DIS_S_DA4,DATA_SET_SET4

;**************************************************
ORG 0050H
MAIN:

JNB KEY_HAVE_DO,MAIN_N1
LCALL KEY_INPUT_SCANF ;按鍵輸入掃描
MAIN_N1:

JNB HAVE_DATA_DO,MAIN_N2 ;接收數據要處理
CLR HAVE_DATA_DO
LCALL DATA_MANAGER ;接收數據處理
MAIN_N2:

JNB LED_OUT1,MAIN_N3
LCALL PLAUSE_OUT_STF
MAIN_N3:
JNB LED_OUT2,MAIN_N4
LCALL PLAUSE_OUT_STR
MAIN_N4:

JNB DATA_NEED_SAVE,MAIN_N5
CLR DATA_NEED_SAVE
LCALL SAVE_DATA
MAIN_N5:
JNB DATA_SET_NEED_SAVE,MAIN_N55
CLR DATA_SET_NEED_SAVE
LCALL SAVE_SET_DATA
MAIN_N55:

JB LED_ALM1,MAIN_N6
JB LED_ALM2,MAIN_N6
SETB ALM_OUT
SJMP MAIN_N7
MAIN_N6:
CLR ALM_OUT ;警報輸出
MAIN_N7:

;----------------------

JNB FLASH_ON,MAIN_N8
LCALL FLASH_DO ;閃爍
MAIN_N8:

;------
INC DELAY_COUNT
MOV A,DELAY_COUNT
CJNE A,DATA_SET_TIME,MAIN_N10 ;設置參數-時間間隔
MOV DELAY_COUNT,#0
CLR LED_AT
JNB LGD_CHECK_BIT,MAIN_N9
SETB LED_AT ;數據中斷
MOV DIS_DATA1,#14 ;E
MOV DIS_DATA2,#26 ;r
MOV DIS_DATA3,#26 ;r
MOV DIS_DATA4,#18

MAIN_N9:
LCALL LGD_SEND ;查詢發送
MAIN_N10:

LCALL DELAY
CPL LED
LCALL WARCH_DOG ;喂看門狗
SJMP MAIN

;-------------------------------------------------------

INT0_INT:
JB KEY_HAVE_DO,KEY_NO_DO
SETB KEY_HAVE_DO
KEY_NO_DO:
RETI

;-------------------------------------------

;***********************************************************************************

;OUT_485 BIT P3.3 ;485輸出允許-低

;****************************
UART_INT: ;串口中斷入口
CLR RI
CLR ES
PUSH ACC
PUSH PSW
;PUSH B
;
LCALL UART_MANAGER
;
;POP B
POP PSW
POP ACC
;JB TR0,IS_ON_DELAY

CLR RI
SETB ES
IS_ON_DELAY:
RETI
;*****************************

;-----------------
UART_SEND: ;發送
;
MOV SBUF,A ;
JNB TI,$ ;
CLR TI ;
RET ;
;奇偶發送;;;;;

;*****************************************
RECEIVE_ONE_BYTE: ;防死循環接收一個位元組 ,數據在A,RECEIVE_DATA_ERR 為1超時
MOV RECEIVE_DELAY1,#200 ;4Ms 實際1.3
RE_CHICK_RI:
JNB RI,RECEIVE_OUT_CHECK ;JNB RI,$
CLR RI
MOV A,SBUF
;LCALL PARITY_CHECK ;奇偶校驗
;JC RECEIVE_BYTE_ERR
CLR RECEIVE_DATA_ERR
RET
RECEIVE_OUT_CHECK:
MOV RECEIVE_DELAY2,#221 ;100uS 11.0592M(5T)
DJNZ RECEIVE_DELAY2,$
DJNZ RECEIVE_DELAY1,RE_CHICK_RI
RECEIVE_BYTE_ERR:
MOV A,#00H
SETB RECEIVE_DATA_ERR ;接收超時
RET
;********************************************

;****************************************
LGD_SEND: ;發送

CLR OUT_485_EA ;485發
CLR ES
NOP
MOV A,#01H ;01
LCALL UART_SEND
MOV A,#41H ;41
LCALL UART_SEND
MOV A,#0DH ;0D
LCALL UART_SEND
NOP
CLR RI
SETB ES
SETB OUT_485_EA ;485收

SETB LGD_CHECK_BIT
RET

;*******************************************

UART_MANAGER:

MOV A,SBUF
CJNE A,#41H,RECEIVE_ERROR ;41

LCALL RECEIVE_ONE_BYTE
JB RECEIVE_DATA_ERR,RECEIVE_ERROR ;接收超時
CJNE A,#30H,RECEIVE_ERROR ;30

LCALL RECEIVE_ONE_BYTE
JB RECEIVE_DATA_ERR,RECEIVE_ERROR ;接收超時
MOV RECEIVE_DATA_BUF1,A ;D1

LCALL RECEIVE_ONE_BYTE
JB RECEIVE_DATA_ERR,RECEIVE_ERROR ;接收超時
MOV RECEIVE_DATA_BUF2,A ;D2

LCALL RECEIVE_ONE_BYTE
JB RECEIVE_DATA_ERR,RECEIVE_ERROR ;接收超時
MOV RECEIVE_DATA_BUF3,A ;D3

LCALL RECEIVE_ONE_BYTE
JB RECEIVE_DATA_ERR,RECEIVE_ERROR ;接收超時
MOV RECEIVE_DATA_BUF4,A ;D4

LCALL RECEIVE_ONE_BYTE
JB RECEIVE_DATA_ERR,RECEIVE_ERROR ;接收超時
;D5

LCALL RECEIVE_ONE_BYTE ;ALL
JB RECEIVE_DATA_ERR,RECEIVE_ERROR ;接收超時

LCALL RECEIVE_ONE_BYTE ;45
CJNE A,#45H,RECEIVE_ERROR
JB RECEIVE_DATA_ERR,RECEIVE_ERROR ;接收超時

CLR LGD_CHECK_BIT ;接收成功
;
SETB HAVE_DATA_DO ;接收數據要處理
RECEIVE_ERROR:
RET

『陸』 單片機程序的一些疑問,請問這條語句是什麼功能啊

你貼出來的程序中是沒有遞增,從語義上來講這應該是一個計時器,一般需要使用計時器時這個變數應該在定時器中斷中遞增,所以你到定時器中斷函數中看一下這個變數是否有遞增操作。

『柒』 串口調試助手向單片機發送一串數字,單片機只顯示最後一位,該怎麼解決

你好!!
你每次串口中斷的時候都會 uint m=0;
那你 m++ 還有什麼意義,把 uint m=0; 拿到中斷的外面;中斷結束後 m 清零
還有,別用 while 循環,用 if 判斷

『捌』 單片機編程(求共陰數碼管轉換成共陽數碼管的程序)

並不用改動段碼的數組。
顯示一位數字,要改動如下:
P2 = ~0xfe;
P0 = ~tab[buf[0]];
delay(10);
P0 = ~0x00;
看到了嗎?改動,就是加上了三個波浪號,即代表取反。
其餘三位,都依此類推,即可。

『玖』 單片機串口SBUF與數組的問題..

你的A是字元還是十六進制吶?
//假設你單片機想接收的是十六進制的,程序如下

uchar char_count = 0;

if(temp == ',')
{
char_count = 0;
}
else
{
if(temp >= 'a' && temp <= 'f')
{
temp = temp - 'a' + 10;
}
else if(temp >= 'A' && temp <= 'F')
{
temp = temp - 'A' + 10;
}
else if(temp >= '0' && temp <= '9')
{
temp = temp - '0';
}

char_count++;
if(char_count >= 2)
{
temp = buf[--j] * 16 + temp;
}

buf[j++] = temp;
}

閱讀全文

與單片機buf4相關的資料

熱點內容
rf3148編程器 瀏覽:505
浙江標准網路伺服器機櫃雲主機 瀏覽:587
設置網路的伺服器地址 瀏覽:600
java圖形界面設計 瀏覽:751
純前端項目怎麼部署到伺服器 瀏覽:538
瓜子臉程序員 瀏覽:505
如何保證伺服器優質 瀏覽:94
小微信aPP怎麼一下找不到了 瀏覽:299
演算法纂要學術價值 瀏覽:975
程序員你好是什麼意思 瀏覽:801
倩女幽魂老伺服器如何玩 瀏覽:561
電子鍾單片機課程設計實驗報告 瀏覽:999
看加密頻道 瀏覽:381
程序員算不算流水線工人 瀏覽:632
三星電視我的app怎麼卸載 瀏覽:44
簡述vi編譯器的基本操作 瀏覽:507
讓程序員選小號 瀏覽:91
加強數字貨幣國際信息編譯能力 瀏覽:584
購買的app會員怎麼退安卓手機 瀏覽:891
程序員的種類及名稱 瀏覽:295