⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uart2.c

📁 kiell下的一个51 UART 程序,通过串口可以接收来自电脑的字符并以数字形式显示,也可以发送字符
💻 C
字号:
#include <reg52.H>
#include <stdio.h>
#include <string.h>

sbit dight1=P3^2;
sbit dight2=P3^3;
sbit dight3=P3^6;
sbit key1=P2^0;

sbit key2=P2^1;
unsigned char code dispdata[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
unsigned char disbuf[3],rbuf[4],sbuf[25],j;
bit c;



void init(void )
{

SCON = 0x50; //串口方式1,允许接收
TMOD = 0x20; //定时器1 定时方式2

PCON=0x00;
TH1 = 0xfd; //11.0592MHz  波特率     9600
TL1 = 0xfd;
EA=1;
ES=1;
TR1 = 1;   //启动定时器
}

void Delay1()
{
  int i;  
  for(i=0;i<500;i++)   
   {;} 
}

void Display()
{  
   P1=disbuf[0];
	dight1=0;
	Delay1();
	dight1=1;
	P1=disbuf[1];
	dight2=0;
	Delay1();
	dight2=1;
	P1=disbuf[2];
	dight3=0;
	Delay1();
	dight3=1; 
}

//void Delay(unsigned int a)
//{
 // int i;  
 // for(i=0;i<a;i++)   
  // {;} 
//}

void changedata(unsigned int val)
{
  unsigned char a,b;
  a=val/100;
  if(!a)
  {
  c=1;
  a=10;
  }
  val=val%100;
  b=val/10;
  if(c)
  {
  if(!b)  
  b=10;
  }
  val=val%10;
  c=0;
  disbuf[2]=dispdata[a];
  disbuf[1]=dispdata[b];
  disbuf[0]=dispdata[val];
}


/*int Hatoi(char ch)
{
    if(isdigit(ch)) return ch - '0';
    return ch - 'A' + 10;
}

unsigned int Hstod(char *ch, int digit)
{
    unsigned int result;
    unsigned int i, j, len ;
    for(len = 0; len < digit && isxdigit(ch[len]); len++);
    result = 0;
    for(i = 0; i < len; i++) {
        if((j=Hatoi(ch[i])) != 0) result += j*(1<<(4*(len-i-1)));
    }
    return result;
}

/*int Dtohs(unsigned int val, char *buffer)
{
    char  tempc[20];
    char *bufptr;
    unsigned int i;

    *(bufptr = &tempc[19]) = 0;

    do {
        if((i=(val&0x0f)) > 9) *--bufptr = 'A' + i - 10;
        else *--bufptr = '0' + i;
    } while(val /= 16);

    memcpy(buffer, bufptr, val = (tempc + 20) - bufptr);
    return val - 1;   //  DON'T COUNT NULL TERMINATION 
}*/


void send()
{
  unsigned char i;
  EA=0;
 for(i=0;i<22;i++)
 {
  SBUF=sbuf[i];
  while(TI==0);
  TI=0;
  }
  EA=1;
  
}

void send2()
{
  unsigned char i;  
  EA=0;
  sprintf(sbuf,"I love you very much!");
 for(i=0;i<22;i++)
 {
  SBUF=sbuf[i];
  while(TI==0);
  TI=0;
  }
  EA=1;
  
}

void reserv() interrupt 4 using 2
{
  unsigned char ic,nc=0;
  unsigned int lStartTime=0;
  EA=0;
  
	 for(;;)
	 {
	  if(RI)
	  {
	   ic = SBUF;	    //read data from COM3 port
		if(ic == '\r' || nc >= 3) break;
		rbuf[nc++] = ic;
		lStartTime = 0;
		RI=0;
		}
		//Display();
	  	if(lStartTime++ == 10000) break;
	 }	 
	RI=0;
  EA=1;
}

void main()
{
 unsigned int i;

 P0=0;
 P1=0;
 P2=0;
 init();
 while(1)
 {
  Delay1();
  disbuf[0]=dispdata[rbuf[2]-48]; 
  disbuf[1]=dispdata[rbuf[1]-48];
  disbuf[2]=dispdata[rbuf[0]-48];
  //changedata(1);
  Display();
  Delay1();
  if(key1)
  for(i=0;i<20;i++)
  Display();
  if(key1)
  {
    /*sbuf[0]='I';
 	 sbuf[1]='l';
	 sbuf[2]='o';
	 sbuf[3]='v';
	 sbuf[4]='e';*/
	 sprintf(sbuf,"I love you very much!");
    send();
  }

  if(key2)
  for(i=0;i<20;i++)
  Display();
  if(key2)
  {
    /*sbuf[0]='I';
 	 sbuf[1]='l';
	 sbuf[2]='o';
	 sbuf[3]='v';
	 sbuf[4]='e';*/
	 sprintf(sbuf,"you are wellcom!");
    send();
  }

  if(rbuf[0]==5) 
  {
   sbuf[0]=6;
	sbuf[1]=16;
	sbuf[2]=~sbuf[1];
	for(j=0;j<3;j++)
	{
   SBUF=sbuf[j];
   while(TI==0);
   TI=0;
	}
  }
  //Delay1();
  if(rbuf[0]==6) 
  {
   send2();
  }
 }
 
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -