#include <reg51.h>
#include <stdio.h>
#include "lcd2004_4Bit.h"
sbit RS = P0 ^ 0;
sbit EN = P0 ^ 1;
sbit D4 = P0 ^ 4;
sbit D5 = P0 ^ 5;
sbit D6 = P0 ^ 6;
sbit D7 = P0 ^ 7;
void Lcd_Delay(int a) {
int j;
int i;
for(i = 0; i < a; i++) {
for(j = 0; j < 100; j++) {
}
}
}
//LCD 4 Bit Interfacing Functions
void lcd2004Port(char a) {
if(a & 1)
D4 = 1;
else
D4 = 0;
if(a & 2)
D5 = 1;
else
D5 = 0;
if(a & 4)
D6 = 1;
else
D6 = 0;
if(a & 8)
D7 = 1;
else
D7 = 0;
}
void lcd2004Cmd(char a) {
RS = 0; // => RS = 0
lcd2004Port(a);
EN = 1; // => E = 1
Lcd_Delay(5);
EN = 0; // => E = 0
}
void lcd2004Clear() {
lcd2004Cmd(0);
lcd2004Cmd(1);
}
void lcd2004SetCursor(char col, char row) {
char temp, z, y;
if(row == 0) {
temp = 0x80 + col;
z = temp >> 4;
y = temp & 0x0F;
lcd2004Cmd(z);
lcd2004Cmd(y);
} else if(row == 1) {
temp = 0xC0 + col;
z = temp >> 4;
y = temp & 0x0F;
lcd2004Cmd(z);
lcd2004Cmd(y);
} else if(row == 2) {
temp = 0x80 + 0x14 + col;
z = temp >> 4;
y = temp & 0x0F;
lcd2004Cmd(z);
lcd2004Cmd(y);
} else if(row == 3) {
temp = 0xC0 + 0x14 + col;
z = temp >> 4;
y = temp & 0x0F;
lcd2004Cmd(z);
lcd2004Cmd(y);
}
}
void lcd2004Init() {
lcd2004Port(0x00);
Lcd_Delay(200);
///////////// Reset process from datasheet /////////
lcd2004Cmd(0x03);
Lcd_Delay(50);
lcd2004Cmd(0x03);
Lcd_Delay(110);
lcd2004Cmd(0x03);
/////////////////////////////////////////////////////
lcd2004Cmd(0x02);
lcd2004Cmd(0x02);
lcd2004Cmd(0x08); //4 bits, 2 lines, 5*7
lcd2004Cmd(0x00); //do nothing
lcd2004Cmd(0x0C); //display on, no cursor, no blink
lcd2004Cmd(0x00); //do nothing
lcd2004Cmd(0x06); // Increment cursor on write, No shift of display on writ
}
void lcd2004WriteChr(char a) {
char temp, y;
temp = a & 0x0F;
y = a & 0xF0;
RS = 1; // => RS = 1
lcd2004Port(y >> 4); //Data transfer
EN = 1;
Lcd_Delay(5);
EN = 0;
lcd2004Port(temp);
EN = 1;
Lcd_Delay(5);
EN = 0;
}
void lcd2004WriteStr(char *a) {
int i;
for(i = 0; a[i] != '\0'; i++)
lcd2004WriteChr(a[i]);
}
void lcd2004WriteDec(int num) {
char buff[10];
sprintf(buff, "%d", num);
lcd2004WriteStr(buff);
}
void lcd2004WriteHex(unsigned int hexNum) {
char buff[10];
sprintf(buff, "%X", hexNum);
lcd2004WriteStr(buff);
}
void lcd2004WriteFloat(float floatNum) {
char buff[10];
sprintf(buff, "%2.2f", floatNum);
lcd2004WriteStr(buff);
}
/*
void lcd2004ShiftLeft()
{
lcd2004Cmd(0x01);
lcd2004Cmd(0x08);
}
void lcd2004ShiftRight()
{
lcd2004Cmd(0x01);
lcd2004Cmd(0x0C);
}
*/
void lcd2004ClearRight(unsigned char col, unsigned char row) {
unsigned char i;
lcd2004SetCursor(col, row);
for(i = col; i < 20; i++)
lcd2004WriteChr(0x20);
}
void lcd2004ClearMid(unsigned char col1, unsigned char col2, unsigned char row) {
unsigned char i;
lcd2004SetCursor(col1, row);
for(i = col1; i < col2; i++)
lcd2004WriteChr(0x20);
}
//End LCD 4 Bit Interfacing Functions
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
利用Proteus设计并仿真74LS系列组合逻辑芯片测试系统。该系统能够识别芯片型号以及判断芯片是否损坏。具体指标如下: - 系统可识别和测试TTL组合逻辑芯片,例如74LS系列。通过跑分的方法识别芯片并验证其功能好坏。 - 该系统能够测试的芯片不限于上述范围,作者给出了通用的测试方法。
资源推荐
资源详情
资源评论
收起资源包目录
TTL_Tester.zip (47个子文件)
74LS51.h 81B
74LS10.h 81B
74LS51.c 2KB
74LS10.c 2KB
74LS02.c 2KB
74LS86.c 2KB
main.c 1KB
global.c 439B
74LS86.h 81B
TTL_Tester.pdsprj 29KB
Objects
74LS00.__i 122B
global.obj 2KB
74LS10.obj 5KB
74LS86.__i 122B
TTL_Tester.build_log.htm 991B
74LS02.__i 122B
74LS51.__i 122B
main.__i 116B
74LS02.obj 5KB
main.obj 6KB
TTL_Tester.lnp 330B
74LS00.obj 5KB
global.__i 122B
STARTUP.obj 819B
TTL_Tester 41KB
TTL_Tester.hex 17KB
74LS10.__i 122B
lcd2004_4Bit.obj 12KB
74LS86.obj 5KB
74LS51.obj 5KB
74LS00.c 2KB
74LS00.h 81B
TTL_Tester.uvproj 16KB
global.h 214B
lcd2004_4Bit.c 3KB
74LS02.h 81B
Listings
74LS51.lst 4KB
lcd2004_4Bit.lst 7KB
main.lst 3KB
global.lst 2KB
74LS02.lst 3KB
74LS86.lst 3KB
74LS10.lst 3KB
74LS00.lst 3KB
STARTUP.lst 14KB
TTL_Tester.m51 38KB
lcd2004_4Bit.h 691B
共 47 条
- 1
资源评论
- s29053589602023-06-26资源是宝藏资源,实用也是真的实用,感谢大佬分享~
davidzhu210
- 粉丝: 6
- 资源: 21
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功