📄 serial port_1602.c
字号:
/**********************
编写时间:2008年09月28日
编辑:小鱼儿
功能:用串口通讯发送一个十六进制数,用1602显示,并有八个发光二极管
以二进制的形式点亮,其十六进值与1602显示一致。
***********************/
#include "reg52.h" //头文件
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
uchar a,b,flag,num;
sbit lcden=P3^4; //LCD使能位引脚定义
sbit lcdrs=P3^5; //LCD数据命令选择引脚定义
sbit dula=P2^6;//数码管段选
sbit wela=P2^7;//数码管位选
sbit beep=P2^3;//蜂鸣器引脚定义
uchar code table[]=" ";
void delay(uint z)//延时子程序
{
uint x,y;
for(x=z;x>0;x--)
for(y=125;y>0;y--);
}
/*************************
1602
**************************/
void write_com(uchar com) //写命令
{
lcdrs=0;
P0=com;
delay(1);
lcden=1;
delay(1);
lcden=0;
}
void write_data(uchar date) //写数据
{
lcdrs=1;
P0=date;
delay(1);
lcden=1;
delay(1);
lcden=0;
}
void init() //初始化
{
dula=0;
wela=0;
lcden=0;
write_com(0x38);//显示模式设置
write_com(0x0c);//不显示光标
write_com(0x06);
write_com(0x01);//显示清零
write_com(0x80+0x10);
}
void main()
{
init();
TMOD=0x20;//设置定时/计数器T1的工作方式为方式2
TH1=0xfd;
TL1=0xfd;
TR1=1;//运行控制位
SM0=0;
SM1=1;//SCON 串行口的工作方式为方式1
REN=1;//允许串行接受
EA=1; //开总中断
ES=1;//开串行口中断允许位
PCON=0x00;
beep=1;//关蜂鸣器
while(1)
{
write_com(0x80);
for(num=0;num<2;num++)
{
write_data(table[SBUF]); //第一行显示
delay(100);
}
if(flag==1)
{
ES=0;//
flag=0;
SBUF=a;
while(!TI);
TI=0;//TI为发送中断标志位,硬件置1,软件置0
ES=1;
`}
}
}
void serial() interrupt 4
{
P1=SBUF;
a=SBUF;
flag=1;
RI=0;//接受中断标志位,硬件置1,软件置0
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -