(资料图)
老规矩,,,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; } }}
标签:
老规矩,,,c语言部分跳过 课后作业3,,串口下发字符,进行显示 写错了,,
本周五,美国三大股指集体收涨。从全周来看,本周一,美股因公共假期休
(崔志平孙红芳)河北省故城县人民法院8日透露,该法院在各界联动配合下
第23分钟阿森西奥送出妙传,莫拉塔先拔头筹帮助西班牙队取得领先。第39
华为推出新手机mate60PRO这个事现在已经炒得沸沸扬扬了,肯定的是美国