zoukankan      html  css  js  c++  java
  • c语言通过89C51驱动1602液晶显示(入门级别)

    工具proteus,keil

    步骤:

    1.画好电路图

    2.在指令模式下,设置好显示模式以及光标位置

    3.在写数据模式下,向1602写入显示字符(1602只能显示数字和字符)

    电路图

     电路图

    #include <REGX51.H>
    
    #define uchar unsigned char
    #define uint unsigned int
    
    void init();
    void write_cmd(uchar cmd);
    void write_data(uchar input);
    void delay(uchar time_delay);
    
    uchar table_wel[] = "hello world!";
    uchar table_name[] = "i am gxf!";
    
    sbit lcdrs = P3^0;
    sbit lcdrw = P3^1;
    sbit lcden = P3^2;	 
    
    void main()
    {
    	uchar i = 0;	
    	init(); 
    	//write_data('g');
    	for(;i < 12;i ++)
    	{
    		write_data(table_wel[i]);	
    	}
    
    	write_cmd(0xc0); 
    	//	delay(5);
    	for(i = 0; i < 9; i++)
    	{
    		write_data(table_name[i]);
    	}
    	while(1);
    } 
    
    void init()
    {
    	lcdrs = 0;//命令选择段
    	lcdrw = 0;//写命令	
    	write_cmd(0x38);
    	write_cmd(0x0f);
    	write_cmd(0x06);
    	write_cmd(0x80);//从第一个位置开始显示
    }
    void write_cmd(uchar cmd)
    {
    	lcdrs = 0;//命令选择段
    	lcdrw = 0;//写命令
    	P2 = cmd;//设置显示模式
    	delay(5);
    	lcden = 1;
    	delay(5);//延时5MS形成高脉冲
    	lcden = 0;
    
    }
    void write_data(uchar input)
    {
    	lcdrs = 1;//写数据模式
    	lcdrw = 0;//写数据
    	P2 = input;//设置显示模式
    	delay(5);
    	lcden = 1;
    	delay(5);//延时5MS形成高脉冲
    	lcden = 0;
    
    }
    
    //软件延时
    void delay(uchar time_delay)
    {
    	uint x,y;
    	for(x = time_delay; x > 0; x --)
    		for(y = 110; y > 0 ; y--);
    }  
    

    测试效果

    result_test

    说明:最开始我用的是P0口,控制rs,rw和en,但好像P0口要特殊一点。有点不行,换了P3口。还要研究一下P0口。

  • 相关阅读:
    年龄大的普通程序员最后的出路是哪里?
    PHP7数组的底层实现
    MySQL mysqldump数据导出详解
    swoole高性能赛事直播平台(笔记)
    防止图片盗链和资源恶意下载
    由Response.Redirect引发的"Thread was being aborted. "异常
    关于前台调用后台事件__doPostBack函数
    页面拖拽效果
    bs和cs缩放图片
    hideFocus(小技巧)
  • 原文地址:https://www.cnblogs.com/huifeidewoniu/p/3415549.html
Copyright © 2011-2022 走看看