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

📄 main.c

📁 基于51单片机实现UART通信 SPI通信 和IIC通信
💻 C
字号:
#include	"Includes.h"


 unsigned char datTem[2]={0,0};      //温度值储存  datTem[1]高8位  datTem[0]低8位
 unsigned char  key=0;				//键盘扫描键值
 unsigned char uart_receive_date=0;	//串口接收数据
 bit flag=0;

 unsigned char code uart_transmit[]={"uart transmit"};
 unsigned char code spi_transmit[]={"SPI transmit"};

 void send_char_uart( unsigned char date); //串口发送
 void com_init();    //串口初始化

/*********************LCD初始化后显示"hello"****************************************/
void  hello(void)                                                   
{  
    unsigned  char X[14]={"Hello everyone"},a=0x80,i;
            WriteCommandLCM(0x01,1);
            for(i=0;i<14;i++,a++){
                                 display_lcm(X[i],a);
                                 Delay_Xms(5); Delay_Xms(5);
                                  }
             for(i=0;i<200;i++){
                     Delay_Xms(5); Delay_Xms(5);
                     }
            WriteCommandLCM(0x01,1);
}
/***************显示温度************/
void  temp_view(unsigned char *ddate)  
 {
   unsigned int  temp1=0,temp0=0,a,b,c,g,h,i,j,z;
   if((ddate[0]==0xFF)&&(ddate[1]==0xFF)){ ddate[0]=0;ddate[1]=0;}
   z=ddate[1]&0xF0;
    if(z>0) 				                     //正负温度符号判断显示
        display_lcm('-',0xc0);
    else  
        display_lcm('+',0xc0);
	if(z==0){								                //正温度处理
             temp1= ((ddate[1]&0x0F)<<4)+((ddate[0]&0xF0)>>4);
             temp0=(ddate[0]&0x0F)*625;
      		  }
    else {													   //负温度处理
	       temp1= (((~ddate[1])&0x0F)<<4)+(((~ddate[0]+8)&0xF0)>>4);
           temp0=((~ddate[0]+1)&0x0F)*625;
		  }
    a=(temp1%1000)/100;
      display_lcm(a+'0',0xc1);
    b=(temp1%100)/10;
      display_lcm(b+'0',0xc2);
    c=(temp1%10)/1;
      display_lcm(c+'0',0xc3); 
	   
      display_lcm('.',0xc4);    // 显示小数点

    g=(temp0%10000)/1000;
      display_lcm(g+'0',0xc5); 
    h=(temp0%1000)/100;
      display_lcm(h+'0',0xc6); 
    i=(temp0%100)/10;
      display_lcm(i+'0',0xc7); 
    j=(temp0%10)/1;
      display_lcm(j+'0',0xc8);

 }

/***************主函数***********************************/
void main()
{  
   unsigned char  baiwei=0,gewei=0,shiwei=0;
   unsigned int   shifen=0,baifen=0,qianfen=0,wanfen=0;
   	 
   LCMInit();
   com_init();
   hello();
   do{ 
       temp_view(datTem);
       key=keyscan();
       

	   if(uart_receive_date!=0)  display_lcm(uart_receive_date,0x8f);
	   
	      baiwei=((((datTem[1]&0x0F)<<4)+((datTem[0]&0xF0)>>4))%1000/100)+48;
		  shiwei=((((datTem[1]&0x0F)<<4)+((datTem[0]&0xF0)>>4))%100/10)+48;
          gewei=((((datTem[1]&0x0F)<<4)+((datTem[0]&0xF0)>>4))%10/1)+48;
		  shifen=(((datTem[0]&0x0F)*625)%10000/1000)+48;
		  baifen=(((datTem[0]&0x0F)*625)%1000/100)+48;
		  qianfen=(((datTem[0]&0x0F)*625)%100/10)+48;
		  wanfen=(((datTem[0]&0x0F)*625)%10/1)+48;


	   switch(key-'A')
	          {
			   case 0: {key=0;SPI_Transmit('A');} break;	     
			   case 1: {key=0;SPI_Transmit('B');} break;	      
			   case 2: {key=0;SPI_Transmit('C');} break;				     
			   case 3: {key=0;SPI_Transmit('D');} break;				     
			   case 4: {key=0;SPI_Transmit('E');} break;				     
			   case 5: {key=0;SPI_Transmit('F');} break;     
			   case 6: {  key=0;								  //G串口通信
			              diaplay_string(uart_transmit,13);
						  send_char_uart(baiwei);
			              send_char_uart(shiwei);
						  send_char_uart(gewei);
						  send_char_uart('.');
						  send_char_uart(shifen);
						  send_char_uart(baifen);
						  send_char_uart(qianfen);
						  send_char_uart(wanfen);
						  send_char_uart(' ');
			              WriteCommandLCM(0x01,1); 
				        } break;	  
			   case 7: {key=0;SPI_Transmit('G');} break;				     
			   default :  {} break;
		  if(uart_receive_date!=0)	 display_lcm(uart_receive_date,0x8f);
           uart_receive_date=0;
	 	  }
      }while(1);
}

/************************************************
UART 串口通信程序
*************************************************/
/*************串口初始化*********************/
void com_init()		
 { 
  TMOD=0x20;			  //定时器1方式2
  TH1=0xfd;			      //波特率9600
  TL1=0xfd;
  SCON=0x50;			  //串口工作方式1,允许接收 
  PCON= 0x00;             // 波特率不倍增   
  TR1=1;				  //启动定时
  IE=0x91;			      //开串口中断 等效于 EA=1;ES=1;EX0=1
 }
 

/*************向串口发送一个字符*********************/
void send_char_uart( unsigned char date) 
{  
   EA=0;
   SBUF=date; 
   while(TI==0);
   TI= 0 ;
   EA=1;
} 

/*************串口中断函数*********************/
void Uart_receive(void) interrupt 4  //串口中断接收
 {	
   EA=0;   
   if(RI)				   
      {
        uart_receive_date=SBUF;
		key=uart_receive_date;
		RI=0;
	  }	
   else TI=0;	   //发送中断。则无操作
   EA=1;	
  }
/*************INT0中断函数*********************/
void SPI_INT0(void) interrupt 0  
{
   EA=0;
   while(MOSI==0){
   if(flag==0){ datTem[1]=SPI_Receive(); flag=~flag;}
   else {datTem[0]=SPI_Receive(); flag=~flag;}
   }
   EA=1;				                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
}
/************************************************
THE END OF FILE
*************************************************/

⌨️ 快捷键说明

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