• 大小: 3KB
    文件类型: .c
    金币: 1
    下载: 0 次
    发布日期: 2021-05-10
  • 语言: C/C++
  • 标签: 串口通信  

资源简介

串口通信程序,附带详细说明! //程序功能:接收串口发过来的字符,当字符分别为12345的时候分别返回OKMCU字母,当为其他字符的时候,把接收内容返回。 #include #include //内部包含延时函数 _nop_(); typedef unsigned char u8; typedef unsigned int u16; sbit SER_595 =P1^0; //串行数据输入 sbit SCK_595 =P1^1; //移位时钟脉冲 sbit RCK_595 =P1^2; //输出锁存器控制脉冲 u8 i,j,k; u8 code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, //数码管编码 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; u8 temp,buf; //u8 disbuf[2]={0x00,0x00}; void sdelay(u8 n) //延时程序 { u8 i; for(i=n;i>0;i--); } /******************************************************* * * * 驱动函数 595 * * * *******************************************************/ void smg595(u8 byte) { u8 num,c; num=byte; for(c=0;c<8;c++) { SCK_595=0; num=num<<1; SER_595=CY; SCK_595=1; } for(c=0;c<8;c++) { SCK_595=0; SER_595=0; SCK_595=1; } RCK_595=0; RCK_595=1; } void dis8(u8 r,u8 c) //数码管显示程序(第c个数码管显示r) { smg595(~(1<<c)); //数码管位信号输出 P0=table[r]; //数码管段信号输出 sdelay(10); P0=0; } /********************************************************* 发送数据函数 *********************************************************/ void senddata(u8 dat) { SBUF =dat; while(!TI); TI = 0; } /********************************************************* 串行中断服务函数 *********************************************************/ void serial() interrupt 4 { RI = 0; //清除串行接受标志位 ES = 0; //关闭串行中断 buf = SBUF; //从串口缓冲区取得数据 switch(buf) { case 0x31: senddata('O');break; //接受到1,发送字符'O'给计算机 case 0x32: senddata('K');break; //接受到2,发送字符'K'给计算机 case 0x33: senddata('M');break; //接受到3,发送字符'M'给计算机 case 0x34: senddata('C');break; //接受到4,发送字符'C'给计算机 case 0x35: senddata('U');break; //接受到5,发送字符'U'给计算机 default: s

资源截图

代码片段和文件信息

//程序功能:接收串口发过来的字符,当字符分别为12345的时候分别返回OKMCU字母,当为其他字符的时候,把接收内容返回。
#include
#include   //内部包含延时函数 _nop_();
typedef  unsigned char   u8;
typedef  unsigned int    u16;

sbit  SER_595  =P1^0; //串行数据输入
sbit  SCK_595  =P1^1;   //移位时钟脉冲
sbit  RCK_595  =P1^2;   //输出锁存器控制脉冲

u8 ijk;
u8 code table[]={0x3f0x060x5b0x4f0x660x6d0x7d //数码管编码
                        0x070x7f0x6f0x770x7c0x390x5e0x790x71};

u8 tempbuf;
//u8 disbuf[2]={0x000x00};
void sdelay(u8 n) //延时程序
{
u8 i;
for(i=n;i>0;i--);
}
/*******************************************************
*                                                      *
* 驱动函数  595                                      *
*                                                      *
*******************************************************/
void smg595(u8 byte)
{    
u8 numc; 
num=byte;      
for(c=0;c<8;c++)
{
SCK_595=0;
num=num<<1;
SER_595=CY;
SCK_595=1;
}
for(c=0;c<8;c++)
{
SCK_595=0;
SER_595=0;
SCK_595=1;
}
RCK_595=0;
RCK_595=1; 
}

void dis8(u8 ru8 c) //数码管显示程序(第c个数码管显示r)
{
smg595(~(1< P0=table[r]; //数码管段信号输出
sdelay(10);
P0=0;
}


/*********************************************************

  发送数据函数

*********************************************************/
void senddata(u8 dat)
{
     SBUF =dat;
     while(!TI);
     TI = 0;
}

/*********************************************************

  串行中断服务函数

********************

评论

共有 条评论