Proteus 8 画原理图仿真 1602 LCD显示字符

以下是源程序:
#include <reg52.h>
#include<intrins.h> /**
* P2 上接的是 D1 ~ D7
*/
sbit RS = P3 ^ ;//数据 H 命令 L
sbit RW = P3 ^ ;//读 H 写 L
sbit E = P3 ^ ;//高电平 H 使能
#define DATA P2 /**
* 经过逻辑分析仪测量时间
* 单指令是 5us
* nop 0.4ms
* 经过试验发现, 只需要一个单指令执行时间 5us 休眼就可以
* E = 1 后需要等一小段时间, 在手册中并没有说明 -
*/ void delayms(char ms);
char is_busy();
void write_cmd(unsigned char cmd);
void write_data(unsigned char dat);
void pos (unsigned char pos); void main()
{
//初始化 复位 lcd1602
write_cmd(0x38);//设置显示模式 指令码 00111000 => 0x38
delayms();
write_cmd(0x0c);//开显示 不显示光标 不闪烁
delayms();
write_cmd(0x06);//光标设置 写字符后指针加一
delayms();
write_cmd(0x01);//光标清0 指针清0
delayms(); pos ();
write_data('');
write_data('');
write_data('');
write_data('');
write_data('');
write_data('');
write_data('');
write_data('');
write_data('');
write_data(''); pos (0x40); write_data('');
write_data('');
write_data('');
write_data('');
write_data(''); while();
} void pos (unsigned char pos)
{
//设置指针位置 0x80 | 位置
write_cmd(pos|0x80);
} void write_data(unsigned char dat)
{
while(is_busy());
RS = ;
RW = ;
E = ;
//_nop_();
DATA = dat;
_nop_();
E = ;//在E 高向低变化时传输
E = ;
} void write_cmd(unsigned char cmd)
{
while(is_busy());
RS = ;
RW = ;
E = ;
//_nop_();
DATA = cmd;
_nop_();
E = ;//在E 高向低变化时传输
E = ;
} char is_busy()
{
int a=;
char result;
RS = ;//发送的是命令
RW = ;//读
//_nop_();
E = ;//使能
_nop_();
result = (<< & DATA);//7bit 1 忙 0 不忙
E = ;//取消使能
return result;
} void delayms(char ms) //@12.000MHz
{
while(ms--)
{
unsigned char i, j;
i = ;
j = ;
do
{
while (--j);
} while (--i);
}
}
仿真显示少了一个字符, 不知道什么原因。 等真机到了,在试验。
Proteus 8 画原理图仿真 1602 LCD显示字符的更多相关文章
- Arduino基础入门—3.连接 IIC 1602 LCD显示文字
1. IIC转接板介绍 Arduino Uno R3开发板的外部IO口是非常有限的.在驱动LCD1602时,尽管我们的数据线使用了4线,相对于8线方式减少一半,但是在需要外接多种传感器的应用中,4线驱 ...
- mini2440裸试验—计算器(LCD显示,触摸屏突破)
关于Pait_Bmp(x0, y0, x, y, BMPaddr);函数 像素图在屏幕左上角为(0,0),Pait_Bmp中的x0.y0分别像素点初始位置,x,y为BMP图片的X,Y的大小.BMPad ...
- STM32学习之路-LCD(4)<显示字符>
昨晚疯狂的打了一夜的LOL,感觉L多了,今天一天精神萎靡.还是继续把显示字符给看了,可是在犹豫要不要写这篇文章 事实上写的东西也就是copy别人家的代码,不想写那么多,就记录下自己困惑的地方吧.也许改 ...
- FPGA驱动LCD显示红绿蓝彩条
实验目的:先简单熟悉LCD灯的驱动和时序图的代码实现.设计功能是让LCD显示红绿蓝三种颜色,即三个彩带.本次实验比较容易实现,主要是对LCD驱动时序图的理解和时序参数的配置. 实验条件:1.LCD原理 ...
- LCD显示方向
一.ILI9341内存到显示地址的映射 本文只讨论“正常显示”,不讨论“垂直滚动显示”模式. 可以看到物理内存被两个指针访问,行指针和列指针,行指针范围从000h到013Fh,列指针范围为0000h到 ...
- Raspberry PI Model B+ (LCD显示CPU温度)
Title:Raspberry PI Model B+ (LCD显示CPU温度) --2015-01-29 17:44 买了块连接Raspberry PI Model B+的LCD显示器,上面没写C ...
- LCD显示GPS时钟[嵌入式系统]
夏任务102:做一个GPS钟 实验要求 用RPi的串口连接一个GPS模块,从GPS得到实时时间,在7段数码管或LCD上显示 实验工具: Raspberry Pi Model B主机, 8G c10 S ...
- 2.数码相框-编码(ASCII/GB2312/Unicode)介绍,并使LCD显示汉字字符(2)
在上章-学习了数码相框的框架分析(1)了 本章主要内容如下: 1)熟悉ASCII/GB2312/Unicode编码 2)写应用程序,使LCD显示汉字和字符 大家都知道,数据传输的是二进制,而字符和汉字 ...
- LCD显示异常分析——撕裂(tear effect)【转】
转自:LCD显示异常分析--撕裂(tear effect) 概述 在上一篇<LCD显示异常分析--开机闪现花屏>中,我们一起分析了开机花屏的问题,在这一篇中,我将对LCD撕裂(tear e ...
随机推荐
- django基于正则的url匹配
url.py views.py index.html detail.html 访问:
- Javascript 编程小技巧总结(部分内容借鉴他人)
1 – 使用===,而不是== ==(或!=)操作符在需要的时候会自动执行类型转换.===(或!==)操作不会执行任何转换.它将比较值和类型,而且在速度上也被认为优于==. 2 – 使用闭包实现私有变 ...
- HDU2067/HDU1267 /HDU1130 递推
小兔的棋盘 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- c# winform进入窗口后在文本框里的默认焦点
c# winform 设置winform进入窗口后在文本框里的默认焦点 进入窗口后默认聚焦到某个文本框,两种方法: ①设置tabindex 把该文本框属性里的tabIndex设为0,焦点就默认在这 ...
- sass学习笔记1
less在处理CSS动画时,非常恶心,决定转向sass了.sass诞生得比less早,只是因为它是ruby写的,因此受众面够少.但我们不需要自己下编译器或使用命令行,我们可以koala这神器 首先几个 ...
- bzoj1857: [Scoi2010]传送带--三分套三分
三分套三分模板 貌似只要是单峰函数就可以用三分求解 #include<stdio.h> #include<string.h> #include<algorithm> ...
- Spring的quartz定时器同一时刻重复执行二次的问题解决
最近用Spring的quartz定时器的时候,发现到时间后,任务总是重复执行两次,在tomcat或jboss下都如此. 打印出他们的hashcode,发现是不一样的,也就是说,在web容器启动的时候, ...
- Oracle数据库更新时间的SQL语句
---Oracle数据库更新时间字段数据时的sql语句---格式化时间插入update t_user u set u.name='pipi',u.modifytime=to_date('2015-10 ...
- 使用logrotate来进行轮换mysql的慢日志
#!/bin/bash SLOWCFG=/etc/my.cnf DATADIR=`awk /^datadir/ $SLOWCFG|awk -F"=" '{print $2}'` S ...
- Password Attacker
Passwords are widely used in our lives: for ATMs, online forum logins, mobile device unlock and door ...