• LCD1602显示接收的串口通讯字串


    #include <reg52.h>
    
    typedef unsigned int uint;
    typedef unsigned char uchar;
    
    
    void delay(uint z){
    	uint x,y;
    	for(x=z;x>0;--x)
    		for(y=110;y>0;--y);
    }
    
    uchar posit = 0x00;
    
    sbit lcd_en_port=P3^4;
    sbit lcd_rs_port=P3^5;
    sbit lcd_rw_port=P3^6;
    sbit dula=P2^6;//数码管的段选信号
    sbit wela=P2^7; //数码管的位选信号
    
    
    void lcd_busy_wait() /*LCD1602 忙等待*/
    {
        lcd_rs_port = 0;
        lcd_rw_port = 1;
        lcd_en_port = 1;
        P0 = 0xff;
        while (P0&0x80);
        lcd_en_port = 0; 
    
    }
    void lcd_command_write(uchar com){
    	lcd_rs_port=0;
    	lcd_rw_port=0;
    	lcd_en_port=0;
    	P0=com;
    	lcd_en_port=1;
    	lcd_en_port=0;
    }
    
    void lcd_data_write(uchar _data){
    	lcd_rs_port=1;
    	lcd_rw_port=0;
    	lcd_en_port=0;
    	P0=_data;
    	lcd_en_port=1;
    	lcd_en_port=0;
    }
    
    void lcd_char_write(uchar _posit,uchar _data){
    	uchar row,col,addr=0x00;
    	row=(_posit>>4)&0x01;
    	col=_posit&0x0f;
    	addr=col;
    	if(row){
    		addr+=0x40;
    	}
    	addr+=0x80;
    	lcd_busy_wait();
    	lcd_command_write(addr);
    	lcd_busy_wait();
    	lcd_data_write(_data);
    	P0=0xff;
    }
    
    void lcd_char_show(uchar content){
    	lcd_char_write(posit++,content);
    	if(posit>=0x20){
    		posit=0x00;
    	}
    }
    
    void lcd_system_reset() /*LCD1602 初始化*/
    {
    	dula=1;
    	wela=1;
        delay(15);
        lcd_command_write(0x38);
        delay(5);
        lcd_command_write(0x38);
        delay(5);
        lcd_command_write(0x38);
    	//have to read
    	lcd_busy_wait();
        lcd_command_write(0x01);
    	lcd_busy_wait();
        lcd_command_write(0x06);
    	lcd_busy_wait();
        lcd_command_write(0x0c); 
    	P0 = 0xff; /*释放数据端口*/
    }
    
    void ser_system_reset(){
    	TMOD=0x20;
    	TH1=0xfd;
    	TL1=0xfd;
    	TR1=1;
    	REN=1;
    	SM0=0;
    	SM1=1;
    	EA=1;
    	ES=1;
    }
    
    void ser() interrupt 4{
    	uchar _content;
    	if(RI){
    		//EA=0;
    		_content=SBUF;
    		lcd_char_show(_content);
    		RI=0;
    		SBUF=_content;
    		//while(!TI);
    		TI=0;
    		//EA=1;
    	}
    }
    
    void main(){
    	uchar num;
    	lcd_system_reset();
    	ser_system_reset();
    	while(1);
    }
    
    
    

  • 相关阅读:
    Python subprocess- call、check_call、check_output
    Java Annotation认知(包括框架图、详细介绍、示例说明) (转)
    NVME SSD vs SATA SSD(转)
    scala中“_”的用法
    maven scope 'provided' 和 ‘compile’的区别
    scala tuple中的syntactic sugar
    Scala中的"null" 和“_”来初始化对象
    scala可变长度参数(转)
    Java中的Builder模式
    Scala中“=>”用法及含义
  • 原文地址:https://www.cnblogs.com/gibbon/p/1925090.html
Copyright © 2020-2023  润新知