五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

第12章-指針基礎與1602液晶的初步認識

2023-09-09 13:29 作者:feifeiluan2  | 我要投稿

老規(guī)矩,,,c語言部分跳過

//課后作業(yè)3,,串口下發(fā)字符,進行顯示
//寫錯了,,,寫成字符串了,,,

#include "reg52.h"

///////////////////// 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

// 開發(fā)板
#define SYS_CLK (11059200)
#define MCU_nT (12)
#define TIMER_CLK (SYS_CLK / MCU_nT)

//////////////////////////////////////////////////////

#define LCD1602_DB P0
sbit 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液晶的初步認識的評論 (共 條)

分享到微博請遵守國家法律
沾化县| 博爱县| 岳阳市| 微山县| 叶城县| 鸡西市| 遂川县| 富源县| 施秉县| 咸丰县| 林甸县| 蒙城县| 舞阳县| 扎鲁特旗| 蚌埠市| 潢川县| 铁岭市| 泾川县| 吉木萨尔县| 威宁| 玉溪市| 河间市| 合山市| 托克托县| 平昌县| 逊克县| 杨浦区| 青州市| 浮梁县| 伊春市| 安徽省| 隆化县| 万年县| 新巴尔虎右旗| 天门市| 精河县| 珲春市| 吉林省| 东安县| 乃东县| 秦皇岛市|