OCMJ4X8C

合集下载

基于ATMega16的公交空位显示系统设计

基于ATMega16的公交空位显示系统设计

基于ATMega16的公交空位显示系统设计摘要公交车作为人们日常出行的重要交通工具之一,关系到大多数人的利益。

本文基于单片机设计的公交车空位显示系统,结构简单、功能强大,可以有效的缓解公交车的秩序问题。

关键词 atmega16单片机;公交空位显示;12864液晶屏中图分类号u46 文献标识码a 文章编号1674-6708(2010)30-0228-020 引言随着城市的不断扩建,越来越多的人们选择了公交车这种交通工具,因此公交车的安全性和舒适性关系到大多数人的切身利益。

如果当公交车驶入站台时,在站台上等待的人们若能了解到车上剩余座位数,便可及时地决定出自己是否乘坐该辆车,从而避免了不必要的拥挤,并能保证公交车的乘坐环境。

本文设计的显示系统通过单片机接收到来自安装在座位上的按钮是否被按下的信号,从而控制显示屏上代表空余座位灯的亮灭以及显示空余座位数的数码管。

1 系统硬件结构图本设计以单片机控制为核心,外部包括12864液晶屏、按键、七段数码管、led指示灯,总体结构框图如图1所示。

对于公交车的每一个座位内置一个按键(压力传感器),当乘客坐下时,相当于按键被按下,该信号传送至单片机,单片机接收到该信号时,即可进行处理,对七段数码管的记数减一,同时对应的座位led灯熄灭;同理,当乘客起来时,相当于按键恢复,该信号被传送至单片机处理,对七段数码管的记数加一,同时对应的座位led灯点亮,司机可以根据公交车的座位数设置初始值。

2 关键硬件设计单片机是整个系统的核心部分,是指一个集成在一块芯片上的完整计算机系统。

本文通过功能性和成本方面的综合考虑,选择使用了atmega16单片机。

atmega16是基于增强的avr risc结构的低功耗8位cmos微控制器,由于其先进的指令集以及单时钟周期指令执行时间,atmega16的数据吞吐率高达1mips/mhz,从而可以缓减系统在功耗和处理速度之间的矛盾。

atmega16 包含16k字节的系统内可编程flash(具有同时读写的能力,即rww),512 字节eeprom,1k 字节sram,32 个通用i/o 口线,32 个通用工作寄存器,用于边界扫描的jtag 接口,支持片内调试与编程,3个具有比较模式的灵活的定时器/ 计数器(t/c),片内/外中断,可编程串行usart,有起始条件检测器的通用串行接口,8路10位具有可选差分输入级可编程增益(tqfp 封装)的adc ,具有片内振荡器的可编程看门狗定时器,一个spi 串行端口,以及六个可以通过软件进行选择的省电模式。

模数转换

模数转换

ADC0804引脚功能ADC0804 为一只具有20引脚8位CMOS 连续近似的A/D 转换器,其规格如下:(1) 高阻抗状态输出(2) 分辨率:8 位(0~255)(3) 存取时间:135 ms(4) 转换时间:100 ms(5) 总误差:-1~+1LSB(6) 工作温度:ADC0804C为0度~70度;ADC0804L为-40 度~85 度(7) 模拟输入电压范围:0V~5V(8) 参考电压:2.5V(9) 工作电压:5V(10) 输出为三态结构1. 接脚说明见下图三:2. PIN1 (CS ):Chip Select,与RD、WR 接脚的输入电压高低一起判断读取或写入与否,当其为低位准(low) 时会active。

3. PIN2 ( RD ):Read。

当CS 、RD 皆为低位准(low) 时,ADC0804 会将转换后的数字讯号经由DB7 ~ DB0 输出至其它处理单元。

4. PIN3 (WR ):启动转换的控制讯号。

当CS 、WR 皆为低位准(low) 时ADC0804 做清除的动作,系统重置。

当WR 由0→1且CS =0 时,ADC0804会开始转换信号,此时INTR 设定为高位准(high)。

5. PIN4、PIN19 (CLK IN、CLKR):频率输入/输出。

频率输入可连接处理单元的讯号频率范围为100 kHz 至800 kHz。

而频率输出频率最大值无法大于640KHz,一般可选用外部或内部来提供频率。

若在CLK R 及CLK IN 加上电阻及电容,则可产生ADC 工作所需的时序,其频率约为:6. PIN5 ( INTR ):中断请求。

转换期间为高位准(high),等到转换完毕时INTR 会变为低位准(low)告知其它的处理单元已转换完成,可读取数字数据。

7. PIN6、PIN7 (VIN(+)、VIN(-)):差动模拟讯号的输入端。

输入电压VIN=VIN(+)-VIN(-),通常使用单端输入,而将VIN(-)接地。

ZigBee技术在智能家居中的应用

ZigBee技术在智能家居中的应用

信息产业ZigBee技术在智能家居中的应用黄浩李旭婷(成都理工大学信息科学与技术学院,四川成都610059)近年来在无线个域网WPAN技术领域,各种标准的技术在竞相发展,而这些不同技术的产品之间既有竞争又有相互补充。

ZigBee正是在这种无线技术蓬勃发展的环境中应运而生的。

不同于其他一些通信技术,它不去追求高速率、远距离;而是针对特定的在智能家庭、智能建筑、工业自动化以及医疗领域的某些特定控制应用需求,锁定只以几十kbps的速率、几米~几十米的距离实现无线组网通信的能力,在这样的关键指标条件下,再确定出其他技术要求———微功耗、低复杂度,进而低价格,从此诞生了一种新的无线通信技术———ZigBee。

1ZigBee无线通信技术1.1ZigBee技术及主要特征。

ZigBee技术是最近发展起来的一种近距离无线通信技术,它功耗低、成本低、易应用,以2.4GHz为主要频段,采用扩频技术。

ZigBee被业界认为是最有可能应用在工业监控、传感器网络、家庭监控、安全系统等领域的无线技术。

形象化地描述ZigBee:它是一种简单的东西,其核心是多信道无线通信装置和微控制器,但它们都被集成在一两块半导体芯片上,封装在如同小指甲盖大小的塑料制品里面。

使用ZigBee技术实现的产品,一般采用廉价的8位微处理器,将无线射频收发模块集成在一块芯片上,外围接上几个阻容和晶振等器件,再连接一些A/D、D/A、I/O接口及控制电路(甚至这些电路也已集成到芯片中),即组成了诸如各种智能控制节点、无线传感器网络节点的核心控制模块。

当然,只有这些硬件电路还是远远不够的,还需要在上加载合适的无线通信软件(协议栈)和控制程序,才能组成完整的控制模块。

为此,现在也把这类有ZigBee协议栈及无线收发模块的单片机成为“无线单片机”,就是这个道理。

当然,目前市场上也有多种不同于ZigBee技术的其他近距离无线组网通信技术,但ZigBee已是被国际标准组织承认的标准化的无线通信技术,对那些ZigBee的竞争者来说,就是它的强势所在。

OCMJ4X8C-15说明书

OCMJ4X8C-15说明书

技术支持:0758-2317156
共 17 页 第 4 页
E-mail: syl@ 传真:0758-2317023
OCMJ4X8C 液晶显示模块使用说明书
四、资料传输与接口时序
1.并列接口传输讯号
当 PSB 脚(OCMJ4X16A/B 无串行接口,无此引脚)接高电位时,模块将进入并列模式,在并列模式下可 由指令 DL FLAG 来选择 8-位或 4-位接口,主控制系统将配合( RS , RW , E , DB0..DB7 )来达成传输动作。 从一个完整的流程来看,当下设定地址指令后(CGRAM,DDRAM)若要读取数据时需先 DUMMY READ 一 次,才会读取到正确数据第二次读取时则不需 DUMMY READ 除非又下设定地址指令才需再次 DUMMY READ。在 4-位传输模式中,每一个八位的指令或数据都将被分为两个字节动作:较高 4 位(DB7~DB4) 的资料将会被放在第一个字节的(DB7~DB4)部分,而较低 4 位(DB3~DB0)的资料则会被放在第二个字 节的(DB7~DB4)部分,至于相关的另四位则在 4-位传输模式中 DB3~DB0 接口未使用。 相关接口传输讯号请参考下图说明:
肇庆金鹏实业有限公司
Golden Palm Industry Co., Ltd.

地址:肇庆市建设四路 13 号天宁广场 E 幢 13、14、15 楼
邮编:526040
业务联系:0758-2317976/2317692
技术支持:0758-2317156
共 17 页 第 2 页
68±0.3 V.A 65 A.A 61.4
10.6 3.2 7.9±0.3
MAX 13.0
6.55
128X64 DOTS

2011最新版1107更新三极管丝印MARK检索表对照查询表

2011最新版1107更新三极管丝印MARK检索表对照查询表

PZM16NB3 DTC144VUA FMMT5179 PZM18NB1 PZM18NB2 PZM18NB3 BC846A BC846AT BC846A BC846A BC846AW BC846AW FMMT3904 MMBT3904 IRLML2402 PMMT3904 PXT3904 PMMT3904 PMST3904 PMST3904 MMBT3904L BC846B BC846BT BC846B BC846B BC846BW BC846BW FMMT2222 MMBT2222 IRLML2803 PMBT2222 PMBT2222 PMST2222 PMST2222 BC817UPN BAP50-05 FMMT-A20 MMBTA20L IRLML6302 BC847S BC846 BC846 BC846W BC846W MMBTA42
类型 UC4 L UC4 L UC4 L UC4 UC4 I N L ZB L UC4 L UC4 UC4 L UC4 L UC4 L UC4 UC4 L UC4 L UC4 L UC4 C O X DP N N N A C C O DP
封装 UCSP-4 SC70-3 SC70-3 SC70-3 UCSP-4 SC70-3 UCSP-4 UCSP-4 SOD323 SOT23 SC70-3 UCSP-4 SOT23 SC70-3 UCSP-4 SC70-3 UCSP-4 UCSP-4 SC70-3 UCSP-4 SC70-3 UCSP-4 SC70-3 UCSP-4 UCSP-4 SC70-3 UCSP-4 SC70-3 UCSP-4 SC70-3 UCSP-4 SOT346 SOT89 SOT143 SOT363 SOT416 SOT23 SOT23 SOT346 SOT23 SOT346 SOT89 SOT363

嵌入式残币检测仪优化研究

嵌入式残币检测仪优化研究

嵌入式残币检测仪优化研究摘要:在原残币检测仪的基础上,对其软硬件进行了优化。

在显示界面采用了画中画技术,增加备份功能以及对1/4特殊情况的鉴定等;此外,为让客户能够清晰直观地看到残币检测结果,设计了一个客户液晶显示终端。

关键词:残币检测技术;画中画技术;备份功能;液晶显示终端0引言近年来全国的残币兑换数额不断上升,给银行的工作人员带来很大的工作量。

传统的目测或用兑换尺量的方法,不仅费时费力而且存在较大的误差;为了提高工作人员的工作效率,也使残币兑换者的利益得到有效保障,笔者院校嵌入式实验室根据《中国人民银行残缺污损人民币兑换办法》而设计开发了嵌入式残币识别仪。

但根据前期产品的投放使用,发现该产品还有很多不足之处,为此,本文针对设备的软硬件做了优化与改进。

1软件部分优化1.1功能完善本次设计在QT 图形界面运用了信号与槽机制。

信号和槽主要用于对象之间的通讯。

图形用户接口的应用需要对用户的动作做出响应,必须把事件和相关代码联系起来。

这里QT 创立了一种新的机制,叫做“信号与槽”,这是一种强有力的对象间通信机制,它完全可以取代原始的回调和信息映射机制;信号与槽是迅速的、类型安全的、健壮的、完全面向对象并用C++来实现的一种机制。

为了增加界面的友好性,利用信号与槽机制在QT图形用户界面的应用,以提高系统的简单性和灵活性。

在摄像头取景分析模块与QT用户图形界面采用消息队列的通讯方式,方便了进程间的通信。

在QT人机交互界面基础上,添加了画中画功能,于液晶屏幕右下角四分之一处实时显示摄像头当前取景,这样在用户使用时既可以体验到精美的人机高清晰度图形界面,又能实时观测高清摄像头拍摄的图像信息。

增加备份功能,实现将残币兑换鉴定报告以文件的形式存储在SD卡上用于鉴定报告的备份,在此基础上将鉴定报告通过网络传输给服务器进行数据备份,支持人民银行总行将分支机构的月度残币鉴定数量和种类进行汇总,分析人民币实际使用中的破损率。

单片机系统中液晶的中文菜单和图形显示设计

单片机系统中液晶的中文菜单和图形显示设计
As an example of OCMJ4×8C LCD controlled by AT89S52 single chip microcomputer, the paper introduces the function and features of AT89S52 single chip microcomputer, and illustrates a method of displaying multilevel menus and displaying dynamic waveform. The design thoughts of hardware and software mentioned is effective and universal in this system, so the system could circumscribe different sensors, and become meters which could measure different parameters. When the content of menu on different meters is changed, correctly setting the parameter of menu can make it properly displayed. This system also offer a serial communication interface which erect communication between single chip microcomputer and personal computer, so it could realize watching different meters by computer in long distance. In a word, this system supplies a basal platform for designing meters which are used in automatic production. Limited by time and laboratorial condition, I don’t contrive a perfect meter. But I believe that the menu platform of LCD will be widely used in designing all kinds of meters. Keywords: single chip microcomputer; liquid crystal display; multilevel menus; dynamic waveform

玩转12864液晶--显示字符

玩转12864液晶--显示字符

在我们常用的人机交互显示界面中,除了数码管,LED,以及我们之前已经提到的LCD1602之外,还有一种液晶屏用的比较多。

相信接触过单片机的朋友都知道了,那就是12864液晶。

顾名思义,12864表示其横向可以显示128个点,纵向可以显示64个点。

我们常用的12864液晶模块中有带字库的,也有不带字库的,其控制芯片也有很多种,如KS0108T6963,ST7920等等。

在这里我们以ST7920为主控芯片的12864液晶屏来学习如何去驱动它。

(液晶屏采用金鹏的OCMJ4X8C)关于这个液晶屏的更多信息,请参考它的DATASHEET,附件中有下载。

我们先来了解一下它的并行连接情况。

下面是电路连接图从上面的图可以看出,液晶模块和单片机的连接除了P0口的8位并行数据线之外,还有RS,RW,E等几根线。

其中R/S是指令和数据寄存器的选择控制线(串行模式下为片选),R/W是读写控制线(串行模式下是数据线),E是使能线(串行模式下为时钟线)。

通过这几根控制线和数据线,再结合它的时序图,我们就可以编写出相应的驱动程序啦。

看看并行模式下的写时序图:根据这个时序图,我们就可以写出写数据或者写命令到LCD12864液晶的子程序。

读时序图如下:根据这个时序图我们就可以从LCD12864液晶模块内部RAM中读出相应的数据,我们的忙检测函数就是根据这个时序图写出来的。

以及后面章节中讲的画点函数等都要用到读时序。

有了这两个时序图,然后我们再看看OCMJ4X8C的相关指令集,就可以编写出驱动程序了。

这里要注意的是指令集分为基本指令集和扩充指令集,其中扩充指令集主要是与绘图相关,在此后的章节中会有相应的介绍。

下面让我们根据这些编写出它的驱动程序吧。

我的硬件测试条件为:STC89C516(11.0592MHz) + OCMJ4X8C实际显示效果图片如下:程序部分如下,请结合液晶模块的DATASHEET看程序,这样能够更加快速的弄懂程序的流程。

鑫鹏OCMJ4X8C-14液晶驱动程序

鑫鹏OCMJ4X8C-14液晶驱动程序

#define uint unsigned int#define uchar unsigned char#define x1 0x80#define x2 0x88#define y 0x80#define comm 0#define dat 1#define white 1 //ºó°ë·´ºÚ#define black 2 //Ç°°ë·´ºÚ#define cler 3 //È«°×#define RS_CLR PORTC &= ~(1 << PC5)#define RS_SET PORTC |= (1 << PC5)#define RW_CLR PORTC &= ~(1 << PC6)#define RW_SET PORTC |= (1 << PC6)#define EN_CLR PORTC &= ~(1 << PC2)#define EN_SET PORTC |= (1 << PC2)/*#define RS_CLR PORTC &= ~(1 << PC2)#define RS_SET PORTC |= (1 << PC2)#define RW_CLR PORTC &= ~(1 << PC3)#define RW_SET PORTC |= (1 << PC3)#define EN_CLR PORTC &= ~(1 << PC4)#define EN_SET PORTC |= (1 << PC4)*///#define PSW_CLR PORTC &= ~(1 << PC7)//#define PSW_SET PORTC |= (1 << PC7)//#define RST_CLR PORTC &= ~(1 << PC4)//#define RST_SET PORTC |= (1 << PC4)#define busy PINA & (1 << PA7)/*µçƽ¶ÁÈ¡*/ /*------------------³õʼ»¯-----------------*/void init_lcd (void){// RST_SET;// PSW_SET;DDRA = 0xff;DDRC = 0xFF;wr_lcd (comm,0x30); /*30---»ù±¾Ö¸Á×÷*/wr_lcd (comm,0x01); /*ÇåÆÁ£¬µØÖ·Ö¸ÕëÖ¸Ïò00H*/wr_lcd (comm,0x06); /*¹â±êµÄÒƶ¯·½Ïò*/wr_lcd (comm,0x0C); /*¿ªÏÔʾ£¬¹ØÓαê*/}/*---------------ÏÔʾºº×Ö»ò×Ö·û----------------*/void chn_disp (uchar const *chn){uchar i,j;wr_lcd (comm,0x30);wr_lcd (comm,0x80);for (j=0;j<4;j++){for (i=0;i<16;i++)wr_lcd (dat,chn[j*16+i]);}}/*---------------Ö¸¶¨µØÖ·ÏÔʾºº×Ö»ò×Ö·û----------------*/ void ADDS_disp (uchar address,uchar num,uchar const *chn) {uchar i,j;wr_lcd (comm,0x30);wr_lcd (comm,address);for (j=0;j<num;j++){wr_lcd (dat,chn[j]);}}/*---------------Ö¸¶¨µØÖ·ÏÔʾºº×Ö»ò×Ö·û----------------*/ void str_disp(uchar address,uchar num,uchar *ch){uchar j;wr_lcd (comm,0x30);wr_lcd (comm,address);for (j=0;j<num;j++){wr_lcd (dat,ch[j]);}/*---------------Ö¸¶¨µØÖ·ÏÔʾºº×Ö»ò×Ö·û----------------*/ void ADDS_onedisp (uchar address,uchar chn){wr_lcd (comm,0x30);wr_lcd (comm,address);wr_lcd (dat,chn);}/*-----------ÉÏ°ëÆÁÏÔʾºº×Ö»ò×Ö·û------------*/void chn_disp1 (uchar const *chn){uchar i,j;wr_lcd (comm,0x30);wr_lcd (comm,0x80);j=0;for (i=0;i<16;i++)wr_lcd (dat,chn[j*16+i]);wr_lcd (comm,0x90);j=1;for (i=0;i<16;i++)wr_lcd (dat,chn[j*16+i]);}/*----------------Ö¸¶¨µØַͼÏÔºº×Ö»òͼÐÎ-----------------*/ void img_haz(uchar xx,uchar yy,uchar const *img){uchar j;for(j=0;j<16;j++){wr_lcd (comm,0x34);wr_lcd (comm,yy+j);wr_lcd (comm,xx);wr_lcd (comm,0x30);wr_lcd (dat,img[2*j]);wr_lcd (dat,img[2*j+1]);}wr_lcd (comm,0x36);}/*----------------ÏÔʾͼÐÎ-----------------*/void img_disp (uchar const *img)uchar i,j;for(j=0;j<32;j++){for(i=0;i<8;i++){wr_lcd (comm,0x34);wr_lcd (comm,y+j);wr_lcd (comm,x1+i);wr_lcd (comm,0x30);wr_lcd (dat,img[j*16+i*2]);wr_lcd (dat,img[j*16+i*2+1]);}}for(j=32;j<64;j++){for(i=0;i<8;i++){wr_lcd (comm,0x34);wr_lcd (comm,y+j-32);wr_lcd (comm,x2+i);wr_lcd (comm,0x30);wr_lcd (dat,img[j*16+i*2]);wr_lcd (dat,img[j*16+i*2+1]);}}wr_lcd (comm,0x36);}/*-------------Ï°ëÆÁÏÔʾͼÐÎ--------------*/ void img_disp1 (uchar const *img){uchar i,j;for(j=0;j<32;j++){for(i=0;i<8;i++){wr_lcd (comm,0x34);wr_lcd (comm,y+j);wr_lcd (comm,x2+i);wr_lcd (comm,0x30);wr_lcd (dat,img[j*16+i*2]);wr_lcd (dat,img[j*16+i*2+1]);}}wr_lcd (comm,0x36);}/*--------------ÏÔʾµãÕó----------------*/void lat_disp (uchar data1,uchar data2){uchar i,j,k,x;x=x1;for(k=0;k<2;k++){for(j=0;j<16;j++){for(i=0;i<8;i++){wr_lcd (comm,0x34);wr_lcd (comm,y+j*2);wr_lcd (comm,x+i);wr_lcd (comm,0x30);wr_lcd (dat,data1);wr_lcd (dat,data1);}for(i=0;i<8;i++){wr_lcd (comm,0x34);wr_lcd (comm,y+j*2+1);wr_lcd (comm,x+i);wr_lcd (comm,0x30);wr_lcd (dat,data2);wr_lcd (dat,data2);}}x=x2;}wr_lcd (comm,0x36);}/*-----------------------------------------------*///µ±data1=0xff,data2=0xffʱ,ÔÚx0,y0´¦·´°×ÏÔʾ16xl*yl.//µ±data1=0xff,data2=0x00ʱ,ÔÚx0,y0´¦Ç°°ë·´°×ÏÔʾ8xl*yl.//µ±data1=0x00,data2=0xffʱ,ÔÚx0,y0´¦ºó°ë·´°×ÏÔʾ8xl*yl.void con_disp (uchar data1,uchar data2,uchar x0,uchar y0,uchar xl,uchar yl) //con_disp (0xff,0x00,uchar x0,uchar y0,uchar xl,uchar yl){uchar i,j;for(j=0;j<yl;j++){{wr_lcd (comm,0x34);wr_lcd (comm,y0+j);wr_lcd (comm,x0+i);wr_lcd (comm,0x30);wr_lcd (dat,data1);wr_lcd (dat,data2);}}wr_lcd (comm,0x36);}/*--------------------------------------------*///µ±data1=0xff,data2=0x00ʱ,ÔÚx0,y0´¦ÏÔʾǰ°ë¹â±ê.//µ±data1=0x00,data2=0xffʱ,ÔÚx0,y0´¦ÏÔʾºó°ë¹â±ê.//µ±data1=0x00,data2=0x00ʱ,ÔÚx0,y0´¦²»ÏÔʾ¹â±ê.//y0=0x8f or y0=0x9f.void cur_disp (uchar data1,uchar data2,uchar x0,uchar y0){wr_lcd (comm,0x34);wr_lcd (comm,y0);wr_lcd (comm,x0);wr_lcd (comm,0x30);wr_lcd (dat,data1);wr_lcd (dat,data2);wr_lcd (comm,0x36);}/*----------------16*1·´°×-----------------*/void reverse_video(uchar xx,uchar yy,uchar data1){uchar j;if(data1==1){for(j=0;j<16;j++){wr_lcd (comm,0x34);wr_lcd (comm,yy+j);wr_lcd (comm,xx);wr_lcd (comm,0x30);wr_lcd (dat,0xff);wr_lcd (dat,0x00);}}else if(data1==2) {{wr_lcd (comm,0x34);wr_lcd (comm,yy+j);wr_lcd (comm,xx);wr_lcd (comm,0x30);wr_lcd (dat,0x00);wr_lcd (dat,0xff);}}else if(data1==3) {for(j=0;j<16;j++){wr_lcd (comm,0x34);wr_lcd (comm,yy+j);wr_lcd (comm,xx);wr_lcd (comm,0x30);wr_lcd (dat,0x00);wr_lcd (dat,0x00);}}wr_lcd (comm,0x36);}/*--------------ÇåDDRAM------------------*/void clrram (void){wr_lcd (comm,0x30);wr_lcd (comm,0x01);delay1 (3);}/*--------------²¢¿Ú-------------------------*/ void wr_lcd (uchar dat_comm,uchar content){//chk_busy ();delay1(10);if(dat_comm){RS_SET; //dataRW_CLR; //write}else{RS_CLR; //command;RW_CLR; //write}EN_SET;PORTA=content; //output data or commdelay(20);EN_CLR;}/*------------´®¿Ú--------------------------- void wr_lcd (uchar dat_comm,uchar content) {uchar a,i,j;delay (150);a=content;CS_SET;SCLK_CLR;STD_SET;for(i=0;i<5;i++){SCLK_SET;SCLK_CLR;}STD_CLR;SCLK_SET;SCLK_CLR;if(dat_comm)STD_SET; //dataelseSTD_CLR; //commandSCLK_SET;SCLK_CLR;STD_CLR;SCLK_SET;SCLK_CLR;for(j=0;j<2;j++){for(i=0;i<4;i++){a=a<<1;if(SREG&0X01)STD_SET;else STD_CLR;// std=CY;SCLK_SET;SCLK_CLR;}STD_CLR;for(i=0;i<4;i++){SCLK_SET;SCLK_CLR;}}}*//*void chk_busy (void){PORTA=0xff;RS_CLR;RW_SET;EN_SET;delay1(10);while((PINA&0x80)==0x80);// while(PINA&0X80);EN_CLR;}*//*---------------------------------------*/ void delay (uint us) //delay time{while(us--);}void delay1 (uint ms){uint i,j;for(i=0;i<ms;i++)for(j=0;j<15;j++)delay(1);}。

山东建筑大学-音频信号分析系统论文

山东建筑大学-音频信号分析系统论文

全国大学生电子设计竞赛论文——山东赛区编号:A甲2313题目:音频信号分析仪学生姓名:张明李龙传太荣兵学校专业:山东建筑大学机械工程及自动化指导教师:张涵沈孝芹张超音频信号分析仪摘要:根据竞赛题目要求和现有条件的条件,本作品完成了以通用计算机的为核心的音频信号分析仪。

本仪器系统组成为:被测对象、传感器、信号调理、数据采集、虚拟仪器软件和计算机软件系统平台。

被测信号首先经传感器转化为电信号,然后由信号调理器进行去噪、滤波及前级放大等预处理,然后通过集成芯片进行音频信号的采集和模数转换并将数据通过单片机以串行通信的方式上传到PC机,经具有强大科学计算能力的软件LABVU分析处理,将分析结果下传到单片机并通过液晶和打印机进行输出,成功实现了对音频信号的频谱分析、功率分析和正弦信号失真度的测量。

关键词:信号采集;频谱分析;功率分析;虚拟仪器;正弦信号失真度1.系统方案选择与论证1.1总体设计方案本作品是以计算机为中心的音频信号分析仪,根据题目设计要求,采集的信号在几十赫兹到十千赫兹范围内,我们尽量利用现有技术与设备,采用转换速度几十微秒的AD转换芯片和通用计算机构成,原理如图1所示。

本音频信号分析仪以LPC938单片机为核心,声音模拟信号通过LM358进行信号放大,利用LPC938自带的A/D转换功能实现模拟数字信号的转换,由单片机通过串行口通信的方式将数字音频信号传给PC 机,通过PC机显示音频信号并分析结果。

利用LabVIEW强大的科学计算能力,对采集到的信号进行了自相关和互相关分析,并对确知信号和随机信号进行了频谱分析和功率谱分析,实现了音频信号分析仪的设计。

并将分析结果下传51单片机,由液晶显示、打印机打印。

1.2 方案的论证与比较1.2.1控制芯片的选择方案一:采用常用的STC89C51控制。

89C51为8位微控制器,内部有4KB程序存储器ROM,128B数据存储器RAM,工作频率0—40MHZ,4K的EEPROM存储器。

智能循迹小车设计方案 智能循迹小车方案

智能循迹小车设计方案 智能循迹小车方案

智能循迹小车设计方案智能循迹小车方案自动化06--2班2009年6月5日自动寻迹小车摘要本寻迹小车是以PCB电路板为车架,AT89S51单片机为控制核心,加以直流电机、光电传感器和电源电路以及其他电路构成。

系统由AT89S51通过IO口控制小车的前进后退以及转向。

寻迹由RPR2…各省主要风电塔架制造厂名单序号123456789101112131415161718192021222324 公司名称甘肃玉门锦辉长城甘肃科耀电力有限公司北车集团兰州金牛轨道交通装备有限公司河北强盛风电设备有限公司保定天威电气设备结构有限公司…学习“七.一”讲话精神,深入剖析“四种危险” 胡锦涛在党庆90年大会上,总结了建党以来的“三件大事”和“两大成果”,提出了往后“两个宏伟目标”,指出中共面临“四种考验”和存在“四种危险”。

整篇讲话与时俱进,有新意,有不少新提法,是一篇回顾历史、总结经…自动化06--2班2009年6月5日自动寻迹小车摘要本寻迹小车是以PCB电路板为车架,AT89S51单片机为控制核心,加以直流电机、光电传感器和电源电路以及其他电路构成。

系统由AT89S51通过IO口控制小车的前进后退以及转向。

寻迹由RPR220型光电对管完成。

关键词:AT89S51 直流电机光电传感器自动寻迹电动车AbstractThe smart car is aluminum alloy for the chassis, AT89S51 MCU as its core, including motor and servo, plus photoelectric sensors, as well as other flame sensor and power circuit. MCU controls the car turning back forward or running on the white line. RPR220 reflective photo sensor seeks the trace. Far infrared flame sensor tracks the flame. In addition, the SCM system with Sunplus for voice broadcast can remind current status. The system transmits information through DF module. The car’s status will be transmitted to the Remote Console. OCMJ4X8C LCDdisplay and 2 keys for start control.Keywords: AT89S51 Motor Servo Photo sensor Electrical fire engines一、系统设计1、设计要求(1)寻线跑(2)显示小车当前的速度(3)显示时间并记录行驶距离(4)自动避开障碍物(5)其他2、小车循迹的原理这里的循迹是指小车在地板白纸上循黑线行走,通常采取的方法是红外探测法。

液晶菜单程序

液晶菜单程序

OCMJ4X8C液晶菜单显示程序(2008-08-08 09:13:13)标签:菜单程序液晶mainmenu it刚刚花了3天写了一个比较完善的菜单显示程序,分享给大家。

可能有很多不足,如果有什么b ug请发Email到yunjian4516@谢谢!未经作者允许请勿用于商业用途!菜单的数据结构定义//选项结构体的定义typedef struct option{signed ID; //选项标志()int *Label; //菜单显示字,连向wordstruct menu *next; //选项的下级菜单,若非菜单则为0}option;//菜单结构体的定义typedef struct menu{unsigned Maxopts; //该菜单所包含的选项数unsigned Maxoptsperpage; //定义LED每一页最多显示项目数(低2位有效,最多为3+1,最少为0+1)unsigned selection;struct menu *parmenu; //父菜单struct option *paropt;struct option *next; //该菜单的第一个项目}menu;//主菜单结构体的定义typedef struct Mainmenu{unsigned int Maxopts; //主菜单包含的项目数unsigned int maxhypes; //已定义的最大的层数(建立菜单时用到)struct option *curopt; //在建立菜单时记录当前的选项struct menu *curmenu; //在建立菜单时记录当前所在的菜单//上面两数据在对菜单操作时指向当前页的第一项struct menu *next; //主菜单}Mainmenu;菜单的处理函数定义/////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////#include "Menudefine.h"Mainmenu *Main_Menu;menu *Menu;option *Option;int Addmenu(unsigned *Label,unsigned maxopts,unsigned maxoptsperpage);int Addnext(unsigned *Label);Mainmenu * InitMainMenu(void);////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////添加菜单//////////////////////////////////////// /////参数简介: Label存储项目显示内容的指针,maxopts该菜单的项目数///// maxoptserpage该菜单下每页显示的项目数/////返回值类型:整型///// 正常返回0,主菜单建立完毕返回-1,内存不被分配返回1int Addmenu(unsigned *Label,unsigned maxopts,unsigned maxoptsperpage){int j;Menu = 0;if(!(Menu = (menu *)malloc(Menusize)))return 1; //内存空间申请失败,返回1Menu->Maxopts = maxopts;Menu->Maxoptsperpage = maxoptsperpage;Menu->selection = 1;Option = 0;if(!(Option = (option *)malloc(maxopts * Optionsize))) //内存空间申请失败,返回1 return 1;Menu->next = Option;Option -> ID = 0;//对Menu的初始化完毕if(Main_Menu->maxhypes) //如果不是主菜单{if(!Main_Menu->curopt->ID) //如果是该菜单第一个项目,则给项目ID赋值{Main_Menu->curopt->ID = Main_Menu->maxhypes<<4;}else{Main_Menu->curopt += 1;Main_Menu->curopt->ID = (Main_Menu->curopt - 1)->ID +1;}Main_Menu->curopt->next = Menu;Main_Menu->curopt->Label = Label;Menu->parmenu = Main_Menu->curmenu;Menu->paropt = Main_Menu->curopt;}else{Main_Menu->next = Menu;Menu->parmenu = Menu;Menu->paropt = 0;}Main_Menu->curopt = Option;Main_Menu->curmenu = Menu;Main_Menu->maxhypes ++;return 0;}//////////////////////////////////添加项目//////////////////////////////////////// /////参数简介:Label存储项目显示内容的指针/////返回值类型:整型///// 正常返回0,主菜单建立完毕返回-1int Addnext(unsigned *Label){if(!Main_Menu->curopt->ID) //如果是该菜单第一个项目,第一项ID赋值{Main_Menu->curopt->ID = Main_Menu->maxhypes<<4;}else //否则项目后移一项{Main_Menu->curopt += 1;Main_Menu->curopt->ID = (Main_Menu->curopt - 1)->ID +1;}Main_Menu->curopt->Label = Label;Main_Menu->curopt->next = 0;while((Main_Menu->curopt->ID&0x000f) == (Main_Menu->curmenu->Maxopts - 1)) //该层项目已经到达最大数,退出该层菜单{if(Main_Menu->curmenu == Main_Menu->next)return -1;Main_Menu->curopt = Main_Menu->curmenu->paropt;Main_Menu->curmenu = Main_Menu->curmenu->parmenu;}return 0;}//////////////////////////////////初始化主菜单///////////////////////////////////// Mainmenu * InitMainMenu(){Main_Menu = (Mainmenu *)malloc(sizeof(Mainmenu));Main_Menu->maxhypes = 0;Main_Menu->curmenu = 0;Main_Menu->curopt = 0;Main_Menu->next = 0;//Addmenu() Main_Menu添加菜单时Label可为0,其他参数根据用户需要自定义Addmenu(0,7,3);Addmenu("滨州学院",6,3);Addnext("物理系");Addnext("计算机系");Addnext("数学系");Addnext("政法系");Addnext("数学系");Addnext("自动化系");Addmenu("滨州政府",2,2);Addnext("市长办公室");Addnext("副市长办公室");Addnext("滨州人事局");Addnext("滨州法院");Addnext("滨州检察院");Addnext("滨州教育局");Addnext("滨州医学院");//此前代码需要用户自己填写Main_Menu->curmenu = Main_Menu->next;Main_Menu->curopt = Main_Menu->curmenu->next;return Main_Menu;}//进入选择项目//入口参数:selection为以Main_Menu->curopt为第一项,选择的项目序号unsigned Enter(int selection){unsigned ID ;if(selection > Main_Menu->curmenu->Maxoptsperpage) //选项无效,直接返回0xffff return 0xffff;selection --;ID = Main_Menu->curopt->ID + selection;if((ID&0x0f) >= Main_Menu->curmenu->Maxopts) //选项无效,直接返回0xffffreturn 0xffff;if((Main_Menu->curopt + selection)->next) //若选择菜单,则进入{Main_Menu->curmenu = (Main_Menu->curopt + selection)->next;Main_Menu->curopt = Main_Menu->curmenu->next;return 0;}else //若选择项目,则返回ID,外部函数根据返回值调用相关函数return Main_Menu->curopt->ID;}//返回上一级void Esc(){if(Main_Menu->curmenu != Main_Menu->next) //如果不是主菜单则返回上一级{Main_Menu->curmenu = Main_Menu->curmenu->parmenu;Main_Menu->curopt = Main_Menu->curmenu->next;}}//转到下一页void Nextpage(){int j;j = (Main_Menu->curopt->ID&0x0f) + Main_Menu->curmenu->Maxoptsperpage;if(j < Main_Menu->curmenu->Maxopts){Main_Menu->curopt += Main_Menu->curmenu->Maxoptsperpage;}}//转到上一页void Prepage(){int j;j = (Main_Menu->curopt->ID&0x000f) - Main_Menu->curmenu->Maxoptsperpage; //存在问题:此处不知什么原因,只要代入if就会出现错误if(j <= 0){Main_Menu->curopt = Main_Menu->curmenu->next;}else{Main_Menu->curopt -= Main_Menu->curmenu->Maxoptsperpage;}}菜单显示程序//LCD的显示函数,仅仅书写了显示函数,对于液晶驱动其他函数请大家自己补全unsigned line[4]={0x80,0x98,0x88,0x98};void menudisplay(Mainmenu *MainMenu){int i;int maxoptsperpage = MainMenu->curmenu->Maxoptsperpage;lcd_init_usual();for(i=0;i<maxoptsperpage;i++){code_write(line[i]);chinese_series((MainMenu->curopt + i)->Label);if(((MainMenu->curopt->ID&0x000f) + i + 1) >= (MainMenu->curmenu->Maxopts)) break;}code_write(0x96);}。

显示与按键模块

显示与按键模块

宜宾职业技术学院项目报告显示与按键系部:电子信息与控制工程系班级:电子11201专业名称:电子信息工程与技术指导教师:张一小组成员:何英杨承黄帅林刘麒麟2013年10月16日目录一、前言····························二、老师讲解的知识点·····················三、网上查阅显示与按键的相关资料··············四、绘制显示与按键的原理图及生成PCB图···············五、焊接元件··························六、产品的检测与调试、烧录程序················七、总结体会·························一、前言在张老师的指导下,我们进入了显示与按键模块设计,显示与按键它是外围电路设计中必不可少的一部分,离开了显示与按键,它将无法控制单片机最小系统,也不能显示出我们所需要的功能。

DUX-8C 用户手册说明书

DUX-8C 用户手册说明书

用户手册DUX-8C8×8 HDMI 矩阵• 4K@60Hz 4:4:4 18Gbps • 支持音频剥离目录安全使用须知 (03)1. 简介 (04)2. 装箱清单 (05)3. 参数 (06)4. 面板介绍 (07)4.1 前面板 (07)4.2 后面板 (07)5. 安装连接 (08)5.1 安装 (08)5.2 散热 (08)5.3 连接 (09)6. 矩阵控制 (11)6.1 前面板控制 (11)6.2 红外控制 (12)6.3 局域网控制(通过网页版用户界面) (13)6.3.1 矩阵控制 (14)1) 切换 (14)2) 预设 (15)6.3.2 管理员设置 (16)1) CEC设置 (18)2) EDID设置 (18)3) HDCP支持设置 (19)4) 端口名称设置 (20)5) 预设名称设置 (20)6) 网络 (21)7) 更改密码 (21)8) 更新网页界面 (22)9) 日志设置 (23)10) 定制欢迎菜单 (23)11) 恢复出厂设置 (24)12) 软件版本 (24)6.4 RS232控制 (25)7. EDID管理 (26)使用前面板控件拷贝 (26)附录1:API指令 (27)安全使用须知注意:本手册中信息在发布后仍可能更新,恕不另行通知。

警告:为防止火灾与触电危险或产品损坏,安装使用本产品时请严格遵守以下要求:1. 简介DUX-8C 8×8 HDMI矩阵(以下简称“矩阵”)提供8个信号源输入接口与8个可任意切换的输出接口,兼容HDMI 2.0与HDCP 2.2标准,具有HDMI输出的音频(含模拟与数字音频输出)剥离能力。

DUX-8C矩阵具有强大的操作灵活性,可通过前面板控件、红外遥控器、RS232串口与LAN(Telnet API或网页界面)控制。

使用独立的DIP拨码,还可用于矩阵的EDID高级管理。

1U紧凑机身、操作灵活、支持HDMI 2.0与HDCP 2.2标准,DUX-8C矩阵提供了高度便利的超高清音视频切换分配方案。

OCMJ4X8B液晶驱动程序

OCMJ4X8B液晶驱动程序

OCMJ4X8B_2 液晶驱动程序(串行)//硬件连接: db——P0; P0口接DB0—DB7// busy——P1^0;// req——P1^1;// res——P1^2;// VDD--逻辑电源(+5V)// VSS--GND(0V)//ocm4x8B_2.c//writer:谷雨2008年3月15日于EDA实验室//说明:如果液晶有时显示正常,有时显示乱码,可在函数void wr_lcd (uchar content)// 中适当改大延时的时间,但不可太大,太大了程序运行较慢//===================================================================== #include<reg51.h>#define uint unsigned int#define uchar unsigned char//**************************修改硬件时要修改的部分********************************#define db P0 //P0口接DB0—DB7sbit busy = P1^0; //请求信号,H有效sbit req = P1^1; //H:已收到数据并在处理中,L:空闲可接收数据sbit res = P1^2; //复位信号,低电平有效//=================================================================// 函数名称:void delay (uint us)// 函数功能:延时// 入口参数:us 延时时间的长短// 出口参数:无//=================================================================void delay (uint us){while(us--);}//=================================================================// 函数名称:void wr_lcd (uchar content)// 函数功能:向lcd中写数据或者指令// 入口参数:要写的数据或者指令// 出口参数:无//=================================================================void wr_lcd (uchar content){while(busy); //等待busy=0;db=content; //写数据或者指令delay(60); //延时,等待数据稳定req=1; //发请求信号delay(10); //延时,保证请求信号起作用req=0; //清除请求信号while(busy); //busy=1,正在处理delay(100);}//================================================================= // 函数名称:void init_lcd (void)// 函数功能:实现lcd初始化// 入口参数:无// 出口参数:无//================================================================= void init_lcd (void){res=0; //复位delay(100);res=1; //复位无效wr_lcd (0xf4); //清屏,地址指针指向00Hdelay (100); //清屏需较长时间}//================================================================= //void send_chn(uchar yy,uchar xx,uchar code *cc)//函数功能: 显示单个国标汉字//入口参数:*cc 显示的汉字// yy 行0~3// xx 列0~7//出口参数:无//注意:只能显示汉字或者空格,空格必须为偶数,最多显示32个汉字,写满整个屏幕// 屏幕为4*8,4行,8列//================================================================= void send_chn(uchar yy,uchar xx,uchar code *cc){wr_lcd(0xf0); //显示国标汉字wr_lcd(xx+2);wr_lcd(yy);wr_lcd(*cc-0xa0); //汉字内码转换成区位码wr_lcd(*(cc+1)-0xa0);}//================================================================= //void send_chns(uchar yy,uchar xx,uchar code *cc)//函数功能: 显示国标汉字//入口参数:*cc 显示的汉字// yy 开始的行,0~3// xx 开始的列0~7//出口参数:无//注意:只能显示汉字或者空格,空格必须为偶数,最多显示32个汉字,写满整个屏幕// 屏幕为4*8,4行,8列//================================================================= void send_chns(uchar yy,uchar xx,uchar code *cc){uchar i;for(i=0;(i<32)&&*(cc+2*i);i++){wr_lcd(0xf0); //显示国标汉字wr_lcd(xx+2);wr_lcd(yy);wr_lcd(*(cc+2*i)-0xa0); //汉字内码转换成区位码wr_lcd(*(cc+2*i+1)-0xa0);xx++;if(xx==8) //当列写满时转入下一行{xx=0;yy++;if(yy==4) //当最后一行写满时转入第一行yy=0;}}}//=================================================================//void send_str_8c8(uchar yy,uchar xx,uchar code *cc)//函数功能: 发送1个8*8 ASCII字符//入口参数:*cc 显示的字符// yy 行0~63// xx 列0~15//出口参数:无//注意:只能显示8*8字符// 屏幕为64*16,64行,16列// 每次显示字符的时候注意行的变化,即yy,每次加8才能使上下显示不重叠//================================================================= void send_str_8c8(uchar yy,uchar xx,uchar code *cc){wr_lcd(0xf1); //显示8*8ASCII字符wr_lcd(xx+4);wr_lcd(yy);wr_lcd(*cc);}//=================================================================//void send_str_8c8s(uchar yy,uchar xx,uchar code *cc)//函数功能: 发送8*8 ASCII字符//入口参数:*cc 显示的字符// yy 开始的行0~63// xx 开始的列0~15//出口参数:无//注意:只能显示8*8字符// 屏幕为64*16,64行,16列// 可以显示任意多字符// 最多可写16*8个字符串,每行16个,8行//================================================================= void send_str_8c8s(uchar yy,uchar xx,uchar code *cc){uchar i;for(i=0;(i<128)&&*(cc+i);i++){wr_lcd(0xf1); //显示8*8ASCII字符wr_lcd(xx+4);wr_lcd(yy);wr_lcd(*(cc+i));xx++;if(xx==16){xx=0;yy=yy+8;if(yy>56) //这时在写的话字符不能完全显示yy=0;}}}//================================================================= //void send_str_16c8(uchar yy,uchar xx,uchar code *cc)//函数功能: 发送1个16*8 ASCII字符//入口参数:*cc 显示的字符// yy 行0~63// xx 列0~15//出口参数:无//注意:只能显示16*8字符// 屏幕为64*16,64行,16列// 每次显示字符的时候注意行的变化,即yy,每次加16才能使上下显示不重叠//================================================================= void send_str_16c8(uchar yy,uchar xx,uchar code *cc){wr_lcd(0xf9); //显示8*8ASCII字符wr_lcd(xx+4);wr_lcd(yy);wr_lcd(*cc);}//================================================================= //void send_str_16c8s(uchar yy,uchar xx,uchar code *cc)//函数功能: 发送16*8 ASCII字符//入口参数:*cc 显示的字符// yy 开始的行0~63// xx 开始的列0~15//出口参数:无//注意:只能显示8*8字符// 屏幕为64*16,64行,16列// 可以显示任意多字符// 最多可写16*4个字符串,每行16个,4行//================================================================= void send_str_16c8s(uchar yy,uchar xx,uchar code *cc){uchar i;for(i=0;(i<64)&&*(cc+i);i++){wr_lcd(0xf9); //显示8*8ASCII字符wr_lcd(xx+4);wr_lcd(yy);wr_lcd(*(cc+i));xx++;if(xx==16){xx=0;yy=yy+16;if(yy>48) //这时再写的话字符不能完全显示yy=0;}}}//================================================================= //void clear(void)//函数功能: 清屏//入口参数:无//出口参数:无//================================================================= void clear(void){wr_lcd(0xf4);}//================================================================= //void move_top(uchar m)//函数功能: 屏幕上移m个点阵行//入口参数:uchar m//出口参数:无//注意:当m=128时清屏//================================================================= void move_top(uchar m){uchar i;for(i=0;i<M;I++){wr_lcd(0xf5);}}//================================================================= //void move_bottom(uchar m)//函数功能: 屏幕下移m个点阵行//入口参数:uchar m//出口参数:无//注意:当m=64时清屏//================================================================= void move_bottom(uchar m){uchar i;for(i=0;i<M;I++){wr_lcd(0xf6);}}//================================================================= //void move_left(uchar m)//函数功能: 屏幕左移m个点阵行//入口参数:uchar m//出口参数:无//注意:当m=128时清屏//================================================================= void move_left(uchar m){uchar i;for(i=0;i<M;I++){wr_lcd(0xf7);}}//================================================================= //void move_right(uchar m)//函数功能: 屏幕右移m个点阵行//入口参数:uchar m,当m=128时清屏//出口参数:无//注意:当m=128时清屏//================================================================= void move_right(uchar m){uchar i;for(i=0;i<M;I++){wr_lcd(0xf8);}}//================================================================= //函数名:void dis_bit(uchar yy,uchar xx)//函数功能: 显示位点阵//入口参数: yy 显示的行0~63// xx 显示的列0~127//出口参数:无//================================================================= void dis_bit(uchar yy,uchar xx){wr_lcd(0xf2);wr_lcd(xx+32);wr_lcd(yy);}//================================================================= //函数名:void dis_line1(uchar yy,uchar xx1,uchar xx2)//函数功能: 画横线//入口参数: yy 画线的行0~63// xx1 画线开始的列0~127// xx2 画线结束的列0~127//出口参数:无//注意:xx1<XX2&NBSP;&NBSP;&NBSP;//================================================================= void dis_line1(uchar yy,uchar xx1,uchar xx2){uchar i;for(i=xx1;i<=xx2;i++){dis_bit(yy,i);}}//================================================================= //函数名:void dis_line2(uchar yy1,uchar yy2,uchar xx)//函数功能: 画竖线//入口参数: yy1 画线开始的行0~63// yy2 画线结束的行0~63// xx 画线的列0~127//出口参数:无//注意:yy1<YY2&NBSP;&NBSP;&NBSP;//================================================================= void dis_line2(uchar yy1,uchar yy2,uchar xx){uchar i;for(i=yy1;i<=yy2;i++){dis_bit(i,xx);}}//================================================================= //函数名:void dis_char(uchar yy,uchar xx)//函数功能: 显示字节点阵//入口参数: yy 显示的行0~63// xx 显示的列0~15// m 显示的字节,0 显示白点,1 显示黑点//出口参数:无//注意:显示字节为横向//================================================================= void dis_char(uchar yy,uchar xx,uchar m){wr_lcd(0xf3);wr_lcd(xx+4);wr_lcd(yy);wr_lcd(m);}//================================================================= //函数名:void lat_disp (uchar data1,uchar data2)//函数功能:显示点阵//入口参数:uchar data1 奇数行显示的点阵// uchar data2 偶数行显示的点阵//出口参数:无//================================================================= void lat_disp (uchar data1,uchar data2){uchar i,j;for(j=0;j<32;j++){for(i=0;i<15;i++){dis_char(j*2,i,data1);dis_char(j*2+1,i,data2);}}}//================================================================= //函数名:void dis_img(unsigned code *img)//函数功能: 显示图形//入口参数:uchar code *img//出口参数:无//注意:显示图形时先写第一行数据,依次向后,图形为128*64//说明:设置j或i的初值可设置图形的显示范围,但img[j*16+i]要相应改变//================================================================= void dis_img(uchar code *img){uchar i,j;for(j=0;j<64;j++){for(i=0;i<16;i++){dis_char(j,i,img[j*16+i]);}}}//================================================================= //函数名:void dis_img1(unsigned code *img)//函数功能: 上半屏显示图形//入口参数:uchar code *img//出口参数:无//注意:图形为128*32//================================================================= void dis_img1(uchar code *img){uchar i,j;for(j=0;j<32;j++){for(i=0;i<16;i++){dis_char(j,i,img[j*16+i]);}}}//=================================================================//函数名:void dis_img2(unsigned code *img)//函数功能: 下半屏显示图形//入口参数:uchar code *img//出口参数:无//注意:图形为128*32//================================================================= void dis_img2(uchar code *img){uchar i,j;for(j=32;j<64;j++){for(i=0;i<16;i++){dis_char(j,i,img[(j-32)*16+i]);}}}//=================================================================//**************************以下为新增命令,旧板不能用以下命令******************************** //=================================================================//void move_speed(uchar m)//函数功能: 设置移动速度为每m次个点阵行/列//入口参数:uchar m// 1 移动速度为每1次个点阵行/列,默认值// 2 移动速度为每2次个点阵行/列// 3 移动速度为每8次个点阵行/列// 4 移动速度为每16次个点阵行/列//出口参数:无//================================================================= void move_speed(uchar m){uchar speed;wr_lcd(0xfc);switch(m){case 1:speed=0x00;break;case 2:speed=0x01;break;case 3:speed=0x07;break;case 4:speed=0x0f;break;default:break;}wr_lcd(speed);}//=================================================================//函数名:void con_disp (void)//函数功能:选择或者取消反白显示//入口参数:无//出口参数:无//说明:调用该函数以后写入的图形或字符、汉字的显示会出现反显效果,就是把本应显示的数据取反再显示,// 当再次调用该函数时,取消反白功能,恢复原来显示效果。

液晶显示程序

液晶显示程序

OCMJ4X8C液晶显示程序作者:ahong007//×把所有的程序都放在一起,看着不方便。

*////*程序功能:显示一副汉字和一副图像*////*使用液晶:OCMJ4X8C(128*64,内置中文字库)*////单片机:SPCE061A////*v0.1 版本*////*2005.11.24*///*准备扩展功能:1。

实现汉字动态显示2。

图形的动态显示*/ #i nclude "bit.h"#define uint unsigned int#define uchar unsigned char#define x1 0x80#define x2 0x88#define y 0x80#define comm 0#define dat 1#define cs P0_0#define std P0_1#define sclk P0_2//sbit psb = P0^3; //H=并口; L=串口;//sbit rst = P0^4; //Reset Signal 低电平有效int acc;int temp;volatile int *P_Watchdog_Clear=(unsigned int*)(0x7012);void Initlcdport(){PA_Dir->bit.bit0=1;PA_Attrib->bit.bit0=1;cs=0;PA_Dir->bit.bit1=1;PA_Attrib->bit.bit1=1;std=0;PA_Dir->bit.bit2=1;PA_Attrib->bit.bit2=1;sclk=0;}uchar const tab1[]={"我爱你""哈尔滨工程大学""中华人民共和国""1234567890-=asdf"};uchar const tab32[]={/*-- 调入了一幅图像 --*//*-- 宽度x高度=128x32 --*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x07,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x7F,0x80,0x00,0x00,0x00,0x00,0x18,0x0C,0x00,0x00,0x01,0x00,0x00,0x00,0x00, 0x01,0xFF,0x80,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x13,0x10,0x03,0xFE,0x00, 0x03,0xFF,0xC0,0x00,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x3F,0x30,0x1F,0xFF,0xC0, 0x03,0xFF,0xE0,0x00,0x00,0x00,0x00,0x8C,0x03,0xF0,0x00,0x7F,0xE0,0x7C,0x01,0xE0, 0x03,0xFF,0xF0,0x00,0x00,0x00,0x01,0x36,0x06,0xC0,0x00,0x5F,0xC0,0xFF,0xFC,0x60, 0x01,0xFF,0xF0,0x00,0x00,0x00,0x02,0x1B,0x0F,0x80,0x00,0xFF,0x01,0xFE,0x0F,0x30, 0x00,0xEF,0xF0,0x00,0x00,0x00,0x02,0x6D,0x9F,0x00,0x00,0x3E,0x03,0xFF,0xF1,0x90, 0x00,0xFF,0xF8,0x00,0x00,0x00,0x04,0x36,0xFE,0x00,0x01,0xFF,0x07,0xFF,0xFC,0x90, 0x00,0xEF,0xFF,0xFF,0x80,0x00,0x04,0xDB,0x7E,0x00,0x03,0xFF,0x87,0xFF,0xFC,0xD0, 0x00,0x0F,0xFF,0xFF,0xC0,0x00,0x04,0x6D,0xFC,0x00,0x07,0xFF,0x8F,0xFF,0xFE,0x50, 0x00,0x0F,0xFF,0xFF,0xE0,0x00,0x04,0x36,0xFC,0x10,0x07,0xFF,0x8F,0xFF,0xFE,0x90, 0x00,0x0F,0xFF,0xFF,0xE0,0x00,0x04,0x1B,0xF8,0x10,0x07,0xFF,0xCF,0xFF,0xFE,0x80, 0x00,0x0F,0xFF,0xFF,0xF0,0x00,0x04,0x0F,0xF8,0x10,0x07,0xFF,0xFF,0xFF,0xFA,0x00, 0x00,0x07,0xFF,0xFF,0xF0,0x00,0x04,0x07,0xF0,0x10,0x07,0xFF,0xFF,0xFF,0xFA,0x00, 0x00,0xFF,0xFF,0xFF,0xF8,0x00,0x02,0x03,0xF0,0x20,0x07,0xFF,0xFF,0xFF,0xBA,0x00, 0x00,0xFD,0xFF,0xFF,0xFC,0x00,0x02,0x03,0xF0,0x20,0x03,0xFF,0xFF,0xDF,0xB8,0x00, 0x00,0xC1,0xC0,0x3F,0xFC,0x00,0x01,0x01,0xE0,0x40,0x00,0xFF,0xFF,0xDF,0xB0,0x00, 0x00,0x81,0xC0,0x3F,0xCE,0x00,0x00,0x81,0xE0,0x80,0x00,0x7F,0xFF,0xDF,0xA0,0x00, 0x00,0x81,0x80,0x1D,0xCF,0x00,0x00,0x41,0xE1,0x00,0x00,0x3F,0xFF,0x9B,0x00,0x00, 0x01,0x83,0x80,0x1F,0xC7,0x80,0x00,0x21,0xE2,0x00,0x00,0x1F,0xFD,0xB6,0x00,0x00, 0x01,0xC3,0x00,0x0E,0xE6,0x80,0x00,0x19,0xEC,0x00,0x00,0x07,0xFE,0x20,0x00,0x00, 0x00,0xC3,0x00,0x07,0x67,0x40,0x00,0x07,0xF0,0x00,0x00,0x03,0x3E,0x00,0x00,0x00, 0x00,0x02,0x00,0x03,0xE7,0xA0,0x00,0x00,0x00,0x00,0x00,0x02,0x8E,0x00,0x00,0x00, 0x00,0x06,0x00,0x03,0x83,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x03,0x00,0x00,0x00, 0x00,0x06,0x00,0x07,0x03,0x00,0x77,0x46,0x74,0x24,0x80,0x06,0x04,0x00,0x00,0x00, 0x00,0x1C,0x00,0x06,0x00,0x00,0x55,0x45,0x54,0x57,0x80,0x00,0x00,0x00,0x00,0x00, 0x00,0x1C,0x00,0x0E,0x00,0x00,0x45,0x45,0x74,0x57,0x80,0x08,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x1C,0x00,0x00,0x55,0x45,0x44,0x74,0x80,0xF0,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x38,0x00,0x00,0x77,0x76,0x47,0x54,0x80,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 };void wr_lcd (uchar dat_comm,uchar content);void delay (uint us);/*------------------初始化-----------------*/void init_lcd (void){wr_lcd (comm,0x30); /*30---基本指令动作*/wr_lcd (comm,0x01); /*清屏,地址指针指向00H*/ delay (100);wr_lcd (comm,0x06); /*光标的移动方向*/wr_lcd (comm,0x0c); /*开显示,关游标*/}/*---------------显示汉字或字符----------------*/void chn_disp (uchar const *chn){uchar i,j;wr_lcd (comm,0x30);wr_lcd (comm,0x80);for (j=0;j<4;j++){for (i=0;i<16;i++)wr_lcd (dat,chn[j*16+i]);}}/*-----------上半屏显示汉字或字符------------*/void chn_disp1 (uchar const *chn){uchar i,j;wr_lcd (comm,0x30);wr_lcd (comm,0x80);j=0;for (i=0;i<16;i++)wr_lcd (dat,chn[j*16+i]);wr_lcd (comm,0x90);j=1;for (i=0;i<16;i++)wr_lcd (dat,chn[j*16+i]);}/*----------------显示图形-----------------*/void img_disp (uchar const *img){uchar i,j;for(j=0;j<32;j++){for(i=0;i<8;i++){wr_lcd (comm,0x34);wr_lcd (comm,y+j);wr_lcd (comm,x1+i);wr_lcd (comm,0x30);wr_lcd (dat,img[j*16+i*2]);wr_lcd (dat,img[j*16+i*2+1]);}}for(j=32;j<64;j++){for(i=0;i<8;i++){wr_lcd (comm,0x34);wr_lcd (comm,y+j-32);wr_lcd (comm,x2+i);wr_lcd (comm,0x30);wr_lcd (dat,img[j*16+i*2]);wr_lcd (dat,img[j*16+i*2+1]);}}wr_lcd (comm,0x36);}/*-------------下半屏显示图形--------------*/ void img_disp1 (uchar const *img) {uchar i,j;for(j=0;j<32;j++){for(i=0;i<8;i++){wr_lcd (comm,0x34);wr_lcd (comm,y+j);wr_lcd (comm,x2+i);wr_lcd (comm,0x30);wr_lcd (dat,img[j*16+i*2]);wr_lcd (dat,img[j*16+i*2+1]);}}wr_lcd (comm,0x36);}/*--------------显示点阵----------------*/ void lat_disp (uchar data1,uchar data2) {uchar i,j,k,x;x=x1;for(k=0;k<2;k++){for(j=0;j<16;j++){for(i=0;i<8;i++){wr_lcd (comm,0x34);wr_lcd (comm,y+j*2);wr_lcd (comm,x+i);wr_lcd (comm,0x30);wr_lcd (dat,data1);wr_lcd (dat,data1);}for(i=0;i<8;i++){wr_lcd (comm,0x34);wr_lcd (comm,y+j*2+1);wr_lcd (comm,x+i);wr_lcd (comm,0x30);wr_lcd (dat,data2);wr_lcd (dat,data2);}}x=x2;}wr_lcd (comm,0x36);}/*-----------------------------------------------*///当data1=0xff,data2=0xff时,在x0,y0处反白显示16xl*yl.void con_disp (uchar data1,uchar data2,uchar x0,uchar y0,uchar xl,uchar yl) {uchar i,j;for(j=0;j<yl;j++){for(i=0;i<xl;i++){wr_lcd (comm,0x34);wr_lcd (comm,y0+j);wr_lcd (comm,x0+i);wr_lcd (comm,0x30);wr_lcd (dat,data1);wr_lcd (dat,data2);}wr_lcd (comm,0x36);}/*--------------清DDRAM------------------*/void clrram (void){wr_lcd (comm,0x30);wr_lcd (comm,0x01);delay (180);}/*---------------------------------------*/void wr_lcd (uchar dat_comm,uchar content) {uchar a,i,j;delay (50);content=(content*256);temp=content;cs=1;sclk=0;std=1;j=2;*P_Watchdog_Clear=0x0001;while(j--);for(i=0;i<5;i++){sclk=1;sclk=0;delay(3);}std=0;sclk=1;sclk=0;if(dat_comm)std=1; //dataelsestd=0; //commandsclk=1;sclk=0;std=0;sclk=1;sclk=0;acc=temp;for(j=0;j<2;j++)for(i=0;i<4;i++){if((acc&0x8000)==0x8000)std=1;elsestd=0;acc=acc<<1;sclk=1;sclk=0;}std=0;for(i=0;i<4;i++){sclk=1;sclk=0;}}}/*-----------------------------------*/void delay (uint us) //delay time {while(us--);}void delay1 (uint ms){uint i,j;for(i=0;i<ms;i++)for(j=0;j<15;j++)*P_Watchdog_Clear=0x0001;delay(1);}/*------------------主程序--------------------*/ void main (){void Initlcdport();init_lcd ();*P_Watchdog_Clear=0x0001;while (1){chn_disp (tab1);delay1 (8000);clrram();img_disp1 (tab32);*P_Watchdog_Clear=0x0001; delay1 (8000);clrram();}}。

单片机做的电子地图 南美洲

单片机做的电子地图 南美洲

南美洲电子地图配音值潘中安目录摘要 (1)1绪论 (1)1.1功能需求 (2)1.2数据需求 (2)2硬件设计 (2)2.1电路设计 (2)2.2 LCD液晶屏坐标图及外形尺寸图 (3)2.3功能模块设计 (5)3系统工作原理 (6)3.1型液晶显示屏(奥可拉中文集成模块)工作原理 (6)3.2 串行接口与串行传输介绍 (8)3.3绘图模块 (9)3.4 字形显示模块 (9)3.5 图形显示模块 (9)4语音接口模块简介 (9)5 线路连接 (10)6 软件设计 (11)6.1主程序 (11)6.2 LCD显示模块设计 (12)6.3 语音发音模块设计 (12)7 调试分析 (13)8结论 (13)9结束语 (13)参考文献 (13)附录一 (14)附录二 (23)摘要电子地图在我们的日常生活中具有很高的使用频率和使用价值,譬如,当我们身处异地时,往往会为了寻找一个目的地而发愁,但是自从有了电子地图,我们出行时再也不用担心会找不到某地了,只要用手机上网即可在电子地图里找到我们的目的地。

而液晶显示屏在日常生活中的使用更加广泛,液晶屏不止是使用在电脑、电视、电子产品上,可以说随处可见,例如飞机场里使用液晶屏来显示各个航班的情况,火车站和汽车站里用其来显示车次,商业街里使用液晶屏来显示各种各样的广告标语等。

本次微机系统综合课程设计要求在128*64的显示屏上显示出南美洲的地图外轮廓画面,而且要有相应的语音播报。

该课程设计使用到了OCMJ4X8C_3型LCD液晶屏,在这一次的课程设计中是将ISD语音芯片、LCD液晶屏和单片机相结合使用,因此,还涉及到了51单片机的编程方式及实现方法。

本报告中包含了系统工作原理:OCMJ4X8C_3型液晶显示屏(奥可拉中文集成模块)工作原理、串行接口与串行传输资料、汉字图形显示步骤;ISD语音芯片的语音的存储和播放、硬件设计:电路设计、LCD液晶屏外形尺寸图及坐标图、功能模块设计;线路连接;软件设计:主程序、LCD显示模块设计等内容,并给出了软、硬件的调试。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
0x00,0xEF,0xFF,0xFF,0x80,0x00,0x04,0xDB,0x7E,0x00,0x03,0xFF,0x87,0xFF,0xFC,0xD0,
0x00,0x0F,0xFF,0xFF,0xC0,0x00,0x04,0x6D,0xFC,0x00,0x07,0xFF,0x8F,0xFF,0xFE,0x50,
wr_lcd (comm,y+j);
wr_lcd (comm,x2+i);
wr_lcd (comm,0x30);
wr_lcd (dat,img[j*16+i*2]);
wr_lcd (dat,img[j*16+i*2+1]);
}
}
wr_lcd (comm,0x36);
}
/*--------------显示点阵----------------*/
0x03,0xFF,0xC0,0x00,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x3F,0x30,0x1F,0xFF,0xC0,
0x03,0xFF,0xE0,0x00,0x00,0x00,0x00,0x8C,0x03,0xF0,0x00,0x7F,0xE0,0x7C,0x01,0xE0,
#define y 0x80
#define comm 0
#define dat 1
#define cs P0_0
#define std P0_1
#define sclk P0_2
//sbit psb = P0^3; //H=并口; L=串口;
//sbit rst = P0^4; //Reset Signal低电平有效
{
wr_lcd (comm,0x3来自);wr_lcd (comm,y+j);
wr_lcd (comm,x1+i);
wr_lcd (comm,0x30);
wr_lcd (dat,img[j*16+i*2]);
wr_lcd (dat,img[j*16+i*2+1]);
}
}
for(j=32;j<64;j++)
int acc;
int temp;
volatile int *P_Watchdog_Clear=(unsigned int*)(0x7012);
void Initlcdport()
{
PA_Dir->bit.bit0=1;
PA_Attrib->bit.bit0=1;
cs=0;
PA_Dir->bit.bit1=1;
0x00,0x0F,0xFF,0xFF,0xF0,0x00,0x04,0x0F,0xF8,0x10,0x07,0xFF,0xFF,0xFF,0xFA,0x00,
0x00,0x07,0xFF,0xFF,0xF0,0x00,0x04,0x07,0xF0,0x10,0x07,0xFF,0xFF,0xFF,0xFA,0x00,
0x00,0x7F,0x80,0x00,0x00,0x00,0x00,0x18,0x0C,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
0x01,0xFF,0x80,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x13,0x10,0x03,0xFE,0x00,
0x01,0xC3,0x00,0x0E,0xE6,0x80,0x00,0x19,0xEC,0x00,0x00,0x07,0xFE,0x20,0x00,0x00,
0x00,0xC3,0x00,0x07,0x67,0x40,0x00,0x07,0xF0,0x00,0x00,0x03,0x3E,0x00,0x00,0x00,
0x03,0xFF,0xF0,0x00,0x00,0x00,0x01,0x36,0x06,0xC0,0x00,0x5F,0xC0,0xFF,0xFC,0x60,
0x01,0xFF,0xF0,0x00,0x00,0x00,0x02,0x1B,0x0F,0x80,0x00,0xFF,0x01,0xFE,0x0F,0x30,
0x00,0x02,0x00,0x03,0xE7,0xA0,0x00,0x00,0x00,0x00,0x00,0x02,0x8E,0x00,0x00,0x00,
0x00,0x06,0x00,0x03,0x83,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x03,0x00,0x00,0x00,
OCMJ4X8C液晶显示程序【红尘出品】
ahong007发表于-2005-11-24 10:54:00
2
推荐
//×把所有的程序都放在一起,看着不方便。*//
//*程序功能:显示一副汉字和一副图像*//
//*使用液晶:OCMJ4X8C(128*64,内置中文字库)*//
//单片机:SPCE061A//
//*v0.1版本*//
//*2005.11.24*//
/*准备扩展功能:1。实现汉字动态显示
2。图形的动态显示*/
#i nclude "bit.h"
#define uint unsigned int
#define uchar unsigned char
#define x1 0x80
#define x2 0x88
void chn_disp1 (uchar const *chn)
{
uchar i,j;
wr_lcd (comm,0x30);
wr_lcd (comm,0x80);
j=0;
for (i=0;i<16;i++)
wr_lcd (dat,chn[j*16+i]);
wr_lcd (comm,0x90);
j=1;
/*--调入了一幅图像--*/
/*--宽度x高度=128x32 --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x07,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
}
}
wr_lcd (comm,0x36);
}
/*-------------下半屏显示图形--------------*/
void img_disp1 (uchar const *img)
{
uchar i,j;
for(j=0;j<32;j++)
{
for(i=0;i<8;i++)
{
wr_lcd (comm,0x34);
void chn_disp (uchar const *chn)
{
uchar i,j;
wr_lcd (comm,0x30);
wr_lcd (comm,0x80);
for (j=0;j<4;j++)
{
for (i=0;i<16;i++)
wr_lcd (dat,chn[j*16+i]);
}
}
/*-----------上半屏显示汉字或字符------------*/
0x00,0xEF,0xF0,0x00,0x00,0x00,0x02,0x6D,0x9F,0x00,0x00,0x3E,0x03,0xFF,0xF1,0x90,
0x00,0xFF,0xF8,0x00,0x00,0x00,0x04,0x36,0xFE,0x00,0x01,0xFF,0x07,0xFF,0xFC,0x90,
0x00,0x0F,0xFF,0xFF,0xE0,0x00,0x04,0x36,0xFC,0x10,0x07,0xFF,0x8F,0xFF,0xFE,0x90,
0x00,0x0F,0xFF,0xFF,0xE0,0x00,0x04,0x1B,0xF8,0x10,0x07,0xFF,0xCF,0xFF,0xFE,0x80,
0x00,0xFF,0xFF,0xFF,0xF8,0x00,0x02,0x03,0xF0,0x20,0x07,0xFF,0xFF,0xFF,0xBA,0x00,
0x00,0xFD,0xFF,0xFF,0xFC,0x00,0x02,0x03,0xF0,0x20,0x03,0xFF,0xFF,0xDF,0xB8,0x00,
0x00,0x1C,0x00,0x0E,0x00,0x00,0x45,0x45,0x74,0x57,0x80,0x08,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x1C,0x00,0x00,0x55,0x45,0x44,0x74,0x80,0xF0,0x00,0x00,0x00,0x00,
0x00,0x06,0x00,0x07,0x03,0x00,0x77,0x46,0x74,0x24,0x80,0x06,0x04,0x00,0x00,0x00,
0x00,0x1C,0x00,0x06,0x00,0x00,0x55,0x45,0x54,0x57,0x80,0x00,0x00,0x00,0x00,0x00,
wr_lcd (comm,0x01); /*清屏,地址指针指向00H*/
delay (100);
wr_lcd (comm,0x06); /*光标的移动方向*/
wr_lcd (comm,0x0c); /*开显示,关游标*/
}
/*---------------显示汉字或字符----------------*/
};
void wr_lcd (uchar dat_comm,uchar content);
相关文档
最新文档