導航:首頁 > 編程語言 > c51顯示緩存區編程方法

c51顯示緩存區編程方法

發布時間:2024-08-24 03:51:13

A. 為什麼c51程序中總會出現 syntax error near 'int'

有兩個問題:1、變數的定義要放到函數的開始位置;
2、單片機寄存器的位引用要使用^,比如P2^5;
改過後的程序:
#include"reg51.h"
#include"string.h"
#include"intrins.h"
#include"absacc.h"
#include"stdlib.h"
#include"math.h"
typedef unsigned char uchar;
sbit BEEP=P1^1; //蜂鳴器
sbit KEY=P1^2;//LED
uchar table[17]={0x28,0x7e,0xa2,0x62,0x74,0x61,0x21,0x7a,0x20,0x60,0x30,0x25,0xa9,0x26,0xa1,0xb1};
uchar disbuff;//顯示緩存
uchar key;
void display(unsigned char disp);
void beep();
void keyscan(void);
void keydown(void);
void delay0(unsigned char x);
void delay(unsigned char x);
void main (void)
{
P0=0xff;
P1=0xff;
P2=0xff;
disbuff=0xbf;
while(1)
{
keyscan();
keydown();
display(disbuff);
delay(2);
}
}
void keyscan(void)
{unsigned int i ;
P2=0xFE;
key=P2;

//unsigned int i ;//總是在這里出錯
for (i=0;i<4;i++)
{ if(P2<key)
{
if(P2^6==0)
key=i+i*3+2;
else if(P2^5==0)
key=i+1+i*3;
else key=i+i*3;
break;
}
P2=P2<<1;
}
disbuff=table[key];
}

B. C51單片機動態顯示秒分時

兄弟,我粗粗看了一下,問題的確在定時器上。
先告訴你怎麼解決吧:
if(TF0==1)
{
//加上以下幾句
TF0=0;
TH0=(65536-20000)/256;//
TL0=(65536-20000)%256;//定時20ms

………你自己的程序……
buffer[4]=hour%10;
buffer[5]=hour/10;

}
如果你的定時器初始值TH0,TL0沒有計算錯的話應該正常了。

你的原因在:方式1定時器溢出之後TF0是需要手動清零的。因為你沒有清0,所以if(TF0==1)這個判斷一直成立,定時器當然沒有用了。
再者,方式1定時器溢出之後TH0,TL0會自動清零,如果需要定時器繼續按方式1工作下去,應該再給TH0,TL0重新賦初值或定時時間常數。

最後有個建議,
TH0=(65536-20000)/256;//
TL0=(65536-20000)%256;//定時20ms
這兩個TH0,TL0定時常數賦值還是你自己直接算一下寫進去好了,反正是個常數。單片機計算上面兩個式子很累的啊,特別是這里的除法,取余運算。

C. keil C51程序編譯的問題

如果你的H頭文件包含在每個.C文件中,那就是說你的每個.C文件都定義了sbuf[20],KEIL就會提示你說你的sbuff[20]重復定義。我理解的應該是這個問題吧?

解決辦法,要麼用條件編譯區分sbuff的作用域,就是在哪些.c文件中使用。
要麼在一個.c文件中定義sbuff,在H文件中用外部聲明包含進去,比如:
extern unsigned char data char sbuf[20];這樣在其他的.C文件中,sbuff是引用而不是定義了。

一般都是採用第二種方式,H文件只存放外部聲明。

D. 單片機中的顯示緩沖區是什麼,有什麼用

單片機中的顯示緩沖區就是幾個變數或者一個數組而已,用於保存需要顯示出來的數據。

程序將需要顯示的數據計算出來後保存在這裡面,然後當數碼管掃描函數運行時就將緩沖區內的數據發送出來了,這是一種比較優化的編程方法。

它能將數據計算部分和數碼管掃描部分的代碼分開,在復雜的程序中這樣寫可以簡化程序的調度。在很簡單的程序中沒必要這么寫。

(4)c51顯示緩存區編程方法擴展閱讀:

緩沖區的作用是為了解決速度不匹配的問題,高速的cpu與內存,內存與硬碟,cpu與io等速度不匹配的問題,而引人緩沖區,比如我們從磁碟里讀取信息,我們先把讀出的數據放在緩沖區,計算機再直接從緩沖區中讀取數據,等緩沖區的數據讀取完後再去磁碟中讀取。

這樣就可以減少磁碟的讀寫次數,再加上計算機對緩沖區的操作大大快於對磁碟的操作,故應用緩沖區可大大提高計算機的運行速度。

緩沖區就是一塊內存區,它用在輸入輸出設備和CPU之間,用來緩存數據。它使得低速的輸入輸出設備和高速的CPU能夠協調工作,避免低速的輸入輸出設備佔用CPU。解放出CPU,使其能夠高效率工作。

E. 請問C51單片機電子時鍾的設計程序怎麼樣編寫啊

BUFF_KEY EQU 21H ;鍵盤鍵
BUFF_LED1 EQU 22H ;數碼管顯示緩存
BUFF_LED2 EQU 23H
BUFF_LED3 EQU 24H
BUFF_LED4 EQU 25H
BUFF_LED5 EQU 26H
BUFF_LED6 EQU 27H
BUFF_LED_LP EQU 28H ;T0鍵盤顯示掃描緩存
HOR EQU 30H ;小時值緩存
MIN EQU 31H ;分鍾值緩存
SEC EQU 32H ;秒值緩存
F_BEEP BIT 01H
LED_PORT EQU P0
DIG_PORT EQU P2
KEY_PORT EQU P2
SW1 BIT P2.7
SW2 BIT P2.6
SW3 BIT P2.5
SW4 BIT P2.4
SW5 BIT P2.3
SW6 BIT P2.2
BEEP BIT P2.0
KEY BIT P3.3
org 000h
JMP main
ORG 00BH
JMP T0_INT
ORG 100H
MAIN: MOV SP ,#40H
MOV PSW,#00H
MOV R0,#7FH ;初始化RAM區,
CLR_RAM:MOV A,#00H
MOV @R0,A
DJNZ R0,CLR_RAM
MOV P1,0FFH ;INIT
MOV P2,0FFH
MOV P0,0FFH
MOV P3,0FFH
MOV TMOD,#21h
MOV TH0,#240 ;T0=4MS
MOV TL0,#96
SETB TR0
SETB ET0
SETB EA

WAIT_KEY:JB KEY,$ ;等候按鍵!
JNB SW1,SW1_OK
JNB SW2,SW2_OK
JNB SW3,SW3_OK
JNB SW4,SW4_OK
JNB SW5,SW5_OKA
JNB SW6,SW6_OKA
JMP WAIT_KEY
SW5_OKA: JMP SW5_OK
SW6_OKA: JMP SW6_OK
SW1_OK: MOV A,HOR
CJNE A,#24,SW1_OVER
MOV HOR,#00H
SETB F_BEEP
CLR BEEP
LCALL DEL
SETB BEEP
CLR F_BEEP
JMP WAIT_KEY
SW1_OVER:INC HOR ;時加1
SETB F_BEEP
CLR BEEP
LCALL DEL
SETB BEEP
CLR F_BEEP
JMP WAIT_KEY

SW2_OK: MOV A,HOR
CJNE A,#00,SW2_OVER
MOV HOR,#23
SETB F_BEEP
CLR BEEP
LCALL DEL
SETB BEEP
CLR F_BEEP
JMP WAIT_KEY
SW2_OVER:DEC HOR ;時減1
SETB F_BEEP
CLR BEEP
LCALL DEL
SETB BEEP
JMP WAIT_KEY

SW3_OK: MOV A,MIN
CJNE A,#59,SW3_OVER
MOV MIN,#00H
SETB F_BEEP
CLR BEEP
LCALL DEL
SETB BEEP
CLR F_BEEP
JMP WAIT_KEY
SW3_OVER:INC MIN ;分加1
SETB F_BEEP
CLR BEEP
LCALL DEL
SETB BEEP
CLR F_BEEP
JMP WAIT_KEY

SW4_OK: MOV A,MIN
CJNE A,#00,SW4_OVER
MOV MIN,#59
SETB F_BEEP
CLR BEEP
LCALL DEL
SETB BEEP
CLR F_BEEP
JMP WAIT_KEY
SW4_OVER:DEC MIN ;分減1
SETB F_BEEP
CLR BEEP
LCALL DEL
SETB BEEP
CLR F_BEEP
JMP WAIT_KEY

SW5_OK: MOV A,SEC
CJNE A,#59,SW5_OVER
MOV SEC,#00H
SETB F_BEEP
CLR BEEP
LCALL DEL
SETB BEEP
CLR F_BEEP
JMP WAIT_KEY
SW5_OVER:INC SEC ;秒加1
SETB F_BEEP
CLR BEEP
LCALL DEL
SETB BEEP
CLR F_BEEP
JMP WAIT_KEY

SW6_OK: MOV A,SEC
CJNE A,#00,SW6_OVER
MOV HOR,#59
SETB F_BEEP
CLR BEEP
LCALL DEL
SETB BEEP
CLR F_BEEP
JMP WAIT_KEY
SW6_OVER:DEC SEC ;時減1
SETB F_BEEP
CLR BEEP
LCALL DEL
SETB BEEP
CLR F_BEEP
JMP WAIT_KEY

DEL: MOV R5,#02 ;為演示方便,人為插入的延時
DEL01: MOV R6,#200
DEL02: MOV R7,#200
DJNZ R7,$
DJNZ R6,DEL02
DJNZ R5,DEL01
RET

BIN_BCD: MOV B,#10
DIV AB
RET

;------------- T0 INTRRUPT 數碼管掃描定時中斷---------------------------
T0_INT: PUSH ACC
PUSH PSW
MOV TH0,#240 ;T0=4MS
MOV TL0,#96
INC BUFF_LED_LP
MOV A,BUFF_LED_LP
CJNE A,#250,CONT_SCAN ;250*4MS=1S
MOV BUFF_LED_LP,#00H
INC SEC
MOV A,SEC
CJNE A,#60,CONT_SCAN
MOV SEC,#00H
INC MIN
MOV A,MIN
CJNE A,#60,CONT_SCAN
MOV MIN,#00H
INC HOR
MOV A,HOR
CJNE A,#24,CONT_SCAN
MOV HOR,#00H
clr beep
clr p1.0
lcall del
setb beep
setb p1.0
CONT_SCAN:MOV A,SEC
LCALL BIN_BCD
MOV BUFF_LED6,B
MOV BUFF_LED5,A
MOV A,MIN
LCALL BIN_BCD
MOV BUFF_LED4,B
MOV BUFF_LED3,A
MOV A,HOR
LCALL BIN_BCD
MOV BUFF_LED2,B
MOV BUFF_LED1,A
MOV A,BUFF_LED_LP
MOV B,#06
DIV AB
MOV A,B
RL A
MOV DPTR,#TAB_SCAN
JMP @A+DPTR
TAB_SCAN: AJMP SCAN_L1
AJMP SCAN_L2
AJMP SCAN_L3
AJMP SCAN_L4
AJMP SCAN_L5
AJMP SCAN_L6
SCAN_L1: MOV DIG_PORT,#01111111B
MOV A,BUFF_LED1
JMP END_SCAN
SCAN_L2: MOV DIG_PORT,#10111111B
MOV A,BUFF_LED2
JMP END_SCAN
SCAN_L3: MOV DIG_PORT,#11011111B
MOV A,BUFF_LED3
JMP END_SCAN
SCAN_L4: MOV DIG_PORT,#11101111B
MOV A,BUFF_LED4
JMP END_SCAN
SCAN_L5: MOV DIG_PORT,#11110111B
MOV A,BUFF_LED5
JMP END_SCAN
SCAN_L6: MOV DIG_PORT,#11111011B
MOV A,BUFF_LED6
END_SCAN: MOV DPTR,#TAB_LED
MOVC A,@A+DPTR
MOV LED_PORT,A
JNB F_BEEP,EXIT_T0
CLR BEEP
EXIT_T0: POP PSW
POP ACC
RETI

TAB_LED: DB 0C0H,0F9H,0A4H,0B0H,99H,92H ;數碼管顯示字型表
DB 82H,0F8H,80H,90H,88H,83H,0A7H
DB 0A1H,86H,8EH

END

閱讀全文

與c51顯示緩存區編程方法相關的資料

熱點內容
android判斷電話 瀏覽:162
如何刪除安卓手機里的安裝包 瀏覽:648
2021影視小程序源碼激勵廣告 瀏覽:202
java編程培訓機構 瀏覽:686
dtu源碼資料zip 瀏覽:696
蘋果6p是安卓的什麼配置 瀏覽:56
語音通話降噪演算法 瀏覽:474
pdf被加密不能列印 瀏覽:48
html內部伺服器錯誤什麼意思 瀏覽:768
加密金融風投是什麼 瀏覽:1001
未來之翼為什麼連接不了伺服器 瀏覽:563
手動壓縮噴霧器 瀏覽:654
linuxtimeval 瀏覽:703
煤氣罐解壓閥需要調緊嗎 瀏覽:234
兒研所APP為什麼沒有耳鼻喉科 瀏覽:1000
androidapp界面素材 瀏覽:820
一台伺服器主機建50台雲桌面 瀏覽:605
手機解壓了的圖片 瀏覽:885
stm32快閃記憶體編程教程 瀏覽:515
javassh管理系統源碼 瀏覽:7