实验四 屏幕字符显示程序
实验四 图形用户界面编程 实验报告
实验四图形用户界面编程实验报告一、实验目的1. 掌握常用组件的定义及使用2. 理解常见的布局方式及其特点3. 掌握事件处理机制二、实验原理1. 常用控件:① JTextField:用于接受文本输入,表现为图形界面中文本框。
② JLabel:标签控件,表现为图形界面中的文字控件。
③ JSplitPane:一个用于把面板分成两个大小可以调整的面板的控件。
④JScrollPane:一个提供滚动支持的面板,当内容超出面板大小时,会自动下按时滚动条。
⑤ JPanel:普通的面板。
可以通过布局管理器来控制面板中控件的布局。
⑥ JButton:按钮控件。
⑦ JPasswordField:用于接受密码的输入,表现为图形界面的密码输入框。
⑧ JList:列表框控件。
2. 每次单击按钮控件时,可以通过addActionListener方法对按钮注册监听,从而实现单击事件的监听。
三、实验内容通过编写一个程序实现上面的界面四、实验过程1. 界面的分析,实验要求中的界面主要分成上下的两部分,界面的下面部分用于显示在上面文本框输入的用户名和密码,而上部分又分成了输入姓名和密码的区域。
而且根据实验的要求,需要把输入的用户名和密码添加到列表框之中,这需要一个按钮。
根据分析,可以得到整个界面控件的关系如下:2. 代码的编写:首先,如果要创建一个窗口,则需要编写一个JFrame的子类。
public class MainFrame extends JFrame {}然后,在类之中声明需要用的控件(需要用的控件在上述已经全部列出)private JSplitPane mainSplitPane = null;private JSplitPane inputSplitPane = null;private JSplitPane topSplitPane = null;private JScrollPane listBoxPane = null;private JPanel buttonPanel = null;private JPanel usernamePanel = null;private JPanel passwordPanel = null;private JButton okButton = null;private JTextField username = null;private JPasswordField password = null;private JList listBox = null;private JLabel usernameLabel = null;private JLabel passwordLabel = null;再然后,编写类的构造方法,对控件进行初始化以及进行相应的布局,同时对JFrame 的一些属性进行调整。
字符型 LCD 液晶显示程序设计及实践
• 指令7: 字符发生器RAM 地址设置. • 指令8: DDRAM 地址设置.
上一页 下一页 返回
上一页
返回
第二节 LCD1602 显示程序设计及实践
• 开发板上LCD1602 液晶显示模块可以和单片机STC89C 51 直接接口. 电路如图6.5所示.
• LCD1602 的三个控制引脚RS、R/ W、EN 分别接在单片机 的P2. 0、P2. 1、P2.2 引脚. 8位双向数据端口接在单片机 的P0 口. 了解原理图之后. 下面通过写一段程序来实现图6. 2的功 能.
• RS =0.
//表示单片机发送来的是显示数向LCD1602 写
• DelayMs(1). //延时
• EN =1.
//使能有效
上一页 下一页 返回
第一节 LCD1602 显示原理介绍
• P0 =0x34. //确定LCD1602 第二行第一位显示“4” • DelayMs(5). //延时 • EN =0. //关使能端 • 最后我们给出LCD1602 的其余引脚的详细介绍. 见表6.4.
上一页 下一页 返回
第一节 LCD1602 显示原理介绍
• 设置. 一般初始化内容为以下四点: • (1) 清屏. • (2) 功能设置. • (3) 显示与不显示设置. • (4) 输入模式设置. • 接下来. 解决第二个问题———显示内容的来源. LCD1602 液
晶模块内部的字符发生存储器(CGROM) 已经存储了160 个不 同的点阵字符图形.
4字符编码显示电路实验
数字电路-04字符编码显示电路实验一.实验目的1.掌握组合电路逻辑功能的测试方法。
2.掌握TTL逻辑门组合应用和七段显示器使用方法。
3.了解组合逻辑电路的设计方法。
二.实验原理组合逻辑电路的输出状态完全取决于同一时刻输入状态的组合,与电路原来的输出状态无关。
图5-5是一个由逻辑门构成编码显示组合电路,可以分析,6个输出Ya,Yb,Yc,Yd,Ye,Yg与两个输入K1,K0有一一对应的逻辑关系。
两个输入组合成四种编码输出状态,控制七段显示器显示四个特定字符。
1)七段共阴显示器原理七段显示器内部由八个发光二极管组成,七个段划和一个小数点,位置排成“□—.”形。
八个发光二极管的连接方式有共阴接法和共阳接法两种。
共阳接法就是把所有发光二极管的阳极都接在一起,形成一个由高电平驱动的公共端COM,各管的阴极由低电平有效的段码信号a~g控制。
共阴接法则相反,它的公共端COM是所有发光二极管的阴极,由低电平驱动,而各段发光二极管的阳极由高电平驱动。
图5-1表示了七段共阴显示器的内部原理、外引线排列图以及常用显示符。
各段发光二极管正向导通时发光,导通电压UD约为2V,导通电流ID约需3~10毫安,电流太大可能会损坏器件。
所以,使用时必须根据所加信号的幅度选择限流电阻。
图5-5中,七段共阴显示器的公共端COM 接地,段控制端a~g通过限流电阻接5V电源。
由于TTL逻辑门输出的高电平驱动能力有限,所以或非门输出通过反相缓冲器1413(2003)驱动显示器的a,b,c,d,e,g 各段。
其中f直接通过限流电阻接电源,不受输入K1,K0控制,所以f段始终发光。
图5-1 共阴极7段显示器内部原理及外引线图2)集电极开路的反相缓冲器功能1413(2003)为集电极开路(Open Collector)反相达林顿结构,内部有7个互相独立的复合达林顿管。
电路原理及引脚排列如图5-2(a)所示。
当缓冲器输入为低电平“0”时,复合管截止,OC输出为高阻状态,对外电路没有影响,相应段的发光管仍然导通;当缓冲器输入为高电平“1”时复合管导通,输出低电平使相应段的发光管截止。
EDA 实验LCD菜单字符显示
EDA 实验:LCD菜单字符显示班级:姓名:学号:一、实验目的为了使学生有效加深数字系统的分析和设计方法,熟练用EDA工具完成对数字系统的设计及仿真过程;安排本“设计性实验”。
自己拟定实用电路、实验步骤,学会系统设计、调试、仿真及故障诊断、排除方法。
二、实验题目:流动字符显示电路设计要求:(1)利用实验箱中的LCD2004字符型液晶,与MC8051 IP软核,编写两页以上LCD菜单。
(2) 第一行显示“0-9 :;< = > ?”第二行显示“A—P”HS2004液晶显示模块可以和单片机AT89C51直接接口,电路如图1所示AT89C51 HS2004液晶块4液晶模三、实验设备及器材:1、GH48EDA/SOPC+PK2实验系统四、实验程序RS EQU P0.0RW EQU P0.1E EQU P0.2DAT EQU 30H ;命令单元DAT1 EQU 31H ;数据单元AJMP STARTORG 0030HSTART:MOV DAT,#01H ; 清屏ACALL ENABLEMOV DAT,#38H ; 8位2行5x7点阵ACALL ENABLEMOV DAT,#0FH ; 显示器开、光标开、闪烁开ACALL ENABLEMOV DAT,#06H ; 文字不动,光标自动右移ACALL ENABLEMOV R3,#2MOV DAT,#080H ; 写入显示起始地址(第一行第一个位置)ACALL ENABLEMOV DAT1,#30H ;数字0的ASCII码ACALL DSP0MOV DAT,#0C0H ; 写入显示起始地址(第二行第一个位置)ACALL ENABLEMOV DAT1,#61H ;字母a的ASCII码ACALL DSP0SJMP $DSP0: MOV R2,#16DSP1: ACALL RDYMOV P2,DAT1SETB RSCLR RWCLR ESETB EINC DAT1DJNZ R2,DSP1RETENABLE: ACALL RDY; 写入控制命令的子程序MOV P2,#0FFHCLR RSCLR RWMOV P1,DATCLR ESETB ERETRDY: MOV P2,#0FFH ; 判断液晶显示器是否忙的子程序CLR RSSETB RWCLR ESETB EJB P2.7,RDY ; 如果P1.7为高电平表示忙就循环等待RETEND。
字符型液晶显示实验
实验十二字符型液晶显示实验(1602C)一、实验目的与要求了解字符型液晶模块的控制方法;了解它与单片机的接口逻辑。
二、实验设备STAR系列实验仪一套、PC机一台。
三、实验内容1、1602C液晶显示器(1) 字符型液晶显示器,可以显示二行,每行最多16个字符(2) 采用8位数据总线并行输入输出和3条控制线。
(3) 指令简单,7种指令2、实验过程在1602C液晶上,第一行显示“STAR ES598PCIS”,第二行滚动显示“Shanghai Xingyan Electronics Co.,LTD.”。
四、实验原理图五、实验步骤1、主机连线说明:2、运行程序,验证显示结果。
六、流程图1主程序流程图①子程序延时15ms ②子程序延时5ms③子程序DL50ms ④子程序 DelayTime_Move⑤子程序:DL05S ⑥子程序:WrconNoBusy⑦子程序:写指令子程序:WR_Con⑧子程序:写数据子程序WR_Data⑨子程序:Clear_LCD 10子程序:Close_Cursor关光标子程序11:清行A:哪一行Clear_Line子程序12:设置光标A--光标位置子程序13:Set_DdramCursor设置光标A--光标位置A=00H~13H,光标在第一行;A=40H~53H,光标在第二行A=14H~27H,光标在第三行;A=54H~67H,光标在第四行Set_CgramCursor七、实验现象在1602C液晶上,第一行显示“STAR ES598PCIS”,第二行滚动显示“Shanghai Xingyan Electronics Co.,LTD.”。
17.TFT-LCD实验—字符显示
实验2:FLASH数据拷贝
• 实现功能:实现在信息段Info C中写入递增的自 然数数值,并将Info C的数据拷贝至Info D, Info D中的数据也是同样递增的数值,P4.2口的绿色 指示灯D9闪烁,以指示写入操作完成。
实验3:程序调试与现象(3/4)
• 运行程序到断点处,再次查看FLASH地址段 0x1800~0x1804,是否为下图所示。
实验3:程序调试与现象(5/5)
• 写FLASH功能完成后,P4.2口的绿色指示灯D9闪烁指示 。
谢谢观赏
WPS Office
Make Presentation much more fun
实验目的
• 掌握FLASH、RAM工作原理 • 了解主控芯片MSP430F6638片内存储器结构,学会配置 FLASH、RAM模块的寄存器,实现控制FLASH、RAM存 储器的读取、烧写与擦除 • 学会使用库函数实现对FLASH、RAM读写
实验1:FLASH基本擦写
• 实现功能:实现基本的擦除和写入操作,将已设 定的数据0x12345678写入Info D ,地址为 0x1800,P4.2口的绿色指示灯D9闪烁,以指示写 入操作完成。
实验4: FLASH读写长地址
• 实现功能:首先向主存储区从BANK1的起始地址 0x18000开始的16字节,即0x18000~0x18010写 递增的自然数,再从0x18000~0x18010读出这些 存储区存放的数值,存放在程序定义的数组变量 中。 • 实现方式:采用两种编程方法进行实验: ①通过设置模块寄存器,来实现功能应用;
汇编实验-屏幕窗口程序
实验五屏幕窗口程序
一、实验的目的与要求
(一)实验目的:掌握显示器I。程序设计的方法,掌握宏的相关概念,以及运用方法。
(二)实验要求:在屏幕上开出三个窗口,它们的行列坐标如下页图所示,光标首先定位在右窗口最下面一行 的行首(15,50),如果从键盘输入字符,则显示在右窗口,同时也显示在下窗口的最下面一行。若需要将字符显示 于左窗口,则先按下左键,接着再从键盘输入字符,字符就会从左窗口的最下行开始显示,同时下窗口也显示左窗 口的内容。当一行字符显示满后,窗口自动向上卷动一行,输入字符继续显示于最低一行,窗口最高一行向上卷动 后消失。编写屏幕窗口程序时,要求将一些功能程序段定义成宏指令,如向上卷动、清屏、
(18,15)
(22,65)
接受字符并判断、在屏幕上显示字符、光标定位。
二、实验正文
实验分析:实验思路比较简单,主要是运用BloS调用,这些查表可得,实验要求要用宏来定义一些基本功能, 宏调用比较简单,把一些基本功能编写成宏,能高效率的执行程序,但是宏也存在着一些缺点,在宏调用时,要宏展 开,这样会占用一定的空间,所以宏是一种以空间换时间的策略,像一些复杂的操作不宜编写成宏。BIoSI。号调用 提供了大量的屏幕、光标显示格式,要注意参数的意义,以便正确的显示结果。
三、流程图如下:
初始化卷行属性 scroll 页号 行、列 附录:程序源代码如下: ・**************************************************************** datassegmentcurydb15curxdb50 在当前பைடு நூலகம்口和下窗口显示 displaymacro ;在当前的窗口打印字符 ;在下窗口输出
LED电子屏字符显示器程序
;
;键扫描子程序
KEYWORK: MOV P1,#0FFH ;置输入状态
JNB P1.0,KEY1 ;P1.0为0(键按下)转KEY1
MOV 31H,#08H ;换帧跳转步距为8
LJMP DISP1 ;转显示子程序DISP1
; 上移显示功能程序
FUN1: MOV 30H,#0AH ;1帧显示时间控制(约80毫秒)
RETI ;中断返回(不开中断)
ORG 0023H ;串行口中断入口地址
RETI ;中断返回(不开中断)
ORG 002BH ;定时器T2中断入口地址
RETI ;中断返回(不开中断)
MOV R7,#08H ;一次扫描8行
DISLOOP: MOV A,@R0 ;取显示数据
MOV P0,A ;放入P0口
MOV P2,R6 ;扫描输出(显示某一行)
CLR 01H ;
CLR 00H ;
RET
;
;逐字显示功能程序
FUN0: MOV 30H,#80H ;1帧显示时间控制(约1秒)
JB 00H,FUN0 ;20H.0位为1,执行FUN0
JB 01H,FUN1 ;20H.1位为1,执行FUN1
JB 02H,FUN2 ;20H.2位为1,执行FUN2
MOV B,A ;
AJMP LOOP ;转LOOP进行次帧扫描
;
;显示子程序,字符数据从P0口输出,扫描控制字从P2口输出,显示1帧约需8MS
DISPLAY: MOV A,#0FFH ;
START: MOV 20H,#00H ;20H内存单元清0
字符显示实验报告
一、实验目的1. 熟悉计算机字符显示的基本原理。
2. 掌握字符显示编程的基本方法。
3. 了解字符显示在计算机图形界面设计中的应用。
二、实验原理计算机字符显示是计算机输出设备的基本功能之一。
它通过将字符编码转换为字符图形,并在屏幕上显示出来,实现信息的输出。
字符显示主要包括以下三个步骤:1. 字符编码:将字符转换为计算机可识别的编码,如ASCII码、GB2312等。
2. 字模转换:将字符编码转换为字符图形,即字模。
3. 显示输出:将字符图形输出到屏幕上。
三、实验内容1. 实验环境:Windows操作系统、C++编程环境。
2. 实验步骤:(1)创建一个新的C++项目。
(2)编写字符显示程序,实现以下功能:① 输入字符编码。
② 将字符编码转换为字符图形。
③ 在屏幕上显示字符图形。
3. 实验代码:```cpp#include <iostream>#include <windows.h>using namespace std;// 定义字模数组,存储字符图形unsigned char font[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 空格 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, // 字母A // ... 其他字符的字模数据};// 字符显示函数void DisplayChar(unsigned char ch) {int width = 8; // 字模宽度int height = 16; // 字模高度int i, j;// 创建位图BITMAP bmp;bmp.bmWidth = width;bmp.bmHeight = height;bmp.bmWidthBytes = width;bmp.bmBits = new BYTE[bmp.bmWidthBytes bmp.bmHeight];// 初始化位图for (i = 0; i < bmp.bmHeight; i++) {for (j = 0; j < bmp.bmWidthBytes; j++) {bmp.bmBits[i bmp.bmWidthBytes + j] = 0;}}// 绘制字符图形for (i = 0; i < height; i++) {for (j = 0; j < width; j++) {if (font[(ch - 32) height + i] & (0x80 >> j)) {bmp.bmBits[i bmp.bmWidthBytes + j] = 0xFF;}}}// 创建设备上下文HDC hdc = GetDC(NULL);HDC memDC = CreateCompatibleDC(hdc);// 创建位图句柄HBITMAP hBitmap = CreateCompatibleBitmap(hdc, width, height); SelectObject(memDC, hBitmap);// 绘制位图BitBlt(memDC, 0, 0, width, height, hdc, 0, 0, SRCCOPY);// 清理资源DeleteObject(hBitmap);DeleteDC(memDC);ReleaseDC(NULL, hdc);// 输出字符cout << ch << endl;}int main() {unsigned char ch;cout << "请输入一个字符:";cin >> ch;DisplayChar(ch);return 0;}```4. 运行程序,输入一个字符,观察屏幕上是否显示对应的字符图形。
利用开发板编写程序,实现在LCD显示屏上显示宇符
实验三、编写程序,实现在LCD显示屏上显示宇符一、实验目的1、了解显示屏的电路的结构软硬件的设计。
2、学习并熟悉LCD显示屏显示的原理和使用方法;3、更进一步了解飞凌6410的功能。
二、实验设备及材料1、飞凌6410开发板及连接开发板和计算机的线路;2、DM Tool工具等相应的的软件;3、PC机1台三、实验步骤1.连接开发板和计算机并保证两者之间通信顺畅。
2、新建一个工程,在工程中新建一个C语言文件main.c。
3、按照实验原理,为显示模组提供显示驱动程序,显示驱动程序用了常用的一些显示函数,事先将驱动程序文件导入到工程中。
4、按照事先设计的方法在main.c中编写C语言程序,在程序中调用驱动程序中的子函数,控制LCD显示。
5、调试程序,观察并记录实验结果。
四、试验中使用的控制程序显示字符的程序如下:#include "ok6410User.h"#define P_Watchdog_Clear (volatile unsigned int *)0x7012: int main(void)// 实现功能:在开发板上的LCD模组显示 //"Automation"以及"is developing" // 参数:无 //int main(void) { int i,j;LCD501_Init(0xff);while(1){ LCD501_ClrScreen(1);for(j=0;j<=3;j++) /for(i=0;i<0x1fff;i++)*P_Watchdog_Clear = 0x0001;LCD501_ClrScreen(0);LCD501_PutString(30,3,(unsigned int *)"Automation"); //显示字符串"Automation"for(j=0;j<=7;j++)for(i=0;i<0x1fff;i++)*P_Watchdog_Clear = 0x0001;LCD501_FontSet(0);LCD501_PutString(0,40,(unsigned int *)"is");LCD501_PutString(50,50,(unsigned int *)"developing");for(j=0;j<=13;j++)for(i=0;i<0x1fff;i++)*P_Watchdog_Clear = 0x0001;}}五、实验结果按照实验要求将开发板和计算机连接起来,并肩控制程序导入相应的工程文件中,并进行调试保证其正常运行,就将会在显示屏上显示:“Automation is developing”LCD电路图。
汇编实验四汇编语言上机过程及屏幕字符显示程序
实验报告──学年第学期实验课程汇编语言学生姓名123实验项目汇编语言上机过程及屏幕字符显示程序学院计算机科学技术实验性质专业选修课班级学号实验地点同组人数 1 第组实验日期第周星期第节成绩3环境参数Windows xp一、实验目的及要求二、实验原理、实验内容三、实验仪器设备及材料四、操作方法与实验步骤五、实验数据记录及处理六、实验结果分析及讨论一:1、熟练掌握汇编语言的程序格式,程序设计方法;学会使用masm6.11对源程序进行编译、链接、调试和运行2、利用DOS功能调用INT21H的2号和9号功能进行屏幕显示的方法。
3、利用^Break退出程序的方法及局限性。
4、汇编程序的编写二:实验任务编写一个简化的段定义结构程序:先提示输入数字“Input number:0-9”,然后在下一行显示输入的数字,结束;如果不是键入了0-9 数字,就提示错误“ERROR!”,继续等待输入数字。
源代码:编译连接:实验结果:此程序没按要求将数字在下一行输出。
且程序中用到了多余的指令int 3.修改“done:”段done: mov dl,almov ah,02hint 21h.exit 02.编写一个完整的段定义结构程序:从键盘输入一个字符串(不超过255个),将其中的小写字母转换成大写字母,然后按原来的顺序在屏幕上显示。
要求对以上两个程序,进行编译,链接,调试,运行,给出具体步骤源代码:请问程序中的第39行错误用了一个标号。
编译连接:运行结果:三、小结1、学会使用edit进行程序的编写。
2、学会写简易段程序和完整段程序。
3、学会了在dos下进行汇编程序的编译、连接、调试和运行。
4、学会了使用21号中断的2号9号功能进行字符的显示。
5、汇编基础知识不扎实,指令经常写错,要多练习。
仪器设备损坏、非正常损耗材料(试剂)及处理情况:无教师对报告的最终评价及处理意见:2段程序均有错。
教师签字:年月日。
实验四 键盘及显示实验
实验四键盘及显示实验一、实验目的1、学习自制键盘与单片机的接口及程序处理方法;2、掌握数码管显示电路的构成及程序编制方法。
二、实验仪器设备THGZ—1型单片机·CPLD/FPGA开发综合实验装置1台。
三、实验内容与要求通过键盘输入数据和操作指令,并由LED显示器显示相关数据。
1、独立式键盘与动态LED显示起初显示器全黑,当按KEY1~KEY8任意键后,显示器显示与键号对应的字符(“1”~“8”),每次按键对应字符显示在最右边,前一次的左移一位。
图2-4.1 独立式键盘与动态LED显示实验电路2、矩阵式键盘与动态LED显示①单字符的循环显示起初显示器显示“In ”,按键盘上的“0”~“9”任意键后再按“开始”键,6位LED 显示器马上左循环显示(左移速度0.5s/字符)键入的字符,按“停止”键可以重复以上过程。
图2-4.2 单字符的循环显示实验电路②延时函数的时间测量用定时器/计数器0测量如下延时函数的延时时间。
delaytest(unsigned int time){ unsigned int i,j;for (i=0;i<time;i++)for (j=0;j<65535;j++);}开机显示“good”;按“测量”键后显示“InPArA”表明要通过键盘输入延时函数的实参值,输入实参值并显示该值;按“测量”键后以ms为单位显示测量结果;再按“测量”键将重复以上过程。
图2-4.3 延时函数的时间测量实验电路四、思考题1、比较独立式键盘与矩阵式键盘的异同。
2、键盘处理程序包括哪些过程?2、如何识别键盘上的各键?键值有何意义?3、何为消抖?有何意义?如何实现?实验四源程序清单TEST4-1.C#include <reg51.h>#define KeyISegCodeO P1 /*定义键盘输入口/动态LED显示器段码输出口*/#define BitCtrO P2 /*定义动态LED显示器位控码输出口*/unsigned char DispBuf[6]={10,10,10,10,10,10}; /*显示数组,初始化为不显示*/void delay(unsigned char time) /*延时函数*/{ unsigned char i,j;for (i=0;i<time;i++)for (j=0;j<255;j++);}unsigned char KeyBoardScan() /*键盘扫描函数*/{ unsigned char KeyV alue=0; /*键值,无键按下为0*/BitCtrO=0; /*关闭显示*/KeyISegCodeO=0xff; /*由输出转为输入*/if (KeyISegCodeO!=0xff){ delay(12); /*消抖延时约10ms(fosc=12MHz)*/if (KeyISegCodeO!=0xff){ switch (KeyISegCodeO){ case 0xfe: KeyV alue=1;break; /*KEY1按下,键值为1*/case 0xfd: KeyV alue=2;break; /*KEY2按下,键值为2*/case 0xfb: KeyV alue=3;break; /*KEY3按下,键值为3*/case 0xf7: KeyV alue=4;break; /*KEY4按下,键值为4*/case 0xef: KeyV alue=5;break; /*KEY5按下,键值为5*/case 0xdf: KeyV alue=6;break; /*KEY6按下,键值为6*/case 0xbf: KeyV alue=7;break; /*KEY7按下,键值为7*/case 0x7f: KeyV alue=8;break; /*KEY8按下,键值为8*/}while (KeyISegCodeO!=0xff); /*等待键释放*/}}return(KeyV alue); /*返回键值*/}void display(unsigned char NumLED) /*显示函数*/{ unsigned char code SegCode[16]={63,6,91,79,102,109,125,7,127,111,0}; /*0~9、显黑共阴极段码*/ unsigned char i;BitCtrO=1; /*指向显示器末位*/for (i=0;i<NumLED;i++){ KeyISegCodeO=SegCode[DispBuf[i]]; /*显示当前位*/delay(5); /*延时约4ms(fosc=12MHz)*/BitCtrO=BitCtrO<<1; /*指向前一位*/}}main(){ unsigned char KeyV alue,i;while(1){ KeyV alue=KeyBoardScan(); /*扫描键盘获得键值*/if (KeyV alue!=0){ /*显示缓冲区刷新*/for (i=5;i>0;i--)DispBuf[i]=DispBuf[i-1];DispBuf[0]=KeyV alue;}display(6); /*显示(6位)*/}}TEST4-2.1.C#include <reg51.h>#include <intrins.h>#define KeyROCISegCodeO P1 /*定义键盘行输出列输入/段码输出口*/#define BitCtrO P2 /*定义动态LED显示器位控码输出口*/#define NumRow 3 /*定义键盘行数为3*/#define NumColumn 4 /*定义键盘列数为4*/unsigned char DispBuf[6]={10,10,10,10,11,1}; /*显示数组,初始化为显示"In "*/unsigned char c_50ms=1; /*50毫秒计数*/void delay(unsigned char time) /*延时函数*/{ unsigned char i,j;for (i=0;i<time;i++)for (j=0;j<255;j++);}unsigned char KeyBoardScan() /*键盘扫描函数*/{ unsigned char row=NumRow,RowCode,column=NumColumn,ColumnState; /*行循环、行码、列循环、列状态*/BitCtrO=0; /*关闭显示*/KeyROCISegCodeO=0xf8; /*键盘行线均输出0*/if ((KeyROCISegCodeO|0x0f)!=0xff){ /*有键按下*/delay(12); /*消抖延时约10ms(fosc=12MHz)*/KeyROCISegCodeO=0xf8; /*键盘行线均输出0*/if ((KeyROCISegCodeO|0x0f)!=0xff){ /*确实有键按下,寻找是哪个键*/RowCode=0xfe; /*指向第1行*/for(row=0;row<NumRow;row++) /*扫描共NumRow行*/{ KeyROCISegCodeO=RowCode; /*当前行*/ColumnState=KeyROCISegCodeO|0x0f; /*获取列状态*/for(column=0;column<NumColumn;column++) /*查询共NumColumn列的状态*/if ((ColumnState|0x7f)==0x7f){ while ((KeyROCISegCodeO|0x0f)!=0xff); /*等待键释放*/return(row*NumColumn+column); /*返回键值*/}elseColumnState=_crol_(ColumnState,1); /*指向下一列*/RowCode=_crol_(RowCode,1); /*指向下一行*/}}}return(NumRow*NumColumn); /*返回无键值*/}void display(unsigned char NumLED) /*显示函数*/{ unsigned char code SegCode[12]={63,6,91,79,102,109,125,7,127,111,0,84}; /*0~9、黑、n共阴极段码*/ unsigned char i;BitCtrO=1; /*指向显示器末位*/for (i=0;i<NumLED;i++){ KeyROCISegCodeO=SegCode[DispBuf[i]]; /*显示当前位*/delay(6); /*延时约5ms(fosc=12MHz)*/BitCtrO=BitCtrO<<1; /*指向前一位*/}}main(){ unsigned char i,KeyV alue,lock=0; /*循环,键值,键联锁:0:"停止"键有效、1:数字键有效、2:"开始"键有效*/TMOD=1; /*定时计数器0定时、方式1*/TH0=(65536-50000)/256; /*定时计数器0定时50ms*/TL0=(65536-50000)%256;ET0=1; /*开定时计数器0中断*/EA=1; /*开总中断*/while(1){ KeyV alue=KeyBoardScan(); /*扫描键盘获得键值*/switch (KeyV alue) /*键处理*/{ case 12: break; /*无键按下不处理*/case 11: { if (lock==0){ /*"停止键"有效及处理*/TR0=0; /*关闭T0*/DispBuf[5]=1; /*左边第1个数码管显"I"*/DispBuf[4]=11; /*左边第2个数码管显"n"*/for (i=0;i<4;i++) DispBuf[i]=10; /*后面4个数码管显黑*/lock=1; /*数字键有效*/}} break;case 10: { if (lock==2){ /*"开始"键有效及处理*/TR0=1; /*启动T0*/lock=0; /*"停止"键有效*/}} break;default: { if (lock==1){ /*数字键有效及处理*/DispBuf[0]=KeyV alue; /*右边第1个数码管显键入的字符*/for (i=5;i>0;i--) DispBuf[i]=10; /*其余5个显黑*/lock=2; /*"开始"键有效*/}}}display(6); /*数码管(6个)显示*/}}/**********定时计数器0中断处理程序*********/TC0() interrupt 1 using 1{ unsigned char temp,i;TH0=(65536-50000)/256; /*定时计数器0重新定时50ms*/TL0=(65536-50000)%256;if (c_50ms++>10){ /*0.5s后使键入字符左环移1位*/c_50ms=1;temp=DispBuf[5];for (i=5;i>0;i--) DispBuf[i]=DispBuf[i-1];DispBuf[0]=temp;}}TEST4-2.2.C#include <reg51.h>#include <intrins.h>#define KeyROCISegCodeO P1 /*定义键盘行输出列输入/段码输出口*/#define BitCtrO P2 /*定义动态LED显示器位控码输出口*/#define NumRow 3 /*定义键盘行数为3*/#define NumColumn 4 /*定义键盘列数为4*/unsigned char DispBuf[6]={10,10,13,12,12,9}; /*显示数组,初始化为显示"good "*/unsigned long total; /*T0溢出计数*/void delay(unsigned char time) /*延时函数*/{ unsigned char i,j;for (i=0;i<time;i++)for (j=0;j<255;j++);}void delaytest(unsigned int time) /*延时函数*/{ unsigned int i,j;for (i=0;i<time;i++)for (j=0;j<65535;j++);}unsigned char KeyBoardScan() /*键盘扫描函数*/{ unsigned char row=NumRow,RowCode,column=NumColumn,ColumnState; /*行循环、行码、列循环、列状态*/BitCtrO=0; /*关闭显示*/KeyROCISegCodeO=0xf8; /*键盘行线均输出0*/if ((KeyROCISegCodeO|0x0f)!=0xff){ /*有键按下*/delay(12); /*消抖延时约10ms(fosc=12MHz)*/KeyROCISegCodeO=0xf8; /*键盘行线均输出0*/if ((KeyROCISegCodeO|0x0f)!=0xff){ /*确实有键按下,寻找是哪个键*/RowCode=0xfe; /*指向第1行*/for(row=0;row<NumRow;row++) /*扫描共NumRow行*/{ KeyROCISegCodeO=RowCode; /*当前行*/ColumnState=KeyROCISegCodeO|0x0f; /*获取列状态*/for(column=0;column<NumColumn;column++) /*查询共NumColumn列的状态*/if ((ColumnState|0x7f)==0x7f){ while ((KeyROCISegCodeO|0x0f)!=0xff); /*等待键释放*/return(row*NumColumn+column); /*返回键值*/ }elseColumnState=_crol_(ColumnState,1); /*指向下一列*/RowCode=_crol_(RowCode,1); /*指向下一行*/ }}}return(NumRow*NumColumn); /*返回无键值*/}void display(unsigned char NumLED) /*显示函数*/{ unsigned char code SegCode[18]={63,6,91,79,102,109,125,7,127,111,0,84,92,94,115,119,80,121}; /*0~9、黑、n、o、d、P、A、r、E共阴极段码*/unsigned char i;BitCtrO=1; /*指向显示器末位*/for (i=0;i<NumLED;i++){ KeyROCISegCodeO=SegCode[DispBuf[i]]; /*显示当前位*/delay(6); /*延时约5ms(fosc=12MHz)*/BitCtrO=BitCtrO<<1; /*指向前一位*/ }}void error(){ DispBuf[5]=17; /*显"E"*/DispBuf[4]=16; /*显"r"*/DispBuf[3]=16; /*显"r"*/DispBuf[2]=12; /*显"o"*/DispBuf[1]=16; /*显"r"*/DispBuf[0]=10; /*显黑*/}main(){ unsigned char temp,NumBit,i,KeyV alue; /*临时、数字位数,循环,键值*/ unsigned long result; /*实参值/测量结果*/bit lock=0 ; /*键联锁:0:"测量"键有效、1:数字键/"确认"键有效*/ TMOD=1; /*定时T0定时方式1*/TH0=0;TL0=0;ET0=1; /*开T0中断*/EA=1; /*开总中断*/while(1){ KeyV alue=KeyBoardScan(); /*扫描键盘获得键值*/switch (KeyV alue) /*键处理*/{ case 12: break; /*无键按下不处理*/case 11: { if (lock==0){ /*"测量键"有效及处理*/DispBuf[5]=1; /*显"I"*/DispBuf[4]=11; /*显"n"*/DispBuf[3]=14; /*显"P"*/DispBuf[2]=15; /*显"A"*/DispBuf[1]=16; /*显"r"*/DispBuf[0]=15; /*显"A"*/NumBit=0; /*无数字输入*/lock=1; /*数字/"确认"键有效*/}} break;case 10: { if (lock){ /*"确认"键有效及处理*/if (NumBit>0) /*限定必须输入至少1位实参值*/{ /*获得有效数字位*/for (i=4;i>0;i--)if (DispBuf[i]==10) DispBuf[i]=0;else break;result=10000*DispBuf[4]+1000*DispBuf[3]+100*DispBuf[2]+10*DispBuf[1]+DispBuf[0]; /*获得实参值*/if (result<65536&&result!=0){ total=0; /*T0溢出计数初值0*/TR0=1; /*启动T0*/delaytest((unsigned int)result);TR0=0; /*关闭T0*/result=(total*65536+TH0+TL0)/1000; /*获得ms为单位的测量结果*/if (result<1000000){ /*显示测量结果*/for (i=0;i<6;i++) /*获得测量结果数字位*/{ DispBuf[i]=result%10;result/=10;}for (i=5;i>0;i--) /*去掉测量结果数字位无效0*/if (DispBuf[i]==0)DispBuf[i]=10 ;else break;}elseerror(); /*结果超出显示范围,提示出错*/}elseerror(); /*实参为0或超出65535,提示出错*/}elseerror(); /*实参为0,提示出错*/lock=0; /*"测量"键有效*/}} break;default: { if (lock){ /*数字键有效及处理*/if (NumBit++<5) /*限定只能输入1~5位实参值*/{ if(NumBit!=1){ /*数字位左移*/temp=DispBuf[5];for (i=5;i>0;i--) DispBuf[i]=DispBuf[i-1];DispBuf[0]=temp;DispBuf[0]=KeyV alue;}else{ if (KeyV alue==0){ /*第1位数字为0,提示出错*/error();lock=0; /*"测量"键有效*/}else{ for (i=5;i>0;i--) DispBuf[i]=10;DispBuf[0]=KeyV alue;}}}else{ error();lock=0; /*"测量"键有效*/}}}}display(6); /*数码管(6个)显示*/}}/*******T0中断处理程序*******/TC0() interrupt 1 using 1{ total++;}。
实验四 字符显示实验 实验报告
字符显示实验实验报告一、实验目的1. 了解液晶显示的基本原理2. 掌握如何通过单片机对LM016L显示模块的控制二、实验内容通过AT89C52单片机控制显示模块(液晶模块可以分别在上下显示两行不同的字符串)输出四段不同的字符,四段字符的显示通过四个外部的按钮控制。
按钮编号对应单片机接口显示的字符串显示效果1 P2.0 This is line12 P2.1 This is line23 P2.2 This is line34 P2.3 This is line4三、实验原理1. 通过P2口实现响应外部按钮控制原理:控制按钮的两端,其中一段连接单片机的P2口,另一端接地。
当按钮没有被按下时,按钮连接单片机一端相当于悬空(即高电平);当按钮被按下时,P2口相当于直接接地(即低电平),由此,可以通过判断P2的高低电平来判断某个按钮是否按下,继而实现对外部按钮的相应。
2. LM016L显示模块的初始化指令:①清屏指令:01H②显示模式设置:38H(设置为16x2显示,5x7点阵,8位数据接口)③0 0 0 0 1 D C BD:显示开关(1;B:光标是否闪烁(1有效)0 0 0 0 0 1 N SN:如果N为1S=1,N=1时,写入字符后整屏左移;S=0时,写入一个字符后整屏不移动。
3. LM016L的寄存器选择:通过RS,RW两个寄存器的选择位,控制数据写入或者读取的寄存器。
RS RW 操作说明0 0 写操作指令(写入指令寄存器)0 1 读取busy Flag和位址计数器1 0 写字型(写入数据寄存器)1 1 从数据寄存器读取数据四、实验过程1. 连接好单片机及其外围设备的连线2. 汇编程序RS EQU P2.5 MOV R2, ARW EQU P2.6 CALL WriteConE EQU P2.7 MOV R1, #00HORG 0000H Loop1: MOV A, R1LJMP Init MOVC A, @A+DPTRORG 0100H MOV R2, A Init: MOV R2, #01H CALL WriteDat CALL WriteCon INC R1MOV R2, #38H CJNE A, #00H, Loop1CALL WriteCon RETMOV R2, #0FH WriteCon: MOV P0, R2CALL WriteCon CLR RSMOV R2, #06H CLR RWCALL WriteCon CLR EMOV R2, #80H CALL DelayCALL WriteCon SETB EKey: JNB P2.0, Line1 RETJNB P2.1, Line2 WriteDat: MOV P0, R2JNB P2.2, Line3 SETB RSJNB P2.3, Line4 CLR RWLJMP Key CLR E Line1: CALL ClrLine1 CALL DelayMOV R3, #80H SETB EMOV DPTR, #String1 RETCALL WriteLin WriteDatS: MOV P0, R2LJMP Key SETB RS Line2: CALL ClrLine2 CLR RWMOV R3, #0C0H CLR EMOV DPTR, #String2 CALL DelaySCALL WriteLin SETB ELJMP Key RETLine3: CALL ClrLine1 ClrLine2: MOV R2, #0C0H MOV R3, #80H CALL WriteConMOV DPTR, #String3 CALL ClrProCALL WriteLin RETLJMP Key ClrLine1: MOV R2, #80H Line4: CALL ClrLine2 CALL WriteCon MOV R3, #0C0H CALL ClrProMOV DPTR, #String4 RETCALL WriteLin ClrPro: MOV R0, #20LJMP Key ClrLoop: MOV R2, #00H WriteLin: MOV A, R3 CALL WriteDatSDJNZ R0, ClrLoopRET DelayS: MOV R1, #0FHDelay: MOV R3, #0FFH DJNZ R1, $Loop: MOV R2, #0FFH RETDJNZ R2, $ String1: DB “this is line1”, 00HDJNZ R3, Loop String2: DB “this is line2”, 00HRET String3: DB “this is line3”, 00H DelayS: MOV R1, #0FH String4: DB “this is line4”, 00H DJNZ R1, $ ENDRET五、实验结果单片机在启动过程中,会将LCD显示模块进行初始化操作,初始化结束以后,LCD的光标会在第一行的最左边闪烁。
微机原理实验四LED数码管显示实验
微机原理实验四LED数码管显示实验LED数码管显示实验是微机原理中的一项重要实验,通过该实验可以学习到数码管的工作原理以及如何通过控制数字信号来实现数字的显示。
本文将详细介绍实验所需材料和步骤,并解析实验原理。
一、实验材料1.STM32F407开发板2.数码管模块3.面包板4.连接线5.杜邦线二、实验原理数码管是一种能够显示数字的装置,它由七个发光二极管组成,分别代表数字0-9、通过控制这七个发光二极管的亮灭,可以显示出不同的数字。
在实验中,我们使用STM32F407开发板来控制数码管。
数码管模块通过引脚与STM32F407开发板进行连接,其中共阴数码管的引脚与开发板的GPIO引脚相连,通过控制GPIO引脚的高低电平来控制数码管的亮灭。
三、实验步骤1.在面包板上连接数码管模块。
将数码管模块的引脚与STM32F407开发板的相应引脚通过杜邦线连接。
具体连接方式可以参考数码管模块和开发板的引脚定义。
2. 打开STM32CubeMX软件,创建一个新工程。
选择适合的开发板型号,并进行引脚配置。
将引脚配置为通用输出模式,并将相应的引脚定义为控制数码管的引脚。
3. 在生成的代码中找到main.c文件,在其中添加控制数码管的代码。
首先需要引入相应的头文件,并定义控制数码管的引脚宏定义。
4. 在main函数中,初始化控制数码管的引脚为输出模式。
然后通过控制引脚的高低电平来实现数码管的亮灭。
四、实验结果与分析经过以上步骤,我们成功控制了数码管的显示。
数码管显示的数字由控制引脚的高低电平确定,通过改变控制引脚的电平可以实现不同的数字显示。
值得注意的是,数码管的亮灭是通过切换引脚的电平来实现的,当引脚为高电平时,数码管熄灭;反之,当引脚为低电平时,数码管亮起。
在实际应用中,可以通过编写代码来改变控制引脚的电平,从而实现字母、字符、动画等更加复杂的显示效果。
五、实验总结本次实验通过控制STM32F407开发板的GPIO引脚,成功实现了LED数码管的显示。
字符显示实验
实验一:字符显示实验学号:1203121650 姓名:于斌批次:第3批一、实验要求:编写设计通过液晶显示器显示相应的数字或字母。
二、源程序:module lql8(clk,disp_out,en);input clk;output [7:0] disp_out,en;reg [31:0] cnt_scan=0;reg [1:0] sec_cnt=0;reg [7:0] disp_out_r,en_r;assign disp_out=disp_out_r;assign en=en_r;always@(posedge clk)begincnt_scan<=cnt_scan+1;if(cnt_scan == 4'b1111)begincnt_scan<= 0;sec_cnt=sec_cnt+1;if(sec_cnt>=4) sec_cnt<=0;endendalways@(cnt_scan)begin //select row case(cnt_scan[2:0])3'b000:en_r<=8'b11111110;3'b001:en_r<=8'b11111101;3'b010:en_r<=8'b11111011;3'b011:en_r<=8'b11110111;3'b100:en_r<=8'b11101111;3'b101:en_r<=8'b11011111;3'b110:en_r<=8'b10111111;3'b111:en_r<=8'b01111111;endcaseendalways@(cnt_scan)beginif(sec_cnt==2'b00)begin //display Acase(cnt_scan[2:0])3'b000:disp_out_r<=8'h00;3'b001:disp_out_r<=8'hfc;3'b010:disp_out_r<=8'h12;3'b011:disp_out_r<=8'h11;3'b100:disp_out_r<=8'h11;3'b101:disp_out_r<=8'h12;3'b110:disp_out_r<=8'hfc;3'b111:disp_out_r<=8'h00;endcaseendelse if(sec_cnt==2'b01)begin //display B case(cnt_scan[2:0])3'b000:disp_out_r<=8'h00;3'b001:disp_out_r<=8'h00;3'b010:disp_out_r<=8'hff;3'b011:disp_out_r<=8'h89;3'b100:disp_out_r<=8'h89;3'b101:disp_out_r<=8'h8e;3'b110:disp_out_r<=8'h70;3'b111:disp_out_r<=8'h00;endcaseendelse if(sec_cnt==2'b10)begin //display C case(cnt_scan[2:0])3'b000:disp_out_r<=8'h00;3'b001:disp_out_r<=8'h3c;3'b010:disp_out_r<=8'h42;3'b011:disp_out_r<=8'h81;3'b100:disp_out_r<=8'h81;3'b101:disp_out_r<=8'h81;3'b110:disp_out_r<=8'h42;3'b111:disp_out_r<=8'h00;endcaseendelse begin //display D case(cnt_scan[2:0])3'b000:disp_out_r<=8'h00;3'b001:disp_out_r<=8'hff;3'b010:disp_out_r<=8'h81;3'b011:disp_out_r<=8'h81;3'b100:disp_out_r<=8'h81;3'b101:disp_out_r<=8'h42;3'b110:disp_out_r<=8'h3c;3'b111:disp_out_r<=8'h00;endcaseendendendmodule三、实验步骤:1.打开操作软件diamond2.0;2.建工程并选器件新建工程file->new->project->next,然后在弹出来的对话框中填写相关内容,在Location栏上选用已经建好的文件夹(F/yubin);然后点击NEXT, 在新弹出的对话框NEW PROJECT点击NEXT,在新出现的对话框中选择相应芯片,本实验所选芯片应为MachXO2-LCMXO2-1200ZE-2MG132C;3.建立源文件在新建项目file->new->file,在对话框New File中,选择verilog;在name栏输入文件名lcd_display,点击NEXT,在Lattic Diamond主界面出现lcd_display.v. 在TextEditer中编写verilog模块代码;4.综合在主界面Process窗口中双击Translate Design,对所编辑的代码进行综合;5. 管脚分配在pin一栏中填入各输入输出映射的管脚。
显示程序实验_实验报告
一、实验目的1. 了解显示程序的基本原理和实现方法。
2. 掌握使用C语言编写显示程序的基本步骤。
3. 熟悉计算机显示系统的组成和功能。
4. 培养实际编程能力,提高动手操作能力。
二、实验环境1. 操作系统:Windows 102. 编译器:Visual Studio 20193. 显示器:普通显示器三、实验原理显示程序是指将计算机中的数据以图形或文字形式展示在显示器上的程序。
在计算机系统中,显示程序主要涉及以下原理:1. 图形显示原理:通过将图像数据转换成显示器可以识别的信号,驱动显示器显示图像。
2. 文字显示原理:通过字符编码将文字信息转换成显示器可以识别的信号,驱动显示器显示文字。
四、实验步骤1. 创建一个新的C语言项目,命名为“显示程序实验”。
2. 在项目文件夹中创建一个名为“display.c”的源文件。
3. 在“display.c”文件中编写以下代码:```c#include <stdio.h>#include <windows.h>int main() {// 创建一个窗口HWND hwnd = CreateWindow("static", "显示程序实验",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, CW_USEDEFAULT, 640, 480, NULL, NULL, NULL, NULL);ShowWindow(hwnd, SW_SHOW);// 创建一个设备上下文HDC hdc = GetDC(hwnd);// 创建一个画笔HPEN hPen = CreatePen(PS_SOLID, 1, RGB(255, 0, 0));// 选择画笔SelectObject(hdc, hPen);// 绘制矩形Rectangle(hdc, 100, 100, 300, 300);// 绘制文字TextOut(hdc, 50, 50, "Hello, World!", strlen("Hello, World!")); // 释放画笔DeleteObject(hPen);// 释放设备上下文ReleaseDC(hwnd, hdc);// 等待用户关闭窗口MSG msg;while (GetMessage(&msg, NULL, 0, 0)) {TranslateMessage(&msg);DispatchMessage(&msg);}return 0;}```4. 编译并运行程序,观察显示效果。
显示程序实验实验报告
西北工业大学明德学院实验报告实验项目微机原理与接口技术实验班级 122202姓名杜昊昀学号 121764指导老师李茹时间 2014-03-18实验题目显示程序实验实验目的利用计算机语言输出一个字符和字符串,并且输出自己的姓名,班级和学号。
实验内容DATA SEGMENTMES1 DB ‘name:dhy’,0AH,0DH,'$' MES2 DB ‘number:121764’ ,0AH,0DH,'$' MES3 DB ‘class:122202’,OAH,ODH,’$’SD DB '3'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV DX,OFFSET MES1 ;显示提示信息MOV AH,09HINT 21HMOV DX,OFFSET MES2 ;显示提示信息MOV AH,09HINT 21HMOV SI,OFFSET SDMOV AL,DS:[SI]AND AL,0F0H ;取高4位SHR AL,4CMP AL,0AH ;是否是A以上的数JB C2ADD AL,07HC2: ADD AL,30HMOV DL,AL ;显示字符 MOV AH,02HINT 21HMOV AL,DS:[SI]AND AL,0FH ;取低4位 CMP AL,0AHJB C3ADD AL,07HC3: ADD AL,30HMOV DL,AL ;显示字符 MOV AH,02HINT 21HMOV AX,4C00H ;返回DOS INT 21HCODE ENDSEND START实验步骤1、阅读老师给的原程序,再利用相关的软件输入源代码。
2、根据老师要求修改源代码,分别将将自己的班级,学号和姓名及字符“3”,编写进程序。
3、编程完整个程序之后,检查无错误之后,经过编译,链接和运行得到输出结果。
实验四 屏幕字符显示程序
实验四屏幕字符显示程序实验目的通过实验掌握下列知识:1、8086指令: JMP,ROR,XOR,HLT。
2、利用DOS功能调用INT 21H的2号和9号功能进行屏幕显示的方法。
3、IBM-PC机的ASCII码表及控制字符。
4、利用^Break(CTRL+BREAK)退出程序的方法及局限性。
实验内容及步骤一、利用INT 21 09H号功能调用显示字符串1、用A命令在100H处键入下列程序:MOV AH, 9MOV DX,110INT 21INT 202、用A命令在110H处键入下列字符串的ASCII码:DB 'This is a sample!$'3、用N命令和W命令将此程序(包括数据区)存入文件名为的磁盘文件中。
(存入前BX:CX必须置为文件长度值)。
4、用Q命令退出DEBUG。
5、在DOS命令下键入AA,运行此程序,即在屏幕上显示'This is a sample!'字符串,若不出现,用DEBUG检查程序有无错误。
二、利用INT 21H 2号功能显示字符1、用A命令在100H处键入下列程序:XOR DL,DLMOV CX,100LOP: MOV AH,2INT 21INC DLPUSH CXMOV CX,8DELY:PUSH CXMOV CX,0J:LOOP JPOP CXLOOP DELYPOP CXLOOP LOPINT 202、用G命令运行程序,即在屏幕上依次缓慢的显示256个ASCII字符。
仔细观察每个字符,和IBM-PC ASCII码表对照,看07H-0DH处控制字符显示结果与表上有何不同?3、按CTRL+BREAK退出此程序,若一次不行可多做几次。
三、自编一个程序,要求显示AX的内容,即能显示AX=xxxx。
调试时AX的内容可用R命令赋值,也可用MOV指令赋值。
字符显示的微机实验报告
一、实验目的1. 了解字符显示微机的基本原理和结构;2. 掌握字符显示微机的编程方法;3. 学会使用字符显示微机进行简单的数据处理和显示。
二、实验原理字符显示微机是一种基于微处理器的字符显示设备,它可以用于显示文本、图形等信息。
字符显示微机主要由以下几个部分组成:1. 微处理器:字符显示微机的核心部分,负责控制和协调各个模块的工作;2. 存储器:包括只读存储器(ROM)和随机存储器(RAM),用于存储程序和数据;3. 输入设备:如键盘、鼠标等,用于输入数据和指令;4. 输出设备:如显示器、打印机等,用于输出结果和显示信息;5. 接口电路:用于连接各个模块,实现数据传输和通信。
字符显示微机的基本工作原理是:微处理器根据程序指令,从存储器中读取数据,进行计算和逻辑判断,然后将结果输出到显示器上显示。
三、实验仪器与设备1. 字符显示微机一台;2. 键盘一个;3. 显示器一个;4. 电源一个。
四、实验步骤1. 启动字符显示微机,进入操作系统界面;2. 编写程序,实现以下功能:(1)定义一个字符数组,用于存储要显示的文本;(2)使用循环语句,逐个字符地在显示器上显示数组中的内容;(3)使用条件语句,实现显示内容的换行;(4)使用延时函数,实现显示内容的暂停效果;3. 编译程序,生成可执行文件;4. 运行程序,观察显示效果。
五、实验结果与分析1. 编写程序:```c#include <stdio.h>#include <stdlib.h>#include <unistd.h>int main() {char text[] = "Hello, world!";int i = 0;while (text[i] != '\0') {printf("%c", text[i]);i++;usleep(200000); // 延时200毫秒}printf("\n");return 0;}```2. 编译程序,生成可执行文件:`gcc -o display_text display_text.c`3. 运行程序,观察显示效果:在显示器上,程序将逐个字符地显示文本“Hello, world!”,每个字符之间有200毫秒的暂停效果。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验四屏幕字符显示程序
课程管理:汇编语言程序项目
项目名称:屏幕字符显示程序
实验类型:验证型
年级专业:2014级计算机科学与技术 6班
姓名:兰亚伟学号:12014241708
指导老师:谷萧君试验日期:2015年11月16号
实验目的:
通过实验掌握下列知识:
1、8088指令: JMP,ROR,XOR,HLT。
2、利用DOS功能调用INT21H的2号和9号功能进行屏幕显示的方法。
3、直接向视频RAM(VRAM)送ASCII码进行屏幕显示的方法。
4、IBM-PC机的ASCII码表及控制字符。
5、命令(。
COM)文件及使用方法。
6、利用^Break退出程序的方法及局限性。
实验内容及步骤:
一、利用INT 21 0AH号功能调用显示字符串。
1、用A命令在100H处键入下列程序:
MOV AH, 9
MOV DX,110
INT 21
INT 20
2、用A命令在110H处键入下列字符串的ASCII码:
DB 'This is a sample!$'
3、用N命令和W命令将此程序(包括数据区)存入文件名为AA。
COM的磁盘文件中。
(存入前BX:CX必须置为文件长度值)。
4、用Q命令退出DEBUG。
5、在DOS命令下打AA,运行此程序,即在屏幕上显示'This is a sample!'字符串,若不出现,用DEBUG检查程序有无错误。
二、利用INT 21H 2号功能显示字符:
1、用A命令在100H处键入下列程序:
XOR DL,DL
MOVCX,100
LOP:MOV AH,2
INT 21
INC DL
PUSH CX
MOV CX,8
DELY: PUSH CX
MOV CX,0
J: LOOP J
POP CX
LOOP DELY
POP CX
LOOP LOP
INT 20
2、用G命令运行程序,即在屏幕上依次缓慢的显示256个ASCII字符。
仔细观察每个字符,和IBM-PC ASCII码表对照,看07H-0DH处控制字符显示结果与表上有何不同?
3、按CTRL+BREAK退出此程序,若一次不行可多做几次。
三、直接向VRAM送ASCII码显示字符
1、用A命令在100H处键入下列程序:
LOP: MOV [BX],AL
INC BX
INC AL
PUSH CX
MOV CX,8
DELY: PUSH CX
MOV CX,0
J: LOOP J
POP CX
LOOP DELY
POP CX
LOOP LOP
INT 20
2、用N命令和W命令将此程序存入文件中。
(一定要先存入!)
3、用G命令运行此程序,仔细观察每一个ASCII码显示结果,并和字符表及上一道程序运行情况进行对照,其控制字符区(07-0DH)显示结果和INT 21H2号功能调用有何不同?
四。
自编一个程序,要求显示AX的内容,即能显示AX=xxxx。
调试时AX的内容可用R命令赋值,也可用MOV指令赋值。
实验报告要求:
1、各项实验记录及观察体会。
2、利用INT 21H显示和直接向VRAM送ASCII码显示方法在显示结果上有什么不同?
3、自编程序草稿及调试结果。
1、用A命令在100H处键入下列程序:
2、用A命令在110H处键入下列字符串的ASCII码:DB 'This is a sample!$'
3、用N命令和W命令将此程序(包括数据区)存入文件名为AA。
COM的磁盘文件中。
(存入前BX:CX必须置为文件长度值)。
4、用Q命令退出DEBUG。
5、在DOS命令下打AA,运行此程序,即在屏幕上显示'This is a sample!'字符串,若不出现,用DEBUG检查程序有无错误。
二、利用INT 21H 2号功能显示字符:
1、用A命令在100H处键入下列程序
2、用G命令运行程序,即在屏幕上依次缓慢的显示256个ASCII字符。
仔细观察每个字符,和IBM-PC ASCII码表对照,看07H-0DH处控制字符显示结果与表上有何不同?
3、按CTRL+BREAK退出此程序,若一次不行可多做几次。
三、直接向VRAM送ASCII码显示字符
1、用A命令在100H处键入下列程序
2、用N命令和W命令将此程序存入文件中。
(一定要先存入!)
3、用G命令运行此程序,仔细观察每一个ASCII码显示结果,并和字符表及上一道程序运行情况进行对照,其控制字符区(07-0DH)显示结果和INT 21H2号功能调用有何不同?。