(资料图)

老规矩,,,c语言部分跳过

//课后作业3,,串口下发字符,进行显示//写错了,,,写成字符串了,,,#include ""///////////////////// use keil ///////////////////////#if defined(__C51__)// 通用类型typedef signed char i8;typedef signed int i16;typedef signed long i32;typedef unsigned char u8;typedef unsigned int u16;typedef unsigned long u32;sfr16 TMR2 = 0xCC;  /* Timer 2: T2L 0CCh, T2H 0CDh */sfr16 RCAP2 = 0xCA; /* RCAP2L 0CAh, RCAP2H 0CBh */#define NOP _nop_();extern void _nop_(void);extern int sprintf(char *, const char *, ...);extern int sscanf(char *, const char *, ...);// 中断号#define EX0_INT interrupt 0#define T0_INT interrupt 1#define EX1_INT interrupt 2#define T1_INT interrupt 3#define UART_INT interrupt 4#define T2_INT interrupt 5#endif// 开发板#define SYS_CLK (11059200)#define MCU_nT (12)#define TIMER_CLK (SYS_CLK / MCU_nT)//////////////////////////////////////////////////////#define LCD1602_DB P0sbit LCD1602_RS = P1 ^ 0;sbit LCD1602_RW = P1 ^ 1;sbit LCD1602_E = P1 ^ 5;bit uartCntEnFlag = 0;u8 uartCnt = 0;bit strReadyFlag = 0;u8 strBuff[32];u8 strCnt = 0;u8 TH0RL, TL0RL;void LcdWaitReady(void){    u8 sta;    LCD1602_DB = 0xFF;    LCD1602_RS = 0;    LCD1602_RW = 1;    do    {        LCD1602_E = 1;        sta = LCD1602_DB;        LCD1602_E = 0;    } while (sta & 0x80);}void LcdWriteCmd(u8 cmd){    LcdWaitReady();    LCD1602_RS = 0;    LCD1602_RW = 0;    LCD1602_DB = cmd;    LCD1602_E = 1;    LCD1602_E = 0;}void LcdWriteDat(u8 dat){    LcdWaitReady();    LCD1602_RS = 1;    LCD1602_RW = 0;    LCD1602_DB = dat;    LCD1602_E = 1;    LCD1602_E = 0;}void InitLcd1602(void){    LcdWriteCmd(0x38);    LcdWriteCmd(0x0C);    LcdWriteCmd(0x06);    LcdWriteCmd(0x01);}void LcdSetCursor(u8 hang, u8 lie){    u8 addr;    if (hang == 0)        addr = 0 + lie;    else        addr = 0x40 + lie;    LcdWriteCmd(0x80 + addr);}void LcdShowStr(u8 hang, u8 lie, u8 *str){    LcdSetCursor(hang, lie);    while (*str != '\0')    {        LcdWriteDat(*str++);    }}void ConfigUART(u32 baud){    // UART    SCON = 0x50;    ES = 1;    // T1    TMOD = (TMOD & 0x0F) | 0x20;    TH1 = TL1 = 256 - (TIMER_CLK / 32 / baud);    ET1 = 0;    TR1 = 1;}void ConfigTimer0(u8 ms){    u16 tmp = 65536 - (TIMER_CLK * ms / 1000);    TMOD = (TMOD & 0xF0) | 0x01;    TH0 = TH0RL = (u8)(tmp >> 8);    TL0 = TL0RL = (u8)(tmp);    ET0 = TR0 = 1;}void main(void){    EA = 1;    InitLcd1602();    ConfigTimer0(1);    ConfigUART(9600);    while (1)    {        if (strReadyFlag)        {            LcdShowStr(0, 0, strBuff);            strReadyFlag = 0;            strCnt = 0;        }    }}void UART_ISR(void) UART_INT{    if (TI)    {        TI = 0;    }    if (RI)    {        RI = 0;        strBuff[strCnt++] = SBUF;        uartCnt = 0;        uartCntEnFlag = 1;    }}void T0_ISR(void) T0_INT{    TH0 = TH0RL;    TL0 = TL0RL;    if (uartCntEnFlag)    {        uartCnt++;        if (uartCnt > 100)        {            uartCntEnFlag = 0;            uartCnt = 0;            strBuff[strCnt++] = '\0';            strReadyFlag = 1;        }    }}

推荐内容