最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(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液晶的初步認識的評論 (共 條)

分享到微博請遵守國家法律
延寿县| 驻马店市| 前郭尔| 祁东县| 商都县| 威海市| 米泉市| 宜阳县| 洪洞县| 道真| 句容市| 柳江县| 会同县| 民勤县| 台州市| 社会| 三都| 临沭县| 隆昌县| 苏州市| 治多县| 长沙市| 永新县| 安顺市| 德庆县| 外汇| 盈江县| 西乌珠穆沁旗| 武城县| 仁布县| 阳原县| 云和县| 石河子市| 富阳市| 乐东| 化隆| 宁南县| 静海县| 五莲县| 吴旗县| 武山县|