📄 scom.c
字号:
//和查询发送,另外我觉得发送没有必要用中断,因为程序的开销是一样的
#include <reg51.h>
#include <string.h>
#define INBUF_LEN 4 //数据长度
unsigned char inbuf1[INBUF_LEN];
unsigned char checksum,count3 , flag,temp,ch;
bit read_flag=0;
sbit BEEP=P1^3;
sbit relay=P1^2;
sbit clk=P1^0;
sbit din=P1^1;
unsigned char code ledcode[]={0x11,0x7D,0x23,0x29,0x4D, 0x89,0x81,0x3D,0x01,0x09,0x05,\
0xc1,0x8f,0x61,0x83,0x87};//数码管段码
void leddisp(unsigned char num);
//初始化串口
void init_serialcomm(void)
{
SCON=0x50; //在11.0592MHz下,设置串行口波特率为9600,方式1,并允许接收
PCON=0x00;
ES=1; //开串口中断
TMOD=0x21; //定时器工作于方式2,自动装载方式
TL1=0XFD;
TH1=0XFD;
TR1=1;
EA=1;
}
//中断服务程序
void serial () interrupt 4 using 3
{
if(RI)
{
RI=0;//清中断标志
ch=SBUF;//读取接收寄存器
ch=SBUF;
leddisp(ch);//调用数码管显示子程序,将接收到的数据显示到数码管上
}
if(TI)
{
TI=0;//清发送标志位
}
}
//送数码管显示
void leddisp(unsigned char num)
{
unsigned char i,k;
k=ledcode[num];
for(i=0;i<8;i++)//共8位
{
if((k&0x01)==0x01)
din=1;
else
din=0;
clk=0;
clk=1;
k>>=1;
}
}
main()
{
init_serialcomm(); //初始化串口
leddisp(0);//数码管显示0
leddisp(1);//数码管显示1
leddisp(2);//数码管显示2
leddisp(3);//数码管显示3
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -