我正在使用AVR C與Atmega微控制器。我正在使用串行通信,我想傳送一個字符「A」到屏幕,然後擦除它並顯示「B」。我在清理屏幕時遇到麻煩。AVR C:串行通信清除屏幕
我讀了ESC ESC可以工作,所以我試了一下。
#define F_CPU 16000000UL
void initUART(unsigned int baud);
void transmitByte(unsigned char data);
unsigned char receiveByte(void);
int getNumOfDigits(int num);
void printDec(int num);
int main(void) {
DDRB = 0b00000011;
PORTB = 0b00011000;
initUART(9600);
while(1) {
//s1 pressed
if ((PINB & 0b00001000) == 0) {
transmitByte('A');
transmitByte((char) 27);
transmitByte('B');
_delay_ms(1000);
}
}
return 0;
}
void initUART(unsigned int baud) {
/*
Initialize settings for uart functions.
Must be done once at the beginning of the program.
*/
//Normal mode UBRR formula
unsigned int ubrr = F_CPU/16/baud-1;
//shift MSB and store in UBRR0H
UBRR0H = (unsigned char) (ubrr >> 8);
//store LSB in UBRR0L
UBRR0L = (unsigned char) ubrr;
//Enable transmitter/receiver
UCSR0B = (1 << RXEN0) | (1 << TXEN0);
//8-Bit Characters, 0 Stop bits, No parity
UCSR0C = (1 << UCSZ00) | (1 << UCSZ01);
}
void transmitByte(unsigned char data) {
/*
Write byte to UART
*/
//Wait for empty transmit buffer
while(!(UCSR0A & (1 << UDRE0)));
//Start transmission by writing to UDR0
UDR0 = data;
}
unsigned char receiveByte(void){
/*
Read byte from UART
*/
//Wait for incoming byte
while(!(UCSR0A & (1 << RXC0)));
//Return the byte
return UDR0;
}
但其沒有工作,我是相當新的微控制器,它只是打印
AAAA..
如何清除屏幕,然後串行通信屏幕上打印一個新的角色,我使用膩子。
更新
transmitByte('A');
transmitByte(27); // this is the escape
transmitByte('[');
transmitByte('2');
transmitByte('J'); // uppercase J
transmitByte('^');
transmitByte('[');
transmitByte('H');
transmitByte('B');
輸出
如何得到光標回其一部開拓創新的地位?
最終工作
transmitByte('A');
transmitByte(27); // this is the escape
transmitByte('[');
transmitByte('2');
transmitByte('J'); // uppercase J
transmitByte(27);
transmitByte('[');
transmitByte('H');
transmitByte('B');
上面的代碼工作,擦除和移動光標回。
[This may help](http://stackoverflow.com/a/15559322/1790864)。 –
轉義字符只是引入了一個字符串,它執行一些特殊的命令,在這個cae「BAB」中什麼都不做。更好的選擇可能會退格,回車或換頁。 8,13或12.嘗試一下,看看會發生什麼 – UncleO