当前位置:文档之家› lcd1602指令解读及基本程序

lcd1602指令解读及基本程序

lcd1602指令解读及基本程序
lcd1602指令解读及基本程序

HD44780内置了DDRAM、CGROM和CGRAM。

CGROM和CGRAM就是内置192个常用字符产生器,用户自定义的字符产生器RAM DDRAM就是显示数据RAM,用来寄存待显示的字符代码。共80个字节,其地址和屏幕的对应关系如下表:

显示位置: 1 2 3 4 5 6 7 8 (40)

第一行: 00H 01H 02H 03H 04H 05H 06H 07H ..... 27H

第二行: 40H 41H 42H 43H 44H 45H 46H 47H ..... 67H

*/

1602LCD的RAM地址映射

液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在,哪里显示字符,图是1602的内部显示地址。

也就是说想要在LCD1602屏幕的第一行第一列显示一个"A"字,就要向DDRAM的00H地址写入“A”字的代码就行了。但具体的写入是要按LCD模块的指令格式来进行的,后面我会说到的。那么一行可有40个地址呀?是的,在1602中我们就用前16个就行了。第二行也一样用前16个地址。对应如下:

DDRAM地址与显示位置的对应关系

图五:LCD1602内部显示地址

例如第二行第一个字符的地址是40H,那么是否直接写入40H就可以将光标定位在第二行第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位D7恒定为高电平1,所以实际写入的数据应该是01000000B(40H)

+10000000B(80H)=11000000B(C0H)。

/*

1602液晶模块内部的控制器共有11条控制指令,如下表序号指令RS R/W D7 D6 D5 D4 D3 D2 D1 D0

1 清显示0 0 0 0 0 0 0 0 0 1

2 光标返回0 0 0 0 0 0 0 0 1 *

3 置输入模式0 0 0 0 0 0 0 1 I/D S

4 显示开/关控制0 0 0 0 0 0 1 D C B

5 光标或字符移位0 0 0 0 0 1 S/C R/L * *

D3=1移字符D3=0移光标D2=1右移D2=0左移

6 功能设置0 0 0 0 1 DL N F * *

DL=1总线8位DL=0总线4位

N=0显单行N=1显双行

F=0 5X7点阵F=1 5X10点阵

7 置字符发生器地址0 0 0 1 -字符发生存贮器地址(6位)-

8 置数据存贮器地址0 0 1 --显示数据存贮器地址(7位)---

9 读忙标志或地址0 1 BF ----计数器地址(7位)---------

10 写CGRAM或DDRAM 1 0 --------要写的数据内容(8位------

11 读CGRAM或DDRAM 1 1 --------读出的数据内容(8位)-----

*/

// 51单片机对lcd1602一些基础程序

/* 基本操作时序:

写指令输入:RS=0,RW=0,E=下降沿脉冲,DB0~DB7=指令码输出:无

写数据输入:RS=1,RW=0,E=下降沿脉冲,DB0~DB7=数据输出:无

读状态输入:RS=0,RW=1,E=1 输出:DB0~DB7=状态字

读数据输入:RS=1,RW=1,E=1 输出:DB0~DB7=数据/

*/

/*

lcd_1602指令:

指令位D7 D6 D5 D4 D3 D2 D1 D0

功能设置0 0 1 DL N F * *

DL=1总线8位DL=0总线4位

N=0显单行N=1显双行

F=0 5X7点阵F=1 5X10点阵

lcd_1602指令汇总

0x28 设置16*2显示,5*7点阵,4位数据接口

0x38 设置16*2显示,5*7点阵,8位数据接口

0x01 清屏,光标复位到地址00H位置

0x02 光标归原点,DDRAM中内容不变,地址计数器AC=0;(此时地址为0x80)

0x0F 开显示,显示光标,光标闪烁

0x0e 开显示,显示光标,光标不闪烁

0x0c 开显示,不显示光标

0x08 只开显示

0x06 地址加一,当写入数据的时候光标右移

设定显示屏或光标移动方向指令

0x18 字符全部左移一格,但光标不动

0x1c 字符全部右移一格,但光标不动

0x10 光标左移1格,且AC值减1

0x14 光标右移1格,且AC值加1

*/

#include

#define dataport P1

sbit RS=P2^ 6;

sbit RW=P2^5;

sbit EN=P2^4;

void waitfor() //检测忙信号函数

{

dataport=0xff;

RS=0;RW=1; //选择指令寄存器读操作RS=0指令RS=1数据; RW=0写RW=1读

EN=1; //使能操作

while(dataport&0x80); //如果最高位是1 表示1602正忙原地踏步忙完后芯片会将高位拉低

EN=0;

}

void writedata(unsigned char dataw) //写数据到LCD1602

{

waitfor(); //测忙

RS=1;RW=0; //选择数据寄存器写操作RS=0指令RS=1数据; RW=0写RW=1读

dataport=dataw; //将数据送到数据口

EN=1;

EN=0; //使能下降沿脉冲

}

void writecmd(unsigned char cmd) //写命令到LCD1602

{

waitfor(); //测忙

RS=0;RW=0; //选择指令寄存器写操作

dataport=cmd; //将数据送到数据口

EN=1;

EN=0; //使能下降沿脉冲

}

void init(void) // 初始化函数

{

writecmd(0x38); //功能设定8位数据传输双行显示设置工作方式:0x28=4位总线字符两行显示,0x38=8位总线字符两行显示

writecmd(0x0c); //显示器开关

writecmd(0x01); //清屏

writecmd(0x06); //字符进入模式每进入一个字符光标向右移动一格原有字符不动}

void location(unsigned char x,unsigned char y) //坐标函数

{

unsigned char temp;

temp=x&0x0f; //只要x数据的后四位

if(y)

{

temp=temp|0x40;

} //第一行为0 第二行为1 如果y=1则地址加0x40

temp|=0x80; //DDRAM地址的命令DB7为一

writecmd(temp);

}

void DisplayOneChar(unsigned char x,unsigned char y,unsigned char dataw) //显示一个字符函数{

location(x,y);

writedata(dataw);

}

void displaylistchar(unsigned char x,unsigned char y,unsigned char *p) //显示字符串

{

while(*p) //当一个字符型数组读完时*P指的为零

{

displayonechar(x,y,*(p++));

x++;

}

}

void WriteCgram(unsigned char address,unsigned char *p) //写CGRAM的数据

{

unsigned char i=8;

writecmd(address); //CGRAM里的地址初始值0x40 每次加0x80

while(i--)

{

writedata(*p);

p++;

}

}

void DisplayOneChar(unsigned char x,unsigned char y,unsigned char address,unsigned char *p) //显示一个自定义字符

{

unsigned char i=8;

writecmd(address); //CGRAM里的地址初始值0x40 每次加0x08

while(i--)

{

writedata(*p);

p++;

}

location(x,y); //设定要显示的位置

writedata((address&=0x3f)/0x08); //要从CGRAM中读出数据在1602上显示搞了半天发现CGRAM里的地址

} //和DDRAM里的地址有上面的转换关系

void displynumber(unsigned char x,unsigned char y,unsigned long num) //显示一个整数{

unsigned int number[8];

int k,gh;

for(k=0;;k++)

{

*(number+k)=(unsigned int)(num%10);//强制类型转换

num=num/10;

if(num==0)break;

}

for(gh=k;gh>=0;gh--)

{

displyonechar(x,y,(*(number+gh)+48));

x++;

}

}

//字型码

uchar code nian[]={0x08,0x0f,0x12,0x0f,0x0a,0x1f,0x02,0x02};// "年"

uchar code yue[]={0x0f,0x09,0x0f,0x09,0x0f,0x09,0x0b,0x11};// "月"

uchar code ri[]={0x1f,0x11,0x11,0x1f,0x11,0x11,0x11,0x1f};// "日"

//显示汉字

displyonecharacter(0,0,0x40,nian);

displyonecharacter(1,0,0x80,yue);

displyonecharacter(1,0,0xc0,ri);

LCD1602汇编显示程序

;1602显示ABC LCD_RS EQU P2.5 LCD_RW EQU P2.6 LCD_EN EQU P2.7 LCD_DATA EQU P3 ;----------------- ORG0000H JMP START ORG0030H ;----------------- LCD: CALL LCD_INIT MOV A, #80H CALL LCD_WCMD MOV A, #'A' CALL LCD_WDATA MOV A, #'B' CALL LCD_WDATA MOV A, #'C' CALL LCD_WDATA AJMP$ ;---------------- DELAY5MS: MOV R6, #10 DL1:DJNZ R7, $ DJNZ R6, DL1 RET ;---------------- LCD_INIT: CALL DELAY5MS MOV A, #38H CALL LCD_WCMD CALL DELAY5MS

CALL DELAY5MS MOV A, #06H CALL LCD_WCMD MOV A, #01H CALL LCD_WCMD MOV A, #0CH CALL LCD_WCMD RET ;===================================== LCD_WCMD: CALL CHECKBUSY CLR LCD_RS JMP W_LCD ;---------------- LCD_WDATA: CALL CHECKBUSY SETB LCD_RS W_LCD: CLR LCD_RW MOV LCD_DATA, A SETB LCD_EN NOP CLR LCD_EN RET ;---------------- CHECKBUSY: PUSH ACC MOV LCD_DATA, #255 CLR LCD_RS SETB LCD_RW BUSYLOOP: SETB LCD_EN NOP MOV A, LCD_DATA CLR LCD_EN JB ACC.7, BUSYLOOP POP ACC RET

windows文本命令窗口help文档

C:\Users\zwh>help 有关某个命令的详细信息,请键入HELP 命令名 ASSOC 显示或修改文件扩展名关联。 ATTRIB 显示或更改文件属性。 BREAK 设置或清除扩展式CTRL+C 检查。 BCDEDIT 设置启动数据库中的属性以控制启动加载。CACLS 显示或修改文件的访问控制列表(ACL)。 CALL 从另一个批处理程序调用这一个。 CD 显示当前目录的名称或将其更改。 CHCP 显示或设置活动代码页数。 CHDIR 显示当前目录的名称或将其更改。 CHKDSK 检查磁盘并显示状态报告。 CHKNTFS 显示或修改启动时间磁盘检查。 CLS 清除屏幕。 CMD 打开另一个Windows 命令解释程序窗口。COLOR 设置默认控制台前景和背景颜色。 COMP 比较两个或两套文件的内容。 COMPACT 显示或更改NTFS 分区上文件的压缩。CONVERT 将FA T 卷转换成NTFS。您不能转换 当前驱动器。 COPY 将至少一个文件复制到另一个位置。 DA TE 显示或设置日期。 DEL 删除至少一个文件。 DIR 显示一个目录中的文件和子目录。 DISKCOMP 比较两个软盘的内容。 DISKCOPY 将一个软盘的内容复制到另一个软盘。DISKPART 显示或配置磁盘分区属性。 DOSKEY 编辑命令行、调用Windows 命令并创建宏。DRIVERQUERY 显示当前设备驱动程序状态和属性。 ECHO 显示消息,或将命令回显打开或关上。ENDLOCAL 结束批文件中环境更改的本地化。 ERASE 删除一个或多个文件。 EXIT 退出CMD.EXE 程序(命令解释程序)。 FC 比较两个文件或两个文件集并显示它们之间的不同FIND 在一个或多个文件中搜索一个文本字符串。FINDSTR 在多个文件中搜索字符串。 FOR 为一套文件中的每个文件运行一个指定的命令。FORMAT 格式化磁盘,以便跟Windows 使用。 FSUTIL 显示或配置文件系统的属性。 FTYPE 显示或修改用在文件扩展名关联的文件类型。GOTO 将Windows 命令解释程序指向批处理程序 中某个带标签的行。 GPRESULT 显示机器或用户的组策略信息。 GRAFTABL 启用Windows 在图形模式显示扩展字符集。

习题10解答

习题10 10.1何谓操作系统与用户的接口?有哪几种类型?其主要的功能是什么? 操作系统与用户接口的目标就是提供一个友好的用户访问操作系统的接口,使得用户能将自己的要求告诉操作系统,同时也要构造一个反向接口使系统能够利用该接口告知用户目前的工作情况。 一般,操作系统为用户提供两种接口:一类用于程序一级的编程接口,供用户程序和系统程序调用操作系统的服务和功能,由一组系统调用(system call)和高级语言库函数组成。另一类是用于作业(或功能)控制一级,供用户组织和控制自己的作业运行,其中又分为脱机用户和联机用户两种不同的接口。前者对应命令或脚本(脱机);后者体现为交互式联机命令行、菜单式或GUI图形用户接口(联机)。 10.2命令文件是什么?它完成什么功能?如何组织命令文件? 把所需执行的一系列命令组装成文件,然后用文件名作为命令名执行所需命令序列,从而自动控制作业的运行,例如,MS-DOS操作系统中的批处理(扩展名为BA T),用户可预先把一系列命令组织在BA T文件中,一次建立,多次执行。 例如: echo on file 25 buffers 20 remark 设置有关文件与缓冲区 copy a:\data\*.exe d:\fox\data > null edit main.prg foxplus echo off 有的操作系统还支持在命令文件使用循环、分支、转移、判别等语法结构,可以写出带形式参数的批命令文件,甚至允许嵌套形式调用其他命令文件。当带形式参数的批命令文件执行时,可用不同的实际参数去替换,因而,此类批命令文件便可以执行不同的命令序列,大大增强了命令接口的处理能力。例如,UNIX和Linux的Shell不但是一种交互型命令解释程序,也是一种命令级程序设计语言解释系统,它允许用户使用Shell简单命令、位置参数和控制流语句编制带形式参数的批命令文件,称作Shell文件或Shell过程,Shell可以自动解释和执行该文件或过程中的命令。 命令文件方式实现了联机状态下的批处理操作,对一些重复运行的作业非常有用。 10.3试说明命令解释程序的主要功能。 命令解释程序是操作系统最重要的系统程序,其主要功能是读人作业控制卡或接收用户输入的命令行,作出相应的解释并执行该命令提出的对作业的处理要求。命令解释程序通常会保存一张命令名字(动词)表,其中记录着所有操作命令及其处理程序的人口地址或相关信息。当一个新的批作业被启动,或新的联机用户登录进系统时,系统就自动地执行命令解释程序(详见第2章有关作业控制部分的讨论)。 10.4什么是系统调用?它的主要功能是什么?请举例说明Linux系统调用的使用。 系统调用是操作系统提供给用户编程的惟一接口,即用户在程序中调用操作系统所提供的相关功能,动态请求和释放系统资源,完成与计算机硬件部分相关的工作以及控制程序的

lcd1602按键显示程序

#include<> #include<> //包含_nop_()函数定义的头文件 typedef unsigned int uint ; typedef unsigned char uchar ; sbit RS=P2^0; //寄存器选择位,将RS位定义为引脚 sbit RW=P2^1; //读写选择位,将RW位定义为引脚 sbit E=P2^2; //使能信号位,将E位定义为引脚 sbit BF=P0^7; //忙碌标志位,,将BF位定义为引脚 " uchar keyscan(); void delay1ms(); void delay(unsigned char n); unsigned char BusyTest(void); void WriteInstruction (unsigned char dictate); void WriteAddress(unsigned char x); … void WriteData(unsigned char y); void LcdInitiate(void); void delay1ms() { unsigned char i,j; for(i=0;i<10;i++) for(j=0;j<33;j++); } ! void delay(unsigned char n) { unsigned char i; for(i=0;i

UNIX命令

入门介绍和常用命令 如果文件系统磁盘空间不足,则可能出现停止服务等反常现象。 建议各现场系统环境维护人员要定期检查一下Domain所在文件系统的磁盘空间是否足够。命令: df -k df -m df -g等。 历史: BSD,SYSTEM V 主流商业版本 SUN SOLORIS IBM AIX HP-UX Tru64 UNIX LINUX 登录和用户管理 进入系统 login: passwd: 字符方式: 字符终端(console,tty) telnet,term-tools 图形方式(x-window protocal): 从主机登录; 图形终端工具(reflection,hummingbird,cygwin,etc.) Change passwd: $ passwd old password: new password: reenter new password: chsh $ chsh /bin /sh /bin /csh User informaiton defined in /etc/passwd,readonly for ordinary users.

$ man cmd $ docsearch $ wheris cmd $ which cmd Command Search Path $ echo $PATH 查看自己的用户名 $ whoami who ,w 查看当前谁在系统上 users, u 查看当前系统的用户 id 看登录用户 finger user 查看user 的信息 ps 显示当前进程状况 ps –u user 显示用户名为user 的进程状况 进程调度 后台运行 $ cmd & $ cmd1;cmd2;cmd3 $ cmd1&&cmd2&&cmd3 $ cmd1||cmd2||cmd3 从后台转到前台 $ jobs #查找 $ fg %n 定时任务 at,cron $ at time cmd $ crontab –l $ crontab –e $ crontab user # root can edit other users? crontab 重定向和管道 stdin,stdout,stderr $ cmd >file $ cmd

lcd1602显示程序

lcd1602显示程序 液晶显示简介①液晶显示原理 液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。液晶显示器具有厚度薄、适用于大规模集成电路直接驱动、易于实现全彩色显示的特点,目前已经被广泛应用在便携式电脑、数字摄像机、PDA移动通信工具等众多领域。 ②液晶显示器的分类 液晶显示的分类方法有很多种,通常可按其显示方式分为段式、字符式、点阵式等。除了黑白显示外,液晶显示器还有多灰度有彩色显示等。如果根据驱动方式来分,可以分为静态驱动(StaTIc)、单纯矩阵驱动(Simple Matrix)和主动矩阵驱动(AcTIve Matrix)三种。 ③液晶显示器各种图形的显示原理: 线段的显示 点阵图形式液晶由MN个显示单元组成,假设LCD显示屏有64行,每行有128列,每8列对应1字节的8位,即每行由16字节,共168=128个点组成,屏上6416个显示单元与显示RAM区1024字节相对应,每一字节的内容和显示屏上相应位置的亮暗对应。例如屏的第一行的亮暗由RAM区的000H00FH的16字节的内容决定,当(000H)=FFH时,则屏幕的左上角显示一条短亮线,长度为8个点;当(3FFH)=FFH时,则屏幕的右下角显示一条短亮线;当(000H)=FFH,(001H)=00H,(002H)=00H,(00EH)=00H,(00FH)=00H时,则在屏幕的顶部显示一条由8段亮线和8条暗线组成的虚线。这就是LCD显示的基本原理。 字符的显示 用LCD显示一个字符时比较复杂,因为一个字符由68或88点阵组成,既要找到和显示屏幕上某几个位置对应的显示RAM区的8字节,还要使每字节的不同位为1,其它的为0,为1的点亮,为0的不亮。这样一来就组成某个字符。但由于内带字符发生器的控制器来说,显示字符就比较简单了,可以让控制器工作在文本方式,根据在LCD上开始显

命令行解释程序报告

北京联合大学《操作系统课程设计》实验一:命令行解释程序 学院:信息学院 专业:计算机科学与技术 班级:计算机1203B 姓名:谢申兵 学号:2012080332071 2015年7月18日

一.采用的数据结构说明 字符数组: 本程序中包含的字符数组有: filename1[20]:在Ccopy()函数中,存储源文件路径和名字的字符数组。 filename2[20]:在Ccopy()函数中,存储目标文件路径和名字的字符数组。 oldname[20]:在Cmv()函数中用来保存源文件路径和名字的字符数组。 newname[20]:在Cmv()函数中用来保存目标文件路径和名字的字符数组。 Cho2[6]:存取用户输入的指令,并用来作为Switch分支的判定条件之一。 File[20]:Cerase()函数中用来存放要删除的文件的路径和名字的字符数组。 Word[100]:在Cdis()中存放用户要回显的字符串。 二.源程序清单、注释和流程图 (1)流程图

程序开始 输入指令 Num=1 Num=2 Num=3 Num=4 Cdir? Ccopy? Cerase? Cdis? Num=5 Cclr? Cmv? Num=6 Num=7 Cuname? Cend?Num=8 Case? 传入两个参数来复制文件 删除一个带绝对路径的指定 文件 回显输入的字 符串 清屏 移动或者重命 名文件显示计算机详 细信息 退出程序 调用Cmd 里的dir 查看目录 输入两个路径 输入一个绝对路径和文件名 不带空格的字符串 程序结束 是 否 否 否 否 否 否 否 否 是 是 是 是 是 是 是 4 1 23 8 7 输入带路径的两个文件名,路径相同为重命名

命令解释程序

命令解释程序 命令解释程序的作用 命令解释程序的组成 常驻部分 这部分包括一些中断服务子程序。例如,正常退出中断INT 20,它用于在用户程序执行完毕后,退回操作系统;驻留退出中断INT 27,用这种方式,退出程序可驻留在内存中;还有用于处理和显示标准错误信息的INT 24等。常驻部分还包括这样的程序:当用户程序终止后,它检查暂存部分是否已被用户程序覆盖,若已被覆盖,便重新将暂存部分调入内存。 初始化部分 它跟随在常驻内存部分之后,在启动时获得控制权。这部分还包括对AUTOEXEC.BAT 文件的处理程序,并决定应用程序装入的基地址。每当系统接电或重新启动后,由处理程序找到并执行AUTOEXEC.BAT文件。由于该文件在用完后不再被需要,因而它将被第一个由https://www.doczj.com/doc/8c6113191.html,装入的文件所覆盖。 暂存部分 这部分主要是命令解释程序,并包含了所有的内部命令处理程序、批文件处理程序,以及装入和执行外部命令的程序。它们都驻留在内存中,但用户程序可以使用并覆盖这部分内存,在用户程序结束时,常驻程序又会将它们重新从磁盘。 命令解释程序的工作流程 系统在接通电源或复位后,初始化部分获得控制权,对整个系统完成初始化工作,并自动执行AUTOEXEC.BAT文件,之后便把控制权交给暂存部分。暂存部分首先读入键盘缓冲区中的命令,判别其文件名、扩展名及驱动器名是否正确。若发现有错,在给出出错信息后返回;若无错,再识别该命令。一种简单的识别命令的方法是基于一张表格,其中的每一表

目都是由命令名及其处理程序的入口地址两项所组成。如果暂存部分在该表中能找到键入的命令,且是内部命令,便可以直接从对应表项中获得该命令处理程序的入口地址,然后把控制权交给该处理程序去执行该命令。 https://www.doczj.com/doc/8c6113191.html, 的工作流程

操作系统第三版实验指导

实验一命令解释程序 1.1 实验目的 ?掌握命令解释程序的设计方法。 ?学习Windows系统调用的使用,了解目录操作、进程控制等相关知识。 ?理解并发程序中的同步问题。 ?培养C/C++语言程序设计技能,提高程序设计和文档编写能力。 ?锻炼团队成员的交流与合作能力。 1.2 实验要求 1.2.1基本要求 本实验要求实现一个简单的命令解释程序,其设计类似于MS-DOS的Command程序,程序应当具有如下一些重要特征: ?能够执行cd、dir、tasklist、taskkill、history、exit等内部命令。 ?能够创建前台进程和后台进程。 此外,还应做到: ?使用VC建立工程。 ?提供清晰、详细的设计文档和解决方案。 本实验的具体要求如下: (1)参考Command命令解释程序,采用控制台命令行输入,命令提示行是当前目录与提示符“>”,在提示符后输入命令,执行结果在控制台中显示,如图1-1所示。 (2)实现以下内部命令。 ?cd <路径> 切换目录。 ?dir 显示指定目录下的文件、目录及磁盘空间等相关信息。 ?tasklist 显示系统当前进程信息,包括进程标识符pid、线程数、进程名等。 ?taskkill 结束系统中正在运行的进程,须提供进程标识pid。

?history 显示控制台中曾经输入过的命令。 ?exit 退出控制台。 (3)对前台进程和后台进程的操作。 本实验设计的命令解释程序可以将进程放在前台执行或者后台执行。 图1-1 命令解释器界面 启动前台进程,即在提示符下输入: fp <可执行文件> 启动后台进程的命令格式为: bg <可执行文件> 解释程序在前台进程运行期间需要一直等待,直到前台进程运行结束才打印命令提示符,而在后台进程运行期间不必等待,会立刻打印出命令提示符,允许用户输入下一条命令。命令解释程序中还需要捕获Ctrl+C组合键的信号来结束前台正在运行的进程,并返回用户输入界面,等待新命令输入。 (4)其他要求。 该命令解释程序应该具有相应的出错提示功能。程序每次接收用户输入的一行命令,在用户按下回车键(Enter)后开始执行命令。空命令只打印一个新的提示行,不做其他处理。定义空格为分隔符,程序应能处理命令行中出现的重复空格符。提供帮助命令help,供使用者查询每个命令的用法。

已经采用过-LCD1602显示字符和(RAM)数字的汇编程序

单片机LCD1602显示字符和数字的汇编程序(无聊原创) 1,单片机和LCD1602的连线,和程序结果显示如下图: 2,LCD第一行显示字符XIAORENGUANG第二行显示RAM中40H到46H中的数字。程序如下: ORG 0000H AJMP MAIN RS EQU P2.4 RW EQU P2.5 E EQU P2.6 MAIN: MOV SP,#60H MOV 40H,#01H MOV 41H,#02H MOV 42H,#03H MOV 43H,#04H MOV 44H,#05H MOV 45H,#06H MOV 46H,#07H ACALL DD1 ;DD1是LCD初始化

MOV DPTR,#TABLE1 ACALL DD2;DD2是LCD第一行显示TABLE1 ACALL PPP ;PPP是LCD第二行显示RAM中40H到46H中的数据 SJMP $ DD1: MOV p0,#01H ;清屏 CALL ENABLE MOV p0,#38H ;显示功能 CALL ENABLE MOV p0,#0FH ;显示开关控制 CALL ENABLE MOV p0,#06H ;+1 CALL ENABLE RET DD2: MOV p0,#80H;第一行的开始位置 cALL ENABLE CALL WRITE1;到TABLE1取码? RET DD3: MOV p0,#0C0H;第二行的位置 CALL ENABLE CALL WRITE1;到TABLE2 取码 RET ENABLE: CLR RS ;送命令 CLR RW CLR E CALL DELAY SETB E RET WRITE1: MOV R1,#00H ;显示table中的值 A1: MOV A,R1;到table取码 MOVC A,@A+DPTR call wRITE2 ;显示到lcd INC R1 CJNE A,#00H,A1 ;是否到00h RET WRITE2:MOV p0,A ;显示 SETB RS CLR RW CLR E CALL DELAY SETB E RET

c语言模拟shell命令行解释程序

北京联合大学 《操作系统课程设计》实验一:命令行解释程序 学院:信息学院专业:计算机科学与技术 课程:操作系统班级: 1 1 0 3 B 姓名:傅笔贵学号: 2009080305302 2014年7 月10 日

一.采用的数据结构说明 字符数组: 本程序中包含的字符数组有: filename1[20]:在Ccopy()函数中,存储源文件路径和名字的字符数组。 filename2[20]:在Ccopy()函数中,存储目标文件路径和名字的字符数组。 oldname[20]:在Cmv()函数中用来保存源文件路径和名字的字符数组。 newname[20]:在Cmv()函数中用来保存目标文件路径和名字的字符数组。 Cho2[6]:存取用户输入的指令,并用来作为Switch分支的判定条件之一。 File[20]:Cerase()函数中用来存放要删除的文件的路径和名字的字符数组。 Word[100]:在Cdis()中存放用户要回显的字符串。 二.源程序清单、注释和流程图 (1)流程图

(2)源程序和注释 #include #include #include #include #include #include #include int flag=1; char ch[8];//存储文件读取内容的中间变量 FILE *fp; FILE *fp1; char filename1[20];/*复制文件候存放的原文件名*/ char filename2[20];/*复制文件候存放的目标文件名*/ char oldname[20];/*用来存放移动文件的源文件名*/ char newname[20];/*用来存放移动文件的目标文件名*/ void start_copy(char *filename1,char *filename2) /*文件复制函数,可以实现文本和图片的复制*/ { if((fp=fopen(filename1,"rb"))==NULL||(fp1=fopen(filename2,"wb"))==NUL L) /*源文件或目标文件打开失败则无法进行复制*/ { printf("can't open the source file!\n"); exit(0); } else { fread(ch,1,8,fp);//一次读取八个字节的字节流,存放到ch字符数组里 while (!feof(fp))//没读取到文件尾部时,持续读取 { fwrite(ch,1,8,fp1);//写到目标文件里 fread(ch,1,8,fp);//继续读取 } fclose(fp);//关闭指针,释放内存 fclose(fp1); } }

操作系统实验5-命令行接口实验

实验五 命令行接口实验 一:实验目的 了解命令行接口的使用 二:实验内容 用C语言编写一个模拟的命令解释程序。要求自己设计一个OS命令接口,包含若干条命令,然后编写一个命令解释程序,要求对用户输入的字符串进行分析 ,命令得出结果输出到文本文件。 譬如输入dir ,显示出当前目录下所有的目录和文件。 提示调用system()函数,来实现命令解释。 三:实验类别 命令行接口实验 四:实验类型 模拟实验 五:主要仪器 计算机 六:结果与问题总结 1.对老师的题目要求理解有点模糊,编写的程序比较简单,不知道写得对不对........ 2.对字符与字符串的使用有点混淆 运行结果 查找成功的: 查找不成功的:

七:程序 #include #include #include void system(char n[10])//查找函数 { if(strcmp(n,"login")==0||strcmp(n,"passward")==0||strcmp(n,"format")==0 ||strcmp(n,"diskcopy")==0||strcmp(n,"diskcomp")==0||strcmp(n,"backup")==0||strcmp(n ,"restore")==0 ||strcmp(n,"type")==0||strcmp(n,"copy")==0||strcmp(n,"comp")==0||strcmp(n,"rename") ==0||strcmp(n,"erase")==0 ||strcmp(n,"mkdir")==0||strcmp(n,"dir")==0||strcmp(n,"rmdir")==0||strcmp(n,"tree")==0| |strcmp(n,"chdir")==0) { printf("在本系统中可以查找到您所输入的命令!!\n");//可以查找到 printf("您所输入命令的意思是:\n");//输出命令的含义 if(strcmp(n,"login")==0) { printf("用户键入自己的注册名\n"); } else if(strcmp(n,"passward")==0) { printf("用户键入自己的口令\n");

lcd1602液晶封装函数

//端口定义 #define DBPort P0 //LCD数据端口 sbit LcdRs = P2^0; sbit LcdRw = P2^1; sbit LcdEn = P2^2; sbit Lcdbf = P0^7; //LCD忙标志Busy Flag void delay(unsigned int t) //延时 { while(t--); } void LCD_Wait(void) //读忙状态 { LcdRs=0; LcdRw=1; LcdEn=1;delay(10);LcdEn=0; //下降沿 while(Lcdbf) { LcdEn=0;LcdEn=1; //仿真才需要此语句,实际硬件中不需要} } void LCD_Write(bit style, unsigned char input) //写数据1/命令0 { LcdRs=style; LcdRw=0; DBPort=input; LcdEn=1;delay(10);LcdEn=0; LCD_Wait(); } void LCD_Initial(void) //初始化LCD { LCD_Write(0,0x38); //8位数据端口,2行显示,5*7点阵 delay(300); LCD_Write(0,0x0c); //显示模式 LCD_Write(0,0x01); //清屏 LCD_Write(0,0x06); //输入模式 } void GotoXY(unsigned char x, unsigned char y) //移动光标到指定位置{ if(y==0) LCD_Write(0,0x80|x);

1602液晶显示计算器电路图及程序

#include #include #include #include unsigned char code Error[]={"error"}; unsigned char code Systemerror[]={"system error"}; unsigned char code Lcd[]={"lcd calculate"}; char str[16]; sbit RS=P2^0; sbit RW=P2^1; sbit E=P2^2; sbit BF=P0^7; /*********************** 函数功能:延时1ms ***********************/ void delay1ms() { unsigned char i,j; for (i=0;i<10;i++) for (j=0;j<33;j++) ; } /************************ 函数功能:延时n毫秒 入口参数:n ************************/ void delaynms(unsigned char n) { unsigned char i; for (i=0;i

命令行简介

一.命令行简介 命令行就是在Windows操作系统中打开DOS窗口,以字符串的形式执行Windows管理程序。 在这里,先解释什么是DOS? DOS——Disk Operation System 磁盘操作系统 目前我们常用的操作系统有windows 9x/Me,NT,2000等,都是可视化的界面。在这些系统之前的人们使用的操作系统是DOS系统。DOS系统目前已经没有什么人使用了,但是dos命令却依然存在于我们使用的windows系统之中。大部分的DOS命令都已经在Windows里变成了可视化的界面,但是有一些高级的DOS命令还是要在DOS环境下来执行。所以学习命令行对于我们熟练操作Windows系统是很有必要的。 不同的操作系统要用不同的命令进入命令行界面。 在Win9x/Me的开始菜单中的运行程序中键入"command"命令,可进入命令行界面。 在Win2000/NT的开始菜单中的运行程序中键入"cmd"命令,可进入命令行界面。 下面我用讲到的DOS命令都可以在Windows Me操作系统中执行。 那么,我们如何进入命令行窗口? 开始——〉运行——〉键入command命令——〉回车 进入了命令行操作界面(DOS窗口),在DOS窗口中只能用键盘来操作。如下所示: 二.符号约定 为了便于说明格式,这里我们使用了一些符号约定,它们是通用的: C: 盘符

Path 路径 Filename 文件名 .ext 扩展名 Filespec 文件标识符 [ ] 方括号中的项目是可选项,用户可以根根据需要不输入这些内容 { } 大括号表示其中的项目必选一项 | 竖线表示两侧的内容可取其一 … 表示可重复项 三.命令行的输入方法 在DOS窗口中通过输入英文命令加回车键这种方式来执行程序。 四.内部命令和外部命令 命令行程序分为内部命令和外部命令,内部命令是随https://www.doczj.com/doc/8c6113191.html,装入内存的,而外部命令是一条一条单独的可执行文件。 内部命令都集中在根目录下的https://www.doczj.com/doc/8c6113191.html,文件里,电脑每次启动时都会将这个文件读入内存,也就是说在电脑运行时,这些内部命令都驻留在内存中,用dir命令是看不到这些内部命令的。 外部命令都是以一个个独立的文件存放在磁盘上的,它们都是以com和exe为后缀的文件,它们并不常驻内存,只有在电脑需要时,才会被调入内存。 五.常用命令 DOS命令总共大约有一百个(包括文本编辑、查杀病毒、配置文件、批处理等),我们这里详细介绍二十个常用的DOS命令。 先介绍一下通配符的概念。

51单片机控制1602LCD显示程序

LCD显示电路 #include sbit RS=P3^7; //寄存器选择位,将RS位定义为P2.0引脚 sbit RW=P3^6; //读写选择位,将RW位定义为P2.1引脚 sbit E=P2^7; //使能信号位,将E位定义为P2.2引脚 sbit BF=P0^7; //忙碌标志位,将BF位定义为P0.7引脚 #define Lcd_Data P0 #include #include //包含_nop_()函数定义的头文件 unsigned char code string1[ ]= {0x77,0x75,0x20,0x79,0x61,0x6E,0x67,0x20,0x79,0x61,0x6E,0x67,0x20,0x20,0x20,0x20}; //第一行显示的字符 void Lcd_delay1ms() // 函数功能:延时1ms //注:不同单片机不同晶振需要对此函数进行修改 { unsigned char i,j; for(i=0;i<90;i++) for(j=0;j<33;j++); } void Lcd_delay(unsigned int n) // 函数功能:延时若干毫秒,入口参数:n { unsigned int i; for(i=0;i

/***************************************************** 函数功能:判断液晶模块的忙碌状态 返回值:result。result=1,忙碌;result=0,不忙 ***************************************************/ bit Lcd_BusyTest(void) { bit result; RS=0; //根据规定,RS为低电平,RW为高电平时,可以读状态 RW=1; E=1; //E=1,才允许读写 _nop_(); //空操作 _nop_(); _nop_(); _nop_(); //空操作四个机器周期,给硬件反应时间 result=BF; //将忙碌标志电平赋给result E=0; return result; } /***************************************************** 函数功能:将模式设置指令或显示地址写入液晶模块 入口参数:dictate ***************************************************/ void Lcd_WriteCom (unsigned char dictate) { while(Lcd_BusyTest()==1); //如果忙就等待 RS=0; //根据规定,RS和R/W同时为低电平时,可以写入指令RW=0; E=0; //E置低电平(写指令时就是让E从0到1发生正跳变,所以应先置"0" _nop_(); _nop_(); //空操作两个机器周期,给硬件反应时间 Lcd_Data=dictate; //将数据送入P0口,即写入指令或地址 _nop_(); _nop_(); _nop_(); _nop_(); //空操作四个机器周期,给硬件反应时间 E=1; //E置高电平 _nop_(); _nop_(); _nop_(); _nop_(); //空操作四个机器周期,给硬件反应时间 E=0; //当E由高电平跳变成低电平时,液晶模块开始执行命令} /***************************************************** 函数功能:指定字符显示的实际地址 入口参数:x

实验1-命令解释程序

实验报告 院(系): 专业班级: 学号: 姓名: 实验地点: 实验日期:

课程名称实验项目名称实验学时实验类型计算机操作系统命令解释程序 2 验证型 一、实验目的及要求 1.理解命令解释程序工作原理。 2.掌握c语言编程初步。 二、实验环境 计算机,Microsoft Visual C++ 6.0; 三、实验内容 利用高级语言编写一个微型命令解释程序,接收并解释执行以下命令:dir 列出当前目录 cop 文件1 文件2 拷贝文件 era 文件名删除文件 dat 显示日期 tim 显示时间 end 结束,退出 画出程序流程图,编写程序,实现上述功能。 四、实验步骤 1.实验过程: a.设计界面 b.设计主函数 c.各个函数的实现 d.连接调用 2.画流程图

3.根3.根据指令,以及流程图编写c语言代码 代码如下: #include #include #include void main() { int i,num; char a[10],b[50],c[50],d[50],e[50],f[50]; char sjs[6][20]={"dir","cop","era","dat","tim","end"};

while(1) { printf("******************************\n"); printf("*dir:List File *\n"); printf("*cop:Copy File *\n"); printf("*era:Delete File*\n"); printf("*dat:Date *\n"); printf("*tim:Time *\n"); printf("*end:Quit *\n"); printf("******************************\n"); printf("******************************\n"); printf("Please Input b:\n"); scanf("%s",&a); for(i=0;i<=6;i++) { if(!strcmp(a,sjs[i])) { num=i; break; num=7; } } strcpy(b,""); strcpy(c,""); strcpy(d,""); switch(num) { case 0: strcpy(b,"dir");break; case 1:

LCD1602显示屏地驱动设置及例程

LCD1602显示屏的驱动设置及例程 一般来说,LCD1602有16条引脚,据说还有14条引脚的,与16脚的相比缺少了背光电源A(15脚)和地线K(16脚)。我手里这块LCD1602的型号是HJ1602A,是绘晶科 技公司的产品,它有16条引脚。如图1所示: 图1 再来一张它的背面的,如图2所示: 引脚号符号引脚说明引脚号符号引脚说明 1 VSS 电源地9 D 2 数据端口 2 VDD 电源正极10 D 3 数据端口 3 VO 偏压信号11 D 4 数据端口 4 RS 命令/数据12 D 5 数据端口 5 RW 读/写13 D 6 数据端口 6 E 使能14 D 7 数据端口 7 D0 数据端口15 A 背光正极

图3

图4 二.基本操作 LCD1602的基本操作分为四种: 1. 读状态:输入RS=0,RW=1,E=高脉冲。输出:D0—D7为状态字。 2. 读数据:输入RS=1,RW=1,E=高脉冲。输出:D0—D7为数据。 3. 写命令:输入RS=0,RW=0,E=高脉冲。输出:无。 4. 写数据:输入RS=1,RW=0,E=高脉冲。输出:无。 读操作时序图(如图5): 图5 写操作时序图(如图6):

图6 时序时间参数(如图7): 图7 三.DDRAM、CGROM和CGRAM DDRAM(Display Data RAM)就是显示数据RAM,用来寄存待显示的字符代码。共80个字节,其地址和屏幕的对应关系如下(如图8): 图8 DDRAM相当于计算机的显存,我们为了在屏幕上显示字符,就把字符代码送入显存,这样该字符就可以显示在屏幕上了。同样LCD1602共有80个字节的显存,即DDRAM。但L CD1602的显示屏幕只有16×2大小,因此,并不是所有写入DDRAM的字符代码都能在屏幕上显示出来,只有写在上图所示范围内的字符才可以显示出来,写在范围外的字符不

LM1602液晶显示程序

#include #define uchar unsigned char #define uint unsigned int unsigned char code tab1[16]=" Now time is: "; unsigned char tab2[16]=" 00:00:00 "; uchar second = 30; uchar minite = 11; uchar hour = 15; sbit RS = P2^5; sbit RW = P2^6; sbit E = P2^7; void delay() { int i,j; for(i=0; i<=100; i++) for(j=0; j<=20; j++); } void Write_Command(uchar command) { P0 = command; RS = 0; RW = 0; E = 1; delay(); E = 0; } void Write_Data(uchar Data) { P0 = Data; RS = 1; RW = 0; E = 1; delay(); E = 0; } void LCD_Init(void)//初始化 { Write_Command(0x01); Write_Command(0x38);

Write_Command(0x0c); Write_Command(0x06); } void LCD_Printfc(uchar hang,uchar lie,uchar sign) { uchar a; if(hang == 1) a = 0x80; if(hang == 2) a = 0xc0; a = a + lie; Write_Command(a); Write_Data(sign); } void LCD_Display(uchar *tab1) { uchar i; Write_Command(0x80); for(i=0; i<16; i++) { Write_Data(tab1[i]); delay(); } /* Write_Command(0xc0); for(i=0; i<16; i++) { Write_Data(tab2[i]); delay(); }*/ } void time_view(void) { if(second == 60) { minite ++; second = 0; } if(minite == 60) { hour++; minite = 0; } if(hour == 24)

相关主题
文本预览
相关文档 最新文档