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

转载于:https://www.cnblogs.com/huifeidewoniu/p/3415549.html

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于单片机的的LCD1602显示,C语言编程。#include "lcd.h" void Lcd1602_Delay1ms(uint c) { uchar a,b; for (; c>0; c--) { for (b=199;b>0;b--) { for(a=1;a>0;a--); } } } /******************************************************************************* * 函 数 名 : LcdWriteCom * 函数功能 : 写命令 * 输 入 : com * 输 出 : 无 *******************************************************************************/ void LcdWriteCom(uchar com) { LCD1602_E = 0; LCD1602_RS = 0; LCD1602_RW = 0; LCD1602_DATAPINS = com; Lcd1602_Delay1ms(1); LCD1602_E = 1; Lcd1602_Delay1ms(5); LCD1602_E = 0; } /******************************************************************************* * 函 数 名 : LcdWriteData * 函数功能 : 写数据 * 输 入 : dat * 输 出 : 无 *******************************************************************************/ void LcdWriteData(uchar dat) { LCD1602_E = 0; LCD1602_RS = 1; LCD1602_RW = 0; LCD1602_DATAPINS = dat; Lcd1602_Delay1ms(1); LCD1602_E = 1; Lcd1602_Delay1ms(5); LCD1602_E = 0; } /******************************************************************************* * 函 数 名 : LcdInit() * 函数功能 : 初始化LCD屏 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void LcdInit() { LcdWriteCom(0x38); //开显示 LcdWriteCom(0x0c); //开显示不显示光标 LcdWriteCom(0x06); //写一个指针加1 LcdWriteCom(0x01); //清屏 LcdWriteCom(0x80); //设置数据指针起点 } /******************************************************************************* * 函 数 名 : LcdIdiszhu() * 函数功能 : 主屏显示 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void lcddiszhu() { uchar i; uchar lcd1[]="Model i ii iii"; uchar lcd2[]="Choose 1 2 3 "; LcdWriteCom(0x80); for(i=0;i<15;i++) { LcdWriteData(lcd1[i]); } LcdWriteCom(0x80+0x40); fo
AT89C51设计LCD1602显示DS1302实时日历时钟毕业论文文档+软件源码,单片机LCD毕业设计,有代码、仿真电路、设计报告,仿真使用的是proteus仿真,可直接加载HEX文件运行. 摘要 此次课程设计的要求是通过LCD与单片机的连接模块能够显示数字(如时间)、字符(如英文)和图形等,这就需要专门的时钟芯片-----DS1302。 DS1302是一种高性能、低功耗、带RAM的实时时钟芯片,它能够对时,分,秒进行精确计时,它与单片机的接口使用同步串行通信,仅用3条线与之相连接,就可以实现MCS-51单片机对其进行读写操作,把读出的时间数据送到LCD1602上显示。程序运行时,必须先对LM044L进行初始设置,然后,通过单片机从DS1302中获取时间并通过LCD1602显示。同时,进行循环赋值,使LCD动态显示当前的时间。 关键字:AT89C51、DS1302,LCD1602显示器 一.设计任务和要求 1. 利用DS1302实现年月日时分秒,并用LCD显示。 2. 通过LCD模块与单片机的接口,能显示数字(如时间)、字符(如英文)。 3. 硬件设计部分,根据设计的任务选定合适的单片机,根据控制对象设计接口电路。设计的单元电路必须有工作原理,器件的作用,分析和计算过程; 4. 软件设计部分,根据电路工作过程,画出软件流程图,根据流程图编写相应的程序,进行调试并打印程序清单; 5.原理图设计部分,根据所确定的设计电路,利用Proteus工具软件绘制电路原理图。 6计算说明书部分包括方案论证报告打印版或手写版,程序流程图具体程序等 7. 图纸部分包括具体电路原理图打印版 8. 设计要求还包括利用一天时间进行资料查阅与学习讨论,利用5天时间在实验室进行分散设计,最后三天编写报告。最后一天进行成果验收。 二.方案论证 实现数字电子钟的设计有以下两种基本方案,现就两种基本方案的优劣进行具体论证,从而说明选择方案二的理由。 方案一:直接用单片机的内部定时器来实现时间。该方案以AT89C51单片机为主控芯片,以内部定时器产生的1s中断作为时钟的驱动,然后再通LCD液晶显示器来组成数字钟电路。但是此方案最大的缺点在于单片机89C51产生的1s中断存在误差,如果工作时间长的话,数字时钟显示的时间将会出现严重的偏差,不够精确。 方案二:使用串行接口时钟芯片DS1302设计时钟电路。该设计方案以AT89C51单片机为主控芯片,以串行时钟芯片DS1302为核心计时芯片,然后再通过一个LCD液晶显示器组成数字时钟电路。更重要的是,DS1302时钟芯片的加入大大提高了数字钟时间的准确性,而且该电路在断电后不丢失时间和数据信息时也使得该方案的研究与提升更具有开发的意义。 三.核心芯片功能介绍 1.AT89C51 AT89S51[3]美国ATMEL公司生产的低功耗,高性能CMOS 8位单片机,片内含4K BytesISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及AT89C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元。单片机AT89S51强大的功能可为许多嵌入式控制应用系统提供高性价比的解决方案。 AT89C51芯片的引脚结构如图1所示: 1.1 功能特性概括: AT89S51提供以下标准功能:40个引脚、4K Bytes Flash片内程序存储器、128 Bytes的随机存取数据存储器(RAM)、32个外部双向输入/输出(I/O)口、5个中断优先级2层中断嵌套中断、2个数据指针、2个16位可编程定时/计数器、2个全双工串行通信口、看门狗(WDT)电路、片内振荡器及时钟电路。此外,AT89S51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲模式下, 图1 AT89C51引脚图 CPU暂停工作,而RAM、定时/计数器、串行通信口、外中断系统可继续工作。掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。同时该芯片还具有PDIP、TQFP和PLCC等三种封装形式,以适应不同产品的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值