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

📄 lcd1602_4.c

📁 步进电机控制的C程序
💻 C
字号:
//使用举例(仅供参考)  
#include <reg52.h>     
//#include <intrins.h>

//本程序中,LCD使用用D4~D7总线
#define BUSMASK 0xf0

sbit dc=P1^3; /*P1.3 LCD 的RS 21*/
sbit rw=P1^4; /*P1.4 LCD 的R/W 22*/
sbit cs=P1^5; /*P1.5 LCD 的E 25*/

sfr lcdbus=0xB0; /*p3 LCD 数据D0=P3.0*/

unsigned int sys10mscounter;
unsigned char syslimitcounter;
//code char path1[8]={0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f};/*自定义符号:横1*/
//code char path2[8]={0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00};/*自定义符号:横2*/
//code char pats1[8]={0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15};/*自定义符号:竖1*/
//code char pats2[8]={0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a};/*自定义符号:竖2*/
void soft_nop(){}

unsigned char data lcdcounter;
bit lcdusing1,lcdusing2;
bit lcd_checkbusy()/*检查LCD 忙*/
{ 	register lcdstate;
    char t;
	dc=0; /*dc=1为数据,=0为命令.*/
	rw=1; /*rw=1为读,=0为写.*/
	cs=1; /*cs=1选通.*/
	soft_nop();
	lcdbus |= 0x80;
	lcdstate=lcdbus;
	cs=0;
	dc=0; /*dc=1为数据,=0为命令.*/
	rw=1; /*rw=1为读,=0为写.*/
	cs=1; /*cs=1选通.*/
	soft_nop();
	t=lcdbus;
	cs=0;
	return((bit)(lcdstate&0x80));
}
void lcd_wrcmd(unsigned char lcdcmd) /*写LCD 命令*/
{ 	

    lcdusing1=1;
	while(lcd_checkbusy());
	lcdbus &=~BUSMASK;
	lcdbus |= (lcdcmd &0xf0);
	dc=0; /*dc=1为数据,=0为命令.*/
	rw=0; /*rw=1为读,=0为写.*/
	cs=1; /*cs=1选通.*/
	soft_nop();
	cs=0;
    lcdbus &=~BUSMASK;
	lcdbus |=(lcdcmd<<4)&0xf0;
	dc=0; /*dc=1为数据,=0为命令.*/
	rw=0; /*rw=1为读,=0为写.*/
	cs=1; /*cs=1选通.*/
	soft_nop();
	cs=0;
	lcdbus |=BUSMASK;
	lcdusing1=0;
}

void lcd_wrdata(char lcddata) /*在当前显示位置显示数据*/
{ 	//char i;
	lcdusing2=1;
	while(lcd_checkbusy());
	lcdbus &=~BUSMASK;
	lcdbus |= 0xf0 & lcddata;
	dc=1; /*dc=1为数据,=0为命令.*/
	rw=0; /*rw=1为读,=0为写.*/
	cs=1; /*cs=1选通.*/
	soft_nop();
	cs=0;
	lcdbus &=~BUSMASK;
	lcdbus |= 0xf0 & (lcddata<<4);
	dc=1; /*dc=1为数据,=0为命令.*/
	rw=0; /*rw=1为读,=0为写.*/
	cs=1; /*cs=1选通.*/
	soft_nop();
	cs=0;
	lcdbus |=BUSMASK;	
	lcdusing2=0;	
}
/*
void lcd_char(unsigned int addr,char *strpoint) //在当前显示位置显示LCD 字符串//
{ 	int i=0;
    if(addr<16) lcd_wrcmd(0x80+addr);     //第1行起始地址,0b11000000B=0x80.
    else lcd_wrcmd(0xc0+addr-16);
	while(strpoint[i]!=0){
		lcd_wrdata(strpoint[i]);
		i++;
		if((i+addr)==16) lcd_wrcmd(0xc0);     //第二行起始地址,0b11000000B=0xc0.	
	}
}
*/

void ePut_str(char x,char y,char *strpoint) /*在当前显示位置显示LCD 字符串*/
{ 	register i=0;
    char k;
    lcd_wrcmd(0x03);    
	if(y>=1) lcd_wrcmd(0xc0+x);
	else     lcd_wrcmd(0x80+x);
	k = x;
	while(strpoint[i]!=0)
	{ 		
		lcd_wrdata(strpoint[i]);		
		i++;
		if((k+i)==16) lcd_wrcmd(0xC0);
	}
}
 
void lcd_string(char *strpoint) //在当前显示位置显示LCD 字符串//
{ 	register i=0;
    lcd_wrcmd(0x03);
    lcd_wrcmd(0x80);
	while(strpoint[i]!=0){ 		
		lcd_wrdata(strpoint[i]);		
		i++;
		if(i==16) lcd_wrcmd(0xC0);
	}
}


void LcdReset(void)/*初始化*/
{ 	
    lcd_wrcmd(0x28); /*设置4 位格式,2 行,5*7*/
	lcd_wrcmd(0x0c); /*整体显示,关光标,不闪烁*/
	lcd_wrcmd(0x06); /*设定输入方式,增量不移位*/
	lcd_wrcmd(0x01); /*清除显示*/
	lcdcounter=0;

}

void lcd_cls()/*清除显示*/
{   lcd_wrcmd(0x01);
	lcdcounter=0;
}

void showx(char x,char y,unsigned int n)
{
   char i=0,num[6],t[6],j=0;
   while(n/10)
   {
      num[i++]=0x30+n%10;n/=10;	  
   }
   num[i++]=0x30+n;
   while(i--) t[j++]=num[i];
   if(j<5)t[j++]=' '; t[j]='\0'; 
   ePut_str(x,y,t); 
}

⌨️ 快捷键说明

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