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

📄 text2.c

📁 RS485通讯代码,主机从机都有,调试通过绝对可以用
💻 C
字号:
#include<reg51.h>
#include <string.h>
#include <intrins.h>

#define uchar unsigned char
#define uint unsigned int
#define COUNT 10
#define NODE_ADDR 64
sbit   SID   =  P1^3;	//数据
sbit   SCLK  =  P1^4;	//时钟
sbit   P15=P1^5;
unsigned char buffer[COUNT];
int pointer;

void lcm_w_word(unsigned char *str) ;  //写字符  例:lcm_w_word("您好!");
void lcm_w_test(bit start,unsigned char ddata);  //(0,指令) (1,数据)
void lcm_w_byte(unsigned char bbyte);  //写一个字节给lcm
void delaynms(unsigned int di);  //延时
void lcm_init(void); //lcm初始化
void lcm_clr(void);  //清屏



void DelayM(unsigned int a);
void DelayM(unsigned int a){//延时函数 1MS/次	
		unsigned char i;
		while( --a != 0){		
			for(i = 0; i < 125; i++);  //一个 ; 表示空语句,CPU空转。
		}   				   //i 从0加到125,CPU大概就耗时1毫秒
}

/**********************************************************************/
//延迟函数 11us
void delay(int t)
{
for(;t>0;t--);
}
/****************************************************************************/
//初始化LCM
void lcm_init(void)	 {
	delaynms(100); //启动等待,等LCM讲入工作状态
  	lcm_w_test(0,0x30);  //8 位介面,基本指令集
  	lcm_w_test(0,0x0c);  //显示打开,光标关,反白关
  	lcm_w_test(0,0x01);  //清屏,将DDRAM的地址计数器归零 
	delaynms(100); //启动等待,等LCM讲入工作状态
 
}
/******************************************************************************/
//写指令或数据  (0,指令) (1,数据)
void lcm_w_test(bit start, unsigned char ddata) {
	unsigned char start_data,Hdata,Ldata;
  	if(start==0) 
		start_data=0xf8;	 //0:写指令
    else    
    	start_data=0xfa;  //1:写数据
  
  	Hdata=ddata&0xf0;		  //取高四位
  	Ldata=(ddata<<4)&0xf0;  //取低四位
  	lcm_w_byte(start_data);	  //发送起始信号
  	delaynms(5); //延时是必须的
  	lcm_w_byte(Hdata);	      //发送高四位
  	delaynms(5);  //延时是必须的
  	lcm_w_byte(Ldata);		  //发送低四位
  	delaynms(5);  //延时是必须的
}

/******************************************************************************/
//发送一个字节(底层函数)
void lcm_w_byte(unsigned char bbyte) {
	unsigned char i;
 	for(i=0;i<8;i++){
   		SID=bbyte&0x80; //取出最高位
 		SCLK=1;
   		SCLK=0;
   		bbyte<<=1; //左移
   	}  
}

/******************************************************************************/
//延时(LCM占用)
void delaynms(unsigned int di) {
	unsigned int da,db;
 	for(da=0;da<di;da++);
   		for(db=0;db<10;db++);
}
	
/*****************************************************************************/
//清屏函数
void lcm_clr(void){
	lcm_w_test(0,0x01);
	delaynms(40); //启动等待,等LCM讲入工作状态

}

/*****************************************************************************/
//向LCM发送一个字符串,长度64字符之内。
//应用:lcm_w_word("您好!"); 
void lcm_w_word(unsigned char *str){
		while(*str != '\0'){
			lcm_w_test(1,*str++);
        }
		*str = 0;
}


main()
{	
	int i=0;
	lcm_init();//初始化液晶显示器
	lcm_w_word("上位机为");
//	for(i;i<11;i++)
//	{lcm_w_test(1,buffer[i]);}
	P15=0;
	SCON=0xf0;
	TMOD=0x20;
	TH1=0xfd;
	TR1=1;
	ET1=0;
	ES=1;
	EA=1;
	pointer=0;

	while(pointer<COUNT);
	
	for(i;i<4;i++)
	{lcm_w_test(1,buffer[i]);}
	lcm_w_word("度");
	{DelayM(100);}

}

void receive(void) interrupt 4 using 3
{
	RI=0;
	if(RB8==1)
	{
		if(SBUF==NODE_ADDR) SM2=0;
		return;
	}
	buffer[pointer++]=SBUF;
	if(pointer>=COUNT)
		{
		SM2=1;
		}
 //	lcm_w_test(1,buffer[pointer]);

}

⌨️ 快捷键说明

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