人机交互-输出接口.ppt

上传人:牧羊曲112 文档编号:5209298 上传时间:2023-06-13 格式:PPT 页数:80 大小:3.82MB
返回 下载 相关 举报
人机交互-输出接口.ppt_第1页
第1页 / 共80页
人机交互-输出接口.ppt_第2页
第2页 / 共80页
人机交互-输出接口.ppt_第3页
第3页 / 共80页
人机交互-输出接口.ppt_第4页
第4页 / 共80页
人机交互-输出接口.ppt_第5页
第5页 / 共80页
点击查看更多>>
资源描述

《人机交互-输出接口.ppt》由会员分享,可在线阅读,更多相关《人机交互-输出接口.ppt(80页珍藏版)》请在三一办公上搜索。

1、第五章 人机交互 输出接口,一、概述二、数码管接口设计三、LCD液晶接口设计四、发声电路设计,一、概述,1、显示输出:嵌入式应用系统向人报告运行状态及运行结果最常用的手段;2、声音输出:主要是通过喇叭(SPK)来实现的;3、打印输出:通过打印机输出嵌入式系统运行的状态和结果;4、通信输出。,二、数码管接口设计,数码管是一种应用很普遍的显示器件,从单片机、ARM到许多微型机控制系统及数字化仪器仪表中都用到数码管作为显示输出。,数码管的主要部分是七段发光二极管;数码管分为共阴极和共阳极两种;为了保护各段LED,需外加限流电阻。有的产品还附带有一个小数点,故有人叫其为八段式发光二极管。,由7个发光段

2、的不同组合,从而实现十六进制数的显示。下面分别是共阴极和共阳极09的编码表。,共阴极编码管,共阳极编码管,1.1 数码管接口电路,通过段选端可以控制数码管显示内容;位选端用于控制整个数码管是否工作:共阴极数码管,位选端要接地;共阳极数码管,位选端要接高电平,一位数码管接口电路(共阴极),动态显示技术主要是利用了人眼的视觉暂留原理。人眼的视觉暂留时间约为100ms。在动态显示方式下,将各个显示位的段选端并联在一起,实现各显示位的分时选通。,数码管接口电路-动态扫描,实验目的:通过实验,理解数码管显示原 理,会编写数码管驱动程序。实验内容:控制数码管显示00009999。,1.2 实验目的与内容,

3、1.3 电路原理分析,实验板上采用了4位一体的数码管,数码管4条位选线连接ARM的通用I/O口;数码管的8个段选端连接74HC595芯片的并行I/O输出接口,74HC595再与ARM的SPI0模块进行通信,接收ARM发送过来的数据。,1.4 参考程序-初始化函数,/-引脚定义-#definesmgA1(122)/p2.22连接smgA1#definesmgA2(123)/p0.23连接smgA2#definesmgA3(119)/p1.19连接smgA3#definesmgA4(124)/p0.24连接smgA4/*名称:NumbTube_Init()*功能:数码管与SPI初始化*/void

4、NumbTube_Init(void)PINSEL1=PINSEL1/初始化SPI0(时序与74HC595相匹配),/-数码管显示数据(09显示码)-uint8 const NumberTube_TAB10=0 xC0,0 xF9,0 xA4,0 xB0,0 x99,0 x92,0 x82,0 xF8,0 x80,0 x98;/*名称:NumbTube_Display(uint32 data,uint8 radix_point)*功能:控制数码管显示数据。*入口参数:data需要显示的数据*radix_point小数点的位置,取值范围为4、3、2*/void NumbTube_Display(

5、uint32 data,uint8 radix_point)uint32 j,one,ten,hundred,thousand;/个,十,百,千,的变量声明 thousand=data/1000;/计算千位if(thousand!=0)data-=thousand*1000;hundred=data/100;/计算百位if(hundred!=0)data-=hundred*100;ten=data/10;/计算十位if(ten!=0)data-=ten*10;one=data%10;/计算个位,参考程序-数据显示函数,/-显示千位数据-if(radix_point=4)HC595_SendDa

6、ta(NumberTube_TABthousand,/*名称:NumbTube_Bit(uint8 data)*功能:选择数码管的位选。*入口参数:data 选择码,data的取值为0 x01,0 x02,0 x04,0 x08*出口参数:无*/void NumbTube_Bit(uint8 data)if(data,参考程序-位选函数,实验参考主程序,/*名称:main()*功能:控制数码管显示,完成实验内容*/int main(void)uint32 i;NumbTube_Init();for(i=1;i9999;i+)DelayMS(10);NumbTube_Display(i,0);r

7、eturn(0);,1.在Code Warrior IDE集成开发环境中,使用“Follow Me Study ARM”工程模板建立新工程。然后在工程中添加本实验的程序代码,按F7快捷键编译链接整个工程。编译报错则修改源程序中的错误,如果编译通过则在相应的目录下产生我们所需要的二进制文件和可执行映像文件。2.运行H-Flasher软件,将产生的二进制文件烧写到实验板上。3.打开AXD调试环境,并加载刚刚产生的可执行映像文件进行调试。4.单击全速运行按钮(快捷键F5),程序会运行并停留在main()主函数处;继续全速运行,数码管将显示数字从0000一直递加到9999。,1.5 实验步骤与结果,三

8、、LCD液晶接口设计,概述 液晶显示LCD是一种被动的显示器件,它不能发光,只能使用周围环境的光。LCD具有低工作电压、微功耗、无辐射、小体积等特点,LCD液晶显示器还具有寿命长、不易引起视疲劳等优点。被广泛应用于仪表、家用电器、计算机、医疗仪器以及交通和通信等各个领域。,液晶显示原理 液晶是一种介于固体和液体之间,具有规则性分子排列的有机化合物,既有晶体所特有的各向异性造成的双折射性,又有液体所特有的流动性。,(a)液体分子(b)液晶分子,1.按点像素深度分类 点象素深度:每个像素点的颜色有多少个二进制位表示。单色屏、4级灰度屏、8级灰度屏、16级灰度屏、64级灰度屏、266级灰度屏、16色

9、屏、266色伪彩色屏、真彩色屏等。2.按工作原理分类1)TN型(扭曲向列型液晶);2)STN型(超扭曲向列型液晶);3)TFT型(薄膜晶体管型液晶)。3.按内容显示方式分类1)数显液晶;2)点阵字符液晶;3)点阵图形液晶。,1.1 液晶显示屏分类,LM2068点阵图形式液晶显示模块具有两种系列(S、E)。S系列的液晶模块采用RA8835控制器,内置32K SRAM显示存储器,适配Intel8080系列 MPU 的操作时序电路。显示区具有文本和图形两种显示特性,多种显示合成方式。具有LCD驱动电源,广泛地适用于仪器仪表中。,1.2 液晶模块LM2068,LCD的驱动原理:调整施加到液晶像素上的电

10、压、相位、频率、峰值、有效值和占空比等参数来实现显示。,模块接口多为FFC扁平线方式,需要专用插座连接。LM2068S液晶显示模块由以下四个部分组成:1、LCD面板2、RA8835控制电路3、电源与调压器电路4、背光控制电路,1.3 液晶显示模块的接口特性,LM2068液晶显示模块的系统方框图,电源与调压器电路为LM2068模块提供电源,根据VOUT和V0引脚之间的电压比例控制LCD的对比度。背光控制电路为LCD面板的显示提供背景光。下图为LM2068模块内部的背景灯电路。,1.4 LM2068S的引脚定义,LM2068提供了Intel8080时序接口;CS是片选线,低电平有效;WR和RD分别

11、为写和读控制线,上升沿有效;A0为选择信号线。,LM2068的读/写时序图,1.5 LM2068S的时序,注意:当MCU与LM2068进行通信时,必须满足以上LM2068的时序要求。上电后,/RST保持低电平至少5ms以上,低电平拉高后至少保持800ms再对模块进行软件初始化。,LM2068S的时序,使用间接访问方式实现电路连接。液晶模块的数据总线D0D7连接74LS164芯片的并行I/O口输出,其读、写、片选、复位等控制信号都是通用I/O引脚控制。,1.6 LM2068S的接口电路,显示区具有两种特性:文本显示、图形显示。文本显示:拥有文本显示特性的显示区;专用于文本方式显示使用;图形显示:

12、拥有图形显示特性的显示区;专用于图形方式显示使用;RA8835可以同时管理多个显示区域,模块的大多数指令也是围绕显示区域设置进行的。参数主要有SAD、SL、AP、C/R。SAD-显示区域的起始地址;SL-显示区域的“高度”,即所管理显示的行数;AP-显示区域的“宽度”,即一行显示所占的字节数;C/R-实际显示宽度,模块屏面的显示字符数。,1.7 LM2068S的指令系统-显示区域,显示区域在显示RAM中的起始位置是SAD,终止位置是SAD+(SL*AP),实际显示空间大小是SAD+(SL*C/R)。,显示区域结构示意图,LM2068S模块中的指令大致分为4部分:系统控制、显示控制、光标控制和数

13、据操作指令。,LM2068S的指令系统-指令表,SYSTEM SET指令代码 40H 指令描述:该指令是模块的软件初始化设置指令。,POWER SAVE 指令代码 53H 指令描述:空闲模式启用/退出指令。,1.8 指令详述,SCROLL 指令代码 44H指令描述:该指令带有10个参数,设置4个显示区域分别在RAM空间中的起始位置和显示行数。,指令详述,OV:合成方式选择位。DM1:第一显示区域的显示属性选择位。0:文本 1:图形DM2:第三显示区域的显示属性选择位。合成显示的逻辑关系设置,具体设置见表。,OVLAY指令代码 5BH 指令描述:该指令设置了显示区域合成显示的逻辑关系以及第一、三

14、显示区域的显示特性。,DISO NO/OFF指令代码59H/58H 指令描述:显示开关设置指令,带有1个参数,设置了各显示区及光标的显示属性。,显示开关设置指令所带的参数,显示属性设置,HDOT_SCR指令代码5AH 指令描述:该指令设置了以点为单位的画面水平移动量。,CGRAM_ADR指令代码 5CH指令描述:自定义字库的CGRAM起始地址设置,带有2个参数。,CSRW指令代码46H指令描述:设置光标地址指令。,CSRR指令代码47H指令描述:读取光标地址指令。,所带参数表,CSRDIR指令代码4CH4FH指令描述:光标移动方向的设置指令。,光标移动方向与对应取值,CSR_FORM指令代码5

15、DH指令描述:该指令为光标形状的设置指令。,CRX:光标宽度,以象数点为单位。CRY:光标高度,以象数点为单位。CM:光标形状选择。,MEMWRITE指令代码42H 指令描述:显示数据写操作指令。MEMREAD指令代码43H 指令描述:显示数据读操作。,#define LCD_A0(123)/P2.23 选择信号#define LCD_RD(124)/P2.24 读信号#define LCD_RST(125)/P2.25 复位信号#define LCD_CS(126)/P2.26 芯片使能信号,共用BOOT0引脚#define LCD_WE(127)/P2.27 写信号,共用BOOT1引脚/*

16、名称:LCD_WriteCommand(uint8 Code)*功能:往液晶模块写入一个字节的代码*入口参数:Code指令代码*注释:由于P2.27为特殊引脚,所以在写操作结束后将P2.27拉低*/void LCD_WriteCommand(uint8 Code)uint8 i;IO2CLR=LCD_CS;/CS=0 IO2SET=LCD_A0;/A0=1 LS164_SendData(Code);/通过74HC164芯片向模块写指令代码 IO2SET=LCD_RD;/RD=1 IO2CLR=LCD_WE;/WR=0 for(i=0;i3;i+);IO2SET=LCD_WE;/WR=1 IO2

17、SET=LCD_CS;IO2CLR=LCD_WE;,写命令子程序,/*名称:LCD_WriteData()*功能:往液晶模块写入一个字节的数据*入口参数:Data数据*注释:由于P2.27为特殊引脚,所以在写操作结束后将P2.27拉低*/void LCD_WriteData(uint8 Data)uint8 i;IO2CLR=LCD_CS;/CS=0 IO2CLR=LCD_A0;/A0=0 LS164_SendData(Data);/通过74HC164芯片向模块写显示数据 IO2SET=LCD_RD;/RD=1 IO2CLR=LCD_WE;/WR=0 for(i=0;i3;i+);IO2SET

18、=LCD_WE;/WR=1 IO2SET=LCD_CS;/CS=1 IO2CLR=LCD_WE;/WR=0,写数据子程序,为了方便理解和代码移植,程序中把LM2068S模块中的所有命令都定义成宏,定义如程序清单。,#define SYSTEM_SET0 x40/初始化显示窗口设置,带8个参数#define SLEEP_IN0 x53/空闲操作-#define DISP_ON0 x59/显示开-#define DISP_OFF0 x58/显示关,设置显示方式,带1个参数#define SCROLL 0 x44/设置显示区域,卷动,带10个参数#define OVLAY0 x5B/设置合成显示方式

19、,带1个参数#define CGRAM_ADR0 x5C/设置CGRAM 起始地址,带2个参数#define HDOT_SCR0 x5A/设置点单元卷动位置,带1个参数#define CSRFORM0 x5D/设置光标形状,带2个参数#define CSRDIR_R0 x4C/设置光标移动方向 向右-#define CSRDIR_L0 x4D/设置光标移动方向 向左-#define CSRDIR_U0 x4E/设置光标移动方向 向上-#define CSRDIR_D0 x4F/设置光标移动方向 向下-#define CSRW0 x46/设置光标地址,带2个参数#define CSRR0 x47

20、/读出光标地址,带2个参数#define MWRITE0 x42/数据写入显示缓冲区,带若干个参数#define MREAD0 x43/从显示缓冲区读数据,带若干个参数,命令宏定义,/*名称:LCD_FillAll(uint8 dat)*功能:LCD填充。以图形方式进行填充,起始地址为0 x0000。*入口参数:dat要填充的数据*出口参数:无*/void LCD_FillAll(uint8 dat)uint32 i;/-置地址指针-LCD_WriteCommand(CSRW);LCD_WriteData(0 x00);/地址为0 x0000 LCD_WriteData(0 x00);/-设置

21、光标移动方向:右-LCD_WriteCommand(CSRDIR_R);/-写入数据-LCD_WriteCommand(MWRITE);for(i=0;i240*41;i+)LCD_WriteData(dat);/-重置地址指针-LCD_WriteCommand(CSRW);LCD_WriteData(0 x00);/地址为0 x0000LCD_WriteData(0 x00);,清屏函数,uchar SYSTEMSET_TAB8=0 x30,/单屏结构,88点0 x87,0 x07,/字符宽度8,字符高度840,/有效显示窗口的长度40(320=8*40)0 x40,/lCD工作频率239,

22、/扫描点行数(240)41,/显示屏一行所占显示缓冲区的字节数0 x00;uchar SCROLL_TAB10=0 x00,0 x00,0 xef,/第一显示区的起始地址为0 x0000,点行数240 0 x70,0 x26,0 xef,/第二显示区的起始地址为0 x2670,点行数240 0 x00,0 x60,/第三显示区的起始地址为0 x6000 0 x00,0 x00;/第四显示区的起始地址为0 x000/*名称:LCD_Initialize()*功能:LCM初始化,将LCM初始化为纯图形模式,显示起始地址为0 x0000。*入口参数:无*出口参数:无*说明:带参数命令模式:先命令,后

23、数据复位LM2068时:/RST保持低电平至少5ms以上,低电平拉高后至少保持800ms再对模块进行软件初始化*/void LCD_Initialize(void)uchar i;/-初始化LCM的控制引脚-IO2DIR=IO2DIR|LCD_A0|LCD_CS|LCD_RD|LCD_WE|LCD_RST;,初始化函数,/-初始化164芯片,164芯片连接LCD的数据引脚D0D7-LS164_Init();/-复位模块-IO2CLR=LCD_RST;/拉低/RST引脚,保持5ms以上DelayMS(10);/软件延时IO2SET=LCD_RST;/拉高/RST引脚,至少延时800ms后再操作/

24、-系统设置指令-LCD_WriteCommand(SYSTEM_SET);for(i=0;i8;i+)LCD_WriteData(SYSTEMSET_TABi);/-显示区域设置-DelayMS(1);LCD_WriteCommand(SCROLL);for(i=0;i10;i+)LCD_WriteData(SCROLL_TABi);/-关闭显示-/LCD_WriteCommand(DISP_OFF);/关闭显示区/-其他显示功能设置-LCD_WriteCommand(HDOT_SCR);/HDOT_SCR,带1个参数LCD_WriteData(0 x00);LCD_WriteCommand(

25、OVLAY);LCD_WriteData(0 x0d);/二重合成,显示一区和三区都是图形方式,异或逻辑LCD_WriteCommand(CSRFORM);/光标是阴影块状显示方式,块大小是88个象素LCD_WriteData(0 x07);LCD_WriteData(0 x87);/-清除屏幕-LCD_FillAll(0 x00);/-打开显示-LCD_WriteCommand(DISP_ON);LCD_WriteData(0 x05);/本次只开启一显示区和光标,实验目的:理解液晶屏操作的基本原理,掌握液晶图形显示的基本方法。实验内容:在显示屏上画一个笛卡儿坐标系,并在坐标系的原点画一个半

26、径为20的圆,1.9 实验目的与内容,2.0 电路原理分析,LM2068S的数据线Q1Q8连接74HC164芯片,其他控制线由LPC2220的P2.23P2.27直接控制。,开发一些底层的画图函数,包括:打点函数;画直线函数;画圆函数;打印字符串函数等。设计时我们把软件划分3层:硬件驱动层基本图形层用户层。,软件层次图,2.1 画图基本思想,缓存区的定义如下:#define GUI_LCM_XMAX 320/定义液晶x轴的点象素#define GUI_LCM_YMAX 240/定义液晶y轴的点象素char gui_disp_bufGUI_LCM_YMAX GUI_LCM_XMAX/8;/定义显

27、示缓存,硬件驱动层主要完成两件任务:一是操作液晶模块:复位液晶模块,液晶模块的参数设置,等等。二是管理显示缓存区:将显示数据发送给液晶模块从而刷新显示内容。,2.2 硬件驱动层,硬件驱动层,这一层提供基本画线、画矩形、画圆、填充、打印字符等基本函数。本层一些必要的接口函数,基本图形层,实验参考程序,#include whole.h#define White1/*名称:main()*功能:绘制笛卡尔坐标系*出口参数:返回0表示操作失败,返回1表示操作成功*/int main(void)GRA_Initialize();/-画迪卡尔坐标系-GRA_Line(110,130,210,130,Whit

28、e);/画水平线GRA_Line(210,130,205,125,White);/画箭头GRA_Line(210,130,205,135,White);/画箭头GRA_Line(160,80,160,180,White);/画垂直线GRA_Line(160,80,155,85,White);/画箭头GRA_Line(160,80,165,85,White);/画箭头GRA_Circle(160,130,20,White);/画半径20的圆,GRA_PutChar(130,140,();/打印“(0,0)”GRA_PutChar(135,140,0);GRA_PutChar(140,140,);

29、GRA_PutChar(145,140,0);GRA_PutChar(150,140,);GRA_Refresh(100,80,220,170);/根据缓冲区的内容刷新显示屏while(1);return(1);,2.3 实验步骤与结果,1.在Code Warrior IDE集成开发环境中,使用“Follow Me Study ARM”工程模板建立新工程。然后在工程中添加本实验的程序代码,按F7快捷键编译链接整个工程。编译报错则修改源程序中的错误,如果编译通过则在相应的目录下产生我们所需要的二进制文件和可执行映像文件。2.运行H-Flasher软件,将产生的二进制文件烧写到实验板上。3.打开A

30、XD调试环境,并加载刚刚产生的可执行映像文件进行调试。4.单击全速运行按钮(快捷键F5),程序会运行并停留在main()主函数处;继续全速运行,液晶显示屏中显示我们绘制的笛卡儿坐标系。,四、发声电路设计-概述,电声器件是指能将声音信号转换为音频电信号或者将音频电信号转换为声音信号的器件。传声器俗称话筒,音译为麦克风,是一种声电换能器件,可分为电动和静电两类。蜂鸣器是一种一体化结构的电子讯响器,通常采用直流电压供电。扬声器俗称喇叭,也是一种发声器件,与蜂鸣器不同的是扬声器可以发出多种音频。所以它在实际生活中应用相当广泛。,1.1 扬声器发声原理扬声器主要起着“电力声”的能量变换作用。扬声器的分类

31、如下:按电声转换的原理分:电磁式、电动式、静电式、压电式等;按所覆盖的频带分:分为低声单元、中音n,单元、高音单元和全频带 单元。,电动式扬声器的结构,常见的扬声器实物图,声音的产生是一种音频振动的效果,振动的频率高则为高音,频率低则为低音。音频的范围为20Hz200kHz之间。一般音响电路是以正弦波信号驱动喇叭,产生悦耳的音乐;在数字电路里,则一般是以脉冲信号驱动喇叭以产生声音。,声音的产生,1.2 音调与节拍日常生活中通常以Do、Re、Mi、Fa、So、La、St分别代表某一个频率的声音,称之为“音调”,即Tone。在音阶表中一共包括3个音阶(低音、中音与高音),每个音阶粗略地为7个音度(

32、音调),而每个音阶之间的频率相差一倍。下表列出了C调音阶和频率之间的对照关系。,节拍”即Beat,让音乐具有旋律,更可以调节各个音的快慢速度。除了“拍子”以外,还有“音节”,在乐谱左上方都会定义每个音节有多少拍。如图所示:,若以程序来发出上述两小节的音,则是:Do0.25s、Do0.25s、Re0.5s、Do0.5 s;Fa0.5s、Mi1s即如图所示:524Hz250ms、524Hz250ms、588Hz500ms、524Hz500ms;740Hz500ms、660Hz1000ms。,产生音乐的波形图,具体实现方法:将乐谱中每个音符的音调和节拍转换成相应的音调参数和节拍参数,将其做成表格存放

33、在存储器里,通过程序依次取出一个音符的相关参数,播放该音符,直至播放完最后一个音符。,播放一段音乐“生日快乐歌”,简谱所示。,1.3 实验内容,喇叭电路连接图,LPC2220通过GPIO引脚P0.29连接三极管T的基级。控制三极管的导通与否,引起扬声器内部线圈的震动,从而产生声音。,1.4 电路原理分析,扬声器不同的振动频率会产生不同的音调。我们根据音符与振动频率的对应关系,分低、中、高音3大频率段,分别定义了3个频率表数组:FreTab_Low7、FreTab_Mid7、FreTab_High7。int FreTab_Low7=262,294,330,349,392,440,494;/低音的

34、频率表int FreTab_Mid7=523,578,659,698,784,880,988;/中音int FreTab_High7=1046,1175,1318,1397,1568,1760,1976;/高音,1.5 程序分析-音频表定义,音频表采取数组的形式保存歌曲的曲谱,曲谱存储格式:uint8 Happy_Birthday音调,节拍,音调,节拍.,0,0。其中Happy_Birthday”为歌曲存放的首地址;末尾:“0,0”表示结束。,uint8 Happy_Birthday=0 x11,0 x04,0 x11,0 x04,0 x12,0 x02,0 x11,0 x02,0 x14,0

35、 x02,0 x13,0 x01,0 x11,0 x04,0 x11,0 x04,0 x12,0 x02,0 x11,0 x02,0 x15,0 x02,0 x14,0 x01,0 x11,0 x04,0 x11,0 x04,0 x21,0 x02,0 x16,0 x02,0 x14,0 x02,0 x13,0 x02,x22,0 x02,0 x17,0 x04,0 x17,0 x04,0 x16,0 x02,x14,0 x02,0 x15,0 x02,0 x14,0 x01,0 x00,0 x00;在曲谱存放的数组中,音调与节拍相对应的。在保存的音调数据中,高4位数字代表低(0)、中(1)、

36、高音(2);低4位数字代表音符Do(1)、Re(2)、Mi(3)、Fa(4)、So(5)、La(6)、St(7)。在保存的节拍数据中,0 x02代表1拍,0 x04代表1/2拍,0 x08代表1/4拍,以此类推。,程序分析-播放表表定义,首先设置音频表的首地址,从音频表中取一组音调和节拍的数据。如果取的这两个数据都是0 x00,则表示音乐结束;否则的话,根据音调产生相应频率的脉冲信号驱动喇叭。如果节拍到了则继续从音频表中取数据。,音乐播放流程图,程序分析-播放流程,本节采用定时器0来产生相应的频率,用定时器1来控制音符节拍,两个定时器的中断服务子程序表,/*名称:(_irq)Time0_ISR

37、()*功能:改变喇叭引脚电平*/void _irq Time0_ISR()if(IO0PIN,1.6 参考程序-中断服务程序,if(*pMusic=0 x00)/中断结束,Music_Init()和Music_Play()函数,分别用于初始化设置和音乐播放。,参考程序-初始化和音乐播放函数,#defineSPEAK(1 29)/注释:P0.29控制喇叭/*名称:Music_Init()*功能:喇叭引脚与定时器0,1的初始化,给定时器0与1赋初值*入口参数:无*出口参数:无*/void Music_Init(void)PINSEL1=PINSEL1/设置T0MR0匹配后复位T0TC,并产生中断标

38、志,/-设置定时器0中断-VICVectCntl3=0 x24;/定时器0中断分配优先级3 VICVectAddr3=(uint32)Time0_ISR;/设置中断向量地址/-设置定时器1-T1TC=0;/定时器1计数器清0T1PR=2;/时钟不分频T1MCR=0 x03;/设置T1MR0匹配后复位T1TC,并产生中断标志/-设置定时器1中断-VICVectCntl2=0 x25;/定时器1中断分配优先级为2 VICVectAddr2=(uint32)Time1_ISR;/设置中断向量地址 VICIntEnable=VICIntEnable|0 x00000030;/使能定时器0/1中断,/*

39、名称:Music_Play()*功能:控制定时器0与定时器1,产生音乐*入口参数:无*出口参数:无*/void Music_Play(uint8*MusicTable)uint32 Frq,Sylla;/定义音符频率与节拍变量 pMusic=MusicTable;if(*pMusic/启动定时器0,/*名称:main()*功能:播放音乐*/int main(void)Music_Init();while(1)Music_Play(Happy_Birthday);/播放音乐return(0);,参考程序-Main主程序,1.在Code Warrior IDE集成开发环境中,使用“Follow M

40、e Study ARM”工程模板建立新工程。然后在工程中添加本实验的程序代码,按F7快捷键编译链接整个工程。编译报错则修改源程序中的错误,如果编译通过则在相应的目录下产生我们所需要的二进制文件和可执行映像文件。2.运行H-Flasher软件,将产生的二进制文件烧写到实验板上。3.打开AXD调试环境,并加载刚刚产生的可执行映像文件进行调试。4.单击全速运行按钮(快捷键F5),程序会运行并停留在main()主函数处;继续全速运行,我们可以听到喇叭播放的一段音乐“生日快乐歌”。,1.7 实验步骤与结果,五、LED点阵显示屏,LED显示屏是由多个发光二极管排列组成的显示器件LED显示屏可以显示变化的数

41、字、文字、图形图像。LED显示屏技术特点:效果卓越;维修方便;质量优良;格式灵活;内容丰富;信息量大。,目前LED显示屏作为新一代的信息传播媒体,已经成为城市信息现代化建设的标志,同时也可广泛应用到军事、车站、宾馆、体育、新闻、金融、证券、广告以及交通运输等许多行业。,各种LED显示屏,LED显示产品目前已形成了4类:1、单色文字显示屏;2、点阵和数码管混合显示屏;3、双基色(红、绿)多媒体视屏;4、全彩色(红、绿、蓝)多媒体视屏。LED它本身具有如下优点:亮度高、工作电压低、功耗小、小型化、寿命长、耐冲击和性能稳定。LED电子显示屏目前正朝着更高亮度、更高耐气候性、更高的发光密度、更高的发光

42、均匀性、更高的灰度级别、全色化方向发展。,1.1 LED点阵显示屏分类,8X8点阵LED结构,由64个发光二极管组成。每个发光二极管放置在行线和列线的交叉点上,当对应的某一行置1电平,某一列置0电平,则相应的二极管就亮。88 LED点阵显示屏实物,如果想设计更大的点阵显示屏,可以采用多个模块进行拼接。,88 LED点阵显示屏内部示意图,1.2 LED点阵显示原理,我们在LED点阵显示屏上显示一个“大”字。,显示方法有两种:行扫描、列扫描。下面以列扫描为例,算法如下:for(i=1;i9;i+)第i列置0,其他列置1,R1R8行输入相应的编码数据;延时1ms;,1.3 实验目的与内容,实验目的:

43、理解LED点阵显示屏操作的基本原理,掌握汉字显示的基本方法。实验内容1:在88 LED显示屏上显示一个“大”字。实验内容2:在88 LED显示屏上显示一个“大”字,并控制该“大”字从左到右平滑移动。,1.4 实验原理分析,当所有的行引脚R1R8为高电平,所有的列引脚C1C8为低电平时,则这个点阵模块上的64个LED灯全部点亮。同样利用人眼的视觉暂留原理来实现内容的显示,电路中显示一个“大”字。如果采用列扫描的方法,则算法如下:Q1输出低电平,其他列输出高电平;QHQA输出0 x44;延时1ms。Q2输出低电平,其他列输出高电平;QHQA输出0 x24;延时1ms。Q3输出低电平,其他列输出高电

44、平;QHQA输出0 x14;延时1ms。Q4输出低电平,其他列输出高电平;QHQA输出0 x0f;延时1ms。Q5输出低电平,其他列输出高电平;QHQA输出0 x14;延时1ms。,Q6输出低电平,其他列输出高电平;QHQA输出0 x24;延时1ms。Q7输出低电平,其他列输出高电平;QHQA输出0 x44;延时1ms。Q8输出低电平,其他列输出高电平;QHQA输出0 x00;延时1ms。重复执行第。无论显示何种字体或图像,都可以用这个方法来分析出它的扫描代码从而显示在屏幕上。,1.5 实验参考程序-汉字显示子程序,/*名称:LED_Show()*功能:LED点阵屏的汉字显示函数*参数:Row

45、Data 扫描代码数组*/void LED_Show(uint8 RowData)uint8 i,ColData;ColData=0 x01;for(i=0;i8;i+)LS164_SendData(ColData);/列数据输出HC595_SendData(RowDatai);/行数据输出ColData=ColData1;/左移一位DelayMS(1);/延时1ms,/*名称:main()*功能:实验参考程序,显示一个“大”字*参数:无*/uint8 const TAB_Da8=0 x44,0 x24,0 x14,0 x0f,0 x14,0 x24,0 x44,0 x00;/扫描代码数组vo

46、id main(void)LS164_Init();/74LS164模块初始化,具体实现参考第2章HC595_Init();/初始化SPI0,具体实现参考前面while(1)LED_Show(TAB_Da);,实验1参考程序,/*名称:main()*功能:实验参考程序,显示一个“大”字,并控制该字从左往右平滑移动*参数:无*/uint8 const TAB_Da16=0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x44,0 x24,0 x14,0 x0f,0 x14,0 x24,0 x44,0 x00;void main(void)uint

47、8 i,j;LS164_Init();/74LS164模块初始化,具体实现参考第2章HC595_Init();/初始化SPI0,具体实现参考前面for(j=0;j8;j+)for(i=0;i6;i+)LED_Show(,实验2参考程序,1.6 实验步骤与结果1.在Code Warrior IDE集成开发环境中,使用“Follow Me Study ARM”工程模板建立新工程。然后在工程中添加本实验的程序代码,按F7快捷键编译链接整个工程。编译报错则修改源程序中的错误,如果编译通过则在相应的目录下产生我们所需要的二进制文件和可执行映像文件。2.运行H-Flasher软件,将产生的二进制文件烧写到

48、实验板上。3.打开AXD调试环境,并加载刚刚产生的可执行映像文件进行调试。4.单击全速运行按钮(快捷键F5),程序会运行并停留在main()主函数处;继续全速运行,如果是在做一个实验,则会在点阵屏上永久性的显示一个“汉字”;如果是在做第二个实验,则会在点阵屏上显示一个“汉字”,大概一秒移动1格,大约8秒后汉字移出点阵屏。,思考与练习1、人机交互包括人机输入和人机输出,请问人机输出主要有哪些方式?人机输入主要有哪些方式?2、数码管体内由什么组成,数码管一般应用在什么样的场合,请举例说明?3、请你画出一个共阳极数码管静态显示的电路示意图。4、在动态显示下,一个4位的数码管需要多少个位选端,多少个段

49、选端。如果数码管是一位的呢?5、请说出液晶显示LCD的特点以及应用场合。6、针对LM2068液晶显示屏,请你分别按点像素深度、工作原理、内容显示方式对其进行分类。7、请问LM2068模块的BLA、BLK引脚具备什么功能,如何设置该模块的显示对比度,如何对该模块进行复位?8、请问如何设置LM2068模块的显示区域,LM2068的SYSTEM SET指令有什么作用?9、什么是电声器件,我们常见的有哪些电声器件?10、请说明一下电动扬声器发声原理?11、请问音乐的两大元素是什么?扬声器器件如何控制这两大元素?12、在扬声器驱动电路中,加一个三极管有什么作用?13、你能不用定时器中断功能,编写一个音乐播放程序吗?14、请设计一个1616点阵显示屏电路。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号