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

📄 jijia.c

📁 一种基于51单片机的出租车计价器的设计 配合CPLD程序
💻 C
字号:
#include<AT89X52.H>
#include <INTRINS.h>


void lcd_init(void);                                       //lcd初始化
void send_com(unsigned char cmd);                          //LCD输入指令
void send_data(unsigned char dat);                         //LCD输入数据
void chek_busy(void);                                      //检查LCD是否忙碌
void set_xy(unsigned char xpos,unsigned char ypos);        //设置光标处于LCD的位置
void print(unsigned char x,unsigned char y,char* str);//在LCD指定位子上显示字符串
void lcd_clr(void);//LCD清屏


#define DATA       P0                                      //LCD的字节数据端口
#define CONTROL P2                                         //LCD的控制端口
#define E    2                                             //并行的使能信号        sbit E   = P2^7 
#define RW   1                                             //并行的读写信号         sbit RW = P2^6 
#define RS   0                                             //并行的指令数据选择信号 sbit RS = P2^5   


#define SETB(x,y) (x|=(1<<y))
#define CLRB(x,y) (x&=(~(1<<y)))
#define CHKB(x,y) (x&(1<<y))


unsigned char sec100=0;

void Delay15(char n)
{  
	do{ _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
        _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
        _nop_(); _nop_(); _nop_();
   n--;
  
       }while(n);
}


void delay50ms(int i)
{
	TR0=1;
	while(i!=0)
	{
		TH0=-(50000/256);
		TL0=-(50000%256);
		while(TF0!=1);
		TF0=0;
		i--;
	}
	TR0=0;
}

/********************测LCD忙碌**********************/
void chek_busy(void)
{ unsigned char temp1;//状态信息(判断是否忙) 
   CLRB(CONTROL,RS);    // RS = 0;
   SETB(CONTROL,RW);    // RW = 1;
   SETB(CONTROL,E);    // E = 1;
   do{temp1 = DATA;DATA=0xFF;}  while(temp1&0x80);
   SETB(CONTROL,E);   // E = 1;
   DATA=0xFF;
}	
/********************写命令**********************/
void send_com(unsigned char cmd)/*写命令*/
{ 
chek_busy();
CLRB(CONTROL,RS); //RS = 0;
CLRB(CONTROL,RW); //RW = 0;
DATA = cmd;
SETB(CONTROL,E); //E = 1;
Delay15(1);
CLRB(CONTROL,E); //E = 0;
}
/********************写数据**********************/
void send_data(unsigned char dat)
{ 
chek_busy();
SETB(CONTROL,RS); //RS = 1;
CLRB(CONTROL,RW); //RW = 0;
DATA = dat;
SETB(CONTROL,E); //E = 1;
Delay15(1);
CLRB(CONTROL,E); //E = 0;
}
/********************初始化LCD**********************/
void lcd_init(void)
{ 
      //send_com(0x34);//34H--扩充指令操作
send_com(0x30);//功能设置,一次送8位数据,基本指令集
delay50ms(20) ;

send_com(0x0C);//0000,1100 整体显示,游标off,游标位置off
send_com(0x01);//0000,0001 清DDRAM
send_com(0x02);//0000,0010 DDRAM地址归位
send_com(0x80);//1000,0000 设定DDRAM 7位地址000,0000到地址计数器AC
}
/***************清屏*********************/
void lcd_clr(void)
{
	lcd_init();
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	print(0,1,"                ");
    print(0,2,"                ");
   	print(0,3,"                ");
   	print(0,4,"                ");
	_nop_();
	print(0,1,"  钱敏明张亚楠   ");
    print(0,2,"  哈哈哈哈哈哈   ");
    print(0,3,"  哈哈哈哈哈哈   ");
    print(0,4,"  哈哈哈哈哈哈   ");
}

/************** 设置显示位置    xpos(1~16),tpos(1~4)*************/
void set_xy(unsigned char xpos,unsigned char ypos)
{
switch(ypos)
{
   case 1:
    send_com(0X80|xpos);break;
   case 2:
    send_com(0X90|xpos);break;
   case 3:
    send_com(0X88|xpos);break;
   case 4:
    send_com(0X98|xpos);break;
   default:break;
}
}
/*************在指定位置显示字符串*****************/
void print(unsigned char x,unsigned char y,char* str)
{ 
    unsigned char lcd_temp; 
    set_xy(x,y);
    lcd_temp=*str;
    while(lcd_temp != 0x00) 
    { 
        send_data(lcd_temp);
        lcd_temp=*(++str);
    } 
}



void main()
{
    lcd_init();	
	lcd_clr();
   
	while(1)
	{
	   print(0,1," I LOVE YOU");
	}
	
}

⌨️ 快捷键说明

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