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口。

  • 相关阅读:
    SQL表结构
    Mssql 行转列
    动态Order by
    Nopi Excel导入
    使用SyncToy 同步两台机器上的文件夹
    ueditor1.4.3 在IE8下的 BUG
    WebService国内省市县接口
    AsyncTask的参数介绍
    Json分割并解析
    JQuery iframe页面操作父页面中的元素与方法
  • 原文地址:https://www.cnblogs.com/huifeidewoniu/p/3415549.html
Copyright © 2011-2022 走看看