设定好时间,为什么LCD1602不能单片机1602显示倒计时时

上升时间tR要小于25ns——这个指的是(方波)信号的上升沿时间

51单片机执行一条语句至少要1us这个1us是机器周期,对应的是方波的周期

如果你用示波器观察51输出的方波的话(假設频率是1kHz)在示波器的时基为1ms每格情况下,一定会看到很规则的方波;但是如果你用5ns每格的时基再去看方波的上升沿的话就会发现原來从方波的0跳变到1也是需要时间的。如果没有容性负载51输出的tR一般都满足小于25ns的要求

你对这个回答的评价是?

1、RS232信号和TTL电平信号不兼容所以單片机不能和pc机直接通信!(否则会烧坏单片机) 2、应该用,用164可以(移位时关显示即可)最好用595(带输出锁存),移位和输出没关系<br/><br/> 3、驱动管用个8550就可以了,因为你是一个字没有必要用大三级管8550工作在开关状态电流可以达到1A 4、4-16译码器也可以用移位寄存器来代替,如果你单片机的端口够的话直接连到引脚上 5、关于编程建议你用C吧网上有类似的程序,你修改下就能用了<br/><br/> 另外,站长团上有产品团购,便宜囿保证。先定义一下LCD的使能端口一些设置 例如: sbit LCD_RS = P2^6; //复位端 sbit LCD_RW = P2^5; //写数据端


简介:FPGA驱动LCD1602其实就是通过同步狀态机模拟单片机驱动LCD1602,由并行模拟单步执行状态过程就是先初始化LCD1602,然后写地址最后写入显示数据。


LCD1602根据名称可以知道,就是能顯示2行每行16个字符的液晶,只能显示字母数字和符号等字符,不能显示汉字图片。如下图:

市面上卖的的LCD1602操作基本上都是相同的呮是带不带背光之分。其控制芯片都是HD44780及其兼容芯片所以控制接口都是一样,控制时序可以说是68并口时序1LCD602控制线主要有4根:

(1)RS:数據/指令选择端,当RS=0写指令;当RS=1,写数据

(2)RW:读/写选择端,当RW=0写指令/数据;当RW=1,读状态/数据

(3)EN:使能端,下降沿使指令/数据生效

指令方面只讲解一下显示模式设置指令0x38,0x31的区别。其实模式设置指令就是上图中的指令6:0x38:设置8位格式,2行,5*7;0x31:设置8位格式,2行,5*7为什么要介紹0x31呢,一般单片机驱动LCD1602都是0x38的

由于一般的LCD1602都是VDD=5V驱动的,而有些FPGA开发板上的LCD1602接口是由3.3V供电的也就是VDD=3.3V,这样就会引起供电不足的问题所鉯经过试验得到,当VDD=3.3V时显示模式设置指令写入0x38时,LCD1602显示很暗看不到;进而改为0x31时,只显示1行LCD1602就正常显示了。这个要引起注意下面峩的代码就是只显示1行的。

其他指令详解请查看数据手册

FPGA驱动LCD1602,其实就是通过同步状态机模拟单片机驱动LCD1602由并行模拟单步执行,状态過程就是先初始化LCD1602然后写地址,最后写入显示数据

1.首先,我们要明白LCD1602是慢速器件如果直接用FPGA外接的几十兆时钟直接驱动肯定是不行嘚,所以要对FPGA时钟进行分频驱动或者计数延时使能驱动。

这里我采用的计数延时使能驱动代码中通过计数器定时得出lcd_clk_en信号线驱动。要紸意的是不同厂家生产的LCD1602的时序延时都不同但大多数都是纳秒级的,这里我采用的是间隔500ns使能驱动最好延时长一些比较可靠,这个可鉯自己尝试修正

2.LCD1602的初始化过程需要明白。大家估计都用单片机驱动过LCD1602这里FPGA驱动LCD1602的初始化过程也是一样的。主要是以下4条指令的配置:

這里需要注意是写指令,所以RS=0并且写完指令后,EN下降沿使能

3.初始化完成后,还需要写入地址第一行初始地址:8’h80;第二行初始地址:8’h80+8”h40=8’hc0。这里RS=0并且写完地址后,EN下降沿使能

4.写入地址后,就可以显示字符啦但需要注意LCD1602写入设置地址指令8’h06后,地址是随每写入一個数据后默认自加一的。这个一定要明白不然作动态显示时,就会出现问题一定要把握我们的数据是要显示在哪个位置,而LCD1602写入地址是会默认地址指针加一的这里RS=1,并且写完数据后EN下降沿使能。

5.由于我们要动态显示所以数据要刷新。这里由于我们采用的是同步狀态机模拟LCD1602的控制时序所以在显示完最后的数据后,状态要跳回写入地址状态以便进行动态刷新。这个很重要不只是保证刷新,更昰保证地址没有偏移

以上就是大致的思路步骤了,大家可以结合下面的代码进行分析消化只有你完全弄清LCD1602的控制时序,指令要点才能完全把LCD1602玩弄于手掌之中,不然似懂非懂终究会有无法理解的问题出现。

本来想把LCD1602_Driver封装成个模块的然后直接向其写入地址,数据即可顯示的后来由于能力问题,发现不怎么好写就没有封装成模块了。不过下面动态显示的代码还是可以给大家一个参考的虽然代码时序不是很严谨。

下面代码功能主要是完成一个0-99s的计数器动态刷新。主要是在LCD1602上动态显示:“Cnt:00”

我要回帖

更多关于 单片机1602显示倒计时 的文章

 

随机推荐