您的当前位置:首页>资讯 > 正文

第12章-指针基础与1602液晶的初步认识

  • 2023-09-09 13:44:32 来源:哔哩哔哩


(资料图)

老规矩,,,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;        }    }}

标签:

推荐阅读

第12章-指针基础与1602液晶的初步认识

老规矩,,,c语言部分跳过 课后作业3,,串口下发字符,进行显示 写错了,,

iPhone 15,下周发布!苹果股价却暴跌近6%!啥情况?

本周五,美国三大股指集体收涨。从全周来看,本周一,美股因公共假期休

河北故城法院成功调解一起长达5年邻里纠纷案

(崔志平孙红芳)河北省故城县人民法院8日透露,该法院在各界联动配合下

莫拉塔独中三元,7-1倒数第2踢疯,世界杯前冠军一夜升至第2

第23分钟阿森西奥送出妙传,莫拉塔先拔头筹帮助西班牙队取得领先。第39

中国仅用芯片就能让美紧张?我们需要更多的华为,拿下这场大战

华为推出新手机mate60PRO这个事现在已经炒得沸沸扬扬了,肯定的是美国

猜您喜欢

【版权及免责声明】凡注明"转载来源"的作品,均转载自其它媒体,转载目的在于传递更多的信息,并不代表本网赞同其观点和对其真实性负责。亚洲网倡导尊重与保护知识产权,如发现本站文章存在内容、版权或其它问题,烦请联系。 联系方式:8 86 239 5@qq.com,我们将及时沟通与处理。