#include<p18f452.h>
#include<delays.h>
#pragma config OSC=HS
#pragma config WDT=OFF
#pragma config LVP=OFF
#define EN PORTBbits.RB3
#define RW PORTBbits.RB4
#define RS PORTBbits.RB5
#define STA PORTDbits.RD7
void busy(void);
void delay(int n);
void LCD1602_Init(void);
void write_cmd(unsigned char m);
void write_data(unsigned char x,unsigned char y,unsigned char k);
//异步发送
void UART_send_init(void)
{
TXSTA=0x00;
RCSTAbits.SPEN=1;
SPBRG=25; //异步模式,波特率设置为2400
}
//异步接收
void UART_rec_init(void)
{
TXSTA=0x00;
RCSTAbits.SPEN=1;
RCSTAbits.CREN=1; //异步接受,允许连续接收字节
SPBRG=25; //异步模式,波特率设置为2400
}
void main()
{
int num=1,flag=1;
TRISC|=0x80;
TRISC&=0xbf;
TRISD=0;
PORTD=0;
TRISB&=0x01;
TRISB|=0x01;
LCD1602_Init();
busy();
while(1)
{
while(flag==1)
{
UART_send_init();
TXSTAbits.TXEN=1;
TXREG=1; //为什么没有这条指令就不能传送数据?照理说TXREG为空时TXUF位为1,进入死循环后就给TXREG赋值的?
while(flag==1)
{
if(PIR1bits.TXIF==1)
{
TXREG=num;
num++;
while(PIR1bits.TXIF==1);
}
if(num==256)num=0;
if(PORTBbits.RB0==0)
{
flag=1-flag;
while(PORTBbits.RB0==0);
}
}
}
while(flag==0)
{
UART_rec_init();
while(flag==0)
{
if(PIR1bits.RCIF==1)
{
num=RCREG;
}
write_data(1,0,'1'+num);
if(PORTBbits.RB0==0)
{
flag=1-flag;
while(PORTBbits.RB0==0);
}
}
}
}
}
void busy(void)
{
TRISDbits.TRISD7=1;
RS=0;
RW=1;
EN=1;
while(STA==1);
EN=0;
TRISDbits.TRISD7=0;
}
void LCD1602_Init(void)
{
Delay1KTCYx(15);
write_cmd(0x38);
Delay1KTCYx(5);
write_cmd(0x38);
Delay1KTCYx(5);
write_cmd(0x38);
write_cmd(0x38);
write_cmd(0x08);
write_cmd(0x01);
write_cmd(0x06);
write_cmd(0x0c);
}
void write_cmd(unsigned char m)
{
busy();
RS=0;
RW=0;
PORTD=m;
EN=1;
Delay1KTCYx(2);
EN=0;
}
void write_data(unsigned char x,unsigned char y,unsigned char k)
{
x&=0x0f;
y&=0x01;
if(y==0x00)write_cmd(x|0x80);
else write_cmd((x+0x40)|0x80);
busy();
RS=1;
RW=0;
PORTD=k;
EN=1;
Delay1KTCYx(2);
EN=0;
}
/*
void UART_init(void)
{
TRISC|=0x80;
TRISC&=0xbf;
TXSTA=0x90;
RCSTAbits.SPEN=1;
SPBRG=103; //同步模式下设置波特率为9600
// TXREG=0xff;
}
void main()
{
int num=1;
UART_init();
TXSTAbits.TXEN=1;
// TXREG=1;
while(1)
{
if(PIR1bits.TXIF==1)
{
TXREG=num++;
while(PIR1bits.TXIF==1);
}
if(num==256)num=0;
}
}
*/
UART.rar_UART通信
版权申诉
86 浏览量
2022-09-20
21:15:36
上传
评论
收藏 15KB RAR 举报
Kinonoyomeo
- 粉丝: 77
- 资源: 1万+
最新资源
- 基于SHT25温湿度传感器、FREERTOS、STM32F103C8T6、LCD1602温湿度采集显示系统proteus仿真设计
- C# 屏幕放大取色器 随时随地获取屏幕像素颜色
- 下载安装这个软件.apk
- 【数据集详细解释及案例分析】数据集详细解释及案例分析
- 基于SHT71温湿度传感器、STM32F103C8T6、LCD1602温湿度采集显示系统proteus仿真设计
- 基于TH02温湿度传感器、STM32F103C8T6、LCD1602、FREERTOS的温湿度采集系统proteus仿真设计
- 【TCP-IP协议详细解释及案例分析】TCP-IP协议详细解释及案例分析
- 一文搞懂 LSTM(长短期记忆网络).rar
- 【autosar简介及基本案例解析】autosar简介及基本案例解析
- java模拟斗地主洗牌发牌
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈