推荐-74595的使用

上传人:每**** 文档编号:48574316 上传时间:2022-01-12 格式:DOC 页数:157 大小:356.50KB
收藏 版权申诉 举报 下载
推荐-74595的使用_第1页
第1页 / 共157页
推荐-74595的使用_第2页
第2页 / 共157页
推荐-74595的使用_第3页
第3页 / 共157页
资源描述:

《推荐-74595的使用》由会员分享,可在线阅读,更多相关《推荐-74595的使用(157页珍藏版)》请在装配图网上搜索。

1、单片机与74LS595(8位输出锁存移位寄存器)的使用方法2009-04-12 13:5574595的数据端:QA-QH: 八位并行输出端,可以直接控制数码管的8个段。QH: 级联输出端。我将它接下一个595的SI端。SI: 串行数据输入端。74595的控制端说明:/SCLR(10脚): 低点平时将移位寄存器的数据清零。通常我将它接Vcc。SCK(11脚):上升沿时数据寄存器的数据移位。QA-QB-QC-.-QH;下降沿移位寄存器数据不变。(脉冲宽度:5V时,大于几十纳秒就行了。我通常都选微秒级)RCK(12脚):上升沿时移位寄存器的数据进入数据存储寄存器,下降沿时存储寄存器数据不变。通常我将

2、RCK置为低点平,当移位结束后,在RCK端产生一个正脉冲(5V时,大于几十纳秒就行了。我通常都选微秒级),更新显示数据。/G(13脚): 高电平时禁止输出(高阻态)。如果单片机的引脚不紧张,用一个引脚控制它,可以方便地产生闪烁和熄灭效果。比通过数据端移位控制要省时省力。注:1)74164和74595功能相仿,都是8位串行输入转并行输出移位寄存器。74164的驱动电流(25mA)比74595(35mA)的要小,14脚封装,体积也小一些。2)74595的主要优点是具有数据存储寄存器,在移位的过程中,输出端的数据可以保持不变。这在串行速度慢的场合很有用处,数码管没有闪烁感。3)595是串入并出带有锁

3、存功能移位寄存器,它的使用方法很简单,在正常使用时SCLR为高电平, G为低电平。从SER每输入一位数据,串行输595是串入并出带有锁存功能移位寄存器,它的使用方法很简单,如下面的真值表,在正常使用时SCLR为高电平, G为低电平。从SER每输入一位数据,串行输入时钟SCK上升沿有效一次,直到八位数据输入完毕,输出时钟上升沿有效一次,此时,输入的数据就被送到了输出端。入时钟SCK上升沿有效一次,直到八位数据输入完毕,输出时钟上升沿有效一次,此时,输入的数据就被送到了输出端。推荐精选 其实,看了这么多595的资料,觉得没什么难的,关键是看懂其时序图,说到底,就是下面三步(引用): 第一步:目的:

4、将要准备输入的位数据移入74HC595数据输入端上。 方法:送位数据到 P1.0。 第二步:目的:将位数据逐位移入74HC595,即数据串入 方法:P1.2产生一上升沿,将P1.0上的数据移入74HC595中.从低到高。 第三步:目的:并行输出数据。即数据并出 方法:P1.1产生一上升沿,将由P1.0上已移入数据寄存器中的数据 送入到输出锁存器。 说明: 从上可分析:从P1.2产生一上升沿(移入数据)和P1.1产生一上升沿 (输出数据)是二个独立过程,实际应用时互不干扰。即可输出数据的 同时移入数据。 而具体编程方法为 如:R0中存放3FH,LED数码管显示“0” ;*接口定义: DS_595

5、 EQU P1.0 ;串行数据输入(595-14) CH_595 EQU P1.2 ;移位时钟脉冲(595-11) CT_595 EQU P1.1 ;输出锁存器控制脉冲(595-12) ;*将移位寄存器内的数据锁存到输出寄存器并显示OUT_595: CALL WR_595 ;调用移位寄存器接收一个字节数据子程序 CLR CT_595 ;拉低锁存器控制脉冲 NOP NOP SETB CT_595 ;上升沿将数据送到输出锁存器,LED数码管显示“0” NOP NOP CLR CT_595 RET推荐精选 ;*移位寄存器接收一个字节(如3FH)数据子程序 WR_595: MOV R4,#08H ;一

6、个字节数据(8位) MOV A,R0 ;R0中存放要送入的数据3FH LOOP: ;第一步:准备移入74HC595数据 RLC A ;数据移位 MOV DS_595,C ;送数据到串行数据输入端上(P1.0) ;第二步:产生一上升沿将数据移入74HC595 CLR CH_595 ;拉低移位时钟 NOP NOP setb CH_595 ;上升沿发生移位(移入一数据) DJNZ R4,LOOP ;一个字节数据没移完继续 RET 而其级联的应用 74HC595主要应用于点阵屏,以16*16点阵为例:传送一行共二个字节(16位) 如:发送的是06H和3FH。其方法是: 1.先送数据3FH,后送06H。

7、 2.通过级联串行输入后,3FH在IC2内,06H在IC1内。应用如图二 3.接着送锁存时钟,数据被锁存并出现在IC1和IC2的并行输出口上显示。 编程方法: 数据在30H和31H中 ;MOV 30H,#3FH ;MOV 31H,#06H ;*接口定义: DS_595 EQU P1.0 ;串行数据输入(595-14) CH_595 EQU P1.2 ;移位时钟脉冲(595-11) CT_595 EQU P1.1 ;输出锁存器控制脉冲(595-12) ;*串行输入16位数据 MOV R0,30H CALL WR_595 ;串行输入3FH nop NOP MOV R0,31H CALL WR_59

8、5 ;串行输入06H NOP NOP SETB CT_595 ;推荐精选上升沿将数据送到输出锁存器,显示 NOP NOP CLR CT_595 RET利用74HC595实现多位LED显示的新方法摘 要:本文介绍了应用移位寄存器芯片74HC595实现LED动、静态显示的基本原理。提出了一种用74HC595实现多位LED显示的新方法。同时对该系统的硬件组成和软件实现作了详细说明。实际应用表明,此方法连线简单方便,成本低廉,可用于24位LED或更多位LED显示。关键词:LED 74HC595 动态显示 静态显示 1 引言 单片机应用系统中使用的显示器主要有LED和LCD两种。近年来也有用CRT显示的

9、。前者价格低廉,配置灵活,与单片机接口方便;后者可进行图形显示,但接口较复杂,成本也较高。LED(Ling Emiting Diode)是发光二极管的缩写。实际应用非常普遍的是八段LED显示器。LED显示器在大型报时屏幕,银行利率显示,城市霓虹灯建设中,得到广泛应用。在这些需要多位LED显示的场合,怎样实现系统稳定,价格低廉的显示,成为决定其成本的关键所在。 2 74HC595实现LED静、动态显示基本原理 74HC595是美国国家半导体公司生产的通用移位寄存器芯片。并行输出端具有输出锁存功能。与单片机连接简单方便,只须三个I/O口即可。而且通过芯片的Q7引脚和SER引脚,可以级联。而且价格低

10、廉,每片单价为1.5元左右.2.1 静态显示 推荐精选 每位LED显示器段选线和74HC595的并行输出端相连,每一位可以独立显示(见图1)。在同一时间里,每一位显示的字符可以各不相同(每一位由一个74HC595的并行输出口控制段选码)。N位LED显示要求N个74HC595芯片及N+3条I/O口线,占用资源较多,而且成本较高。这对于多位LED显示很不利。2.2 动态显示 在多位LED显示时,为了简化电路,降低成本,节省系统资源,将所有的推荐精选N位段选码并联在一起,由一片74HC595控制(见图2)。由于所有LED的段选码皆由一个74HC595并行输出口控制,因此,在每一瞬间,N位LED会显示

11、相同的字符。想要每位显示不同的字符,就必须采用扫描的方法,即在每一瞬间只使用一位显示字符。在此瞬间,74HC595并行输出口输出相应字符段选码,而位选则控制I/O口在该显示位送入选通电平,以保证该位显示相应字符。如此轮流,使每位分时显示该位应显示字符。由于74HC595具有锁存功能,而且串行输入段选码需要一定时间,因此,不需要延时,即可形成视觉暂留效果。N位LED显示时,只需要一片74HC595即可完成,成本最低。但是,此种方法的最大弱点就是当LED的位数大于12位时,出现闪烁现象,这是所有动态LED显示方式共同的弱点。 3 多位LED显示方法的实现 图3 多位LED动态显示驱动电路连线图 为

12、实现24位或更多位LED显示,本文提出了一种全新的方法。此方法结合了动态和静态显示的优点,可以说是两者的结合。连线图如图3所示。段选码由三片74HC595控制,段选数据由74HC595的SER引脚串行输入,由于输出使能时钟RCLK并接在一起,因此,三片74HC595并行输出端同时输出。而三个LED位选信号也并接在一起,因此,一次可以同时点亮三位LED。此过程类似于静态显示。每片74HC595并行输出端并接8位LED,用于扫描输出,此过程类似于动态扫描过程。此方法运用3片74HC595,n条位选信号,即可实现3n位LED显示。成本低廉,而且节省资源。此种方法实现多位LED显示程序框图为图4所示,

13、MCU为89S52。 推荐精选示例程序如下(24位LED显示):推荐精选4 结论 实践证明,此多位LED显示方法性能稳定,如再级联一片74HC595,在不需要增加I/O口线的情况下,即可实现32位LED显示。笔者做过48位LED显示,应稳定可靠。推荐精选其中,部分注释是本人注的,大家讨论一下这个程序吧。 /* KS0108128*64LCDC语言驱动 参考ICCAVR资料和网上的资料改写 LCD引脚定义 1-GND 2-VCC 3-VLCD 4-D/I 5-R/W 6-E 7到14D0-D7 15-CS1 16-CS2 17-RESET 18-VEE 19-SW 20-NC */ #inclu

14、de #include /*当前行、列存储,行高16点,列宽8点*/ unsignedcharCurOffset,CurRow,CurPage,CurCol; /*常量定义*/ #defineLCD_STATUS_BUSY0x80 #defineSTART_LINE00xc0 #defineDISPLAY_ON0x3f #defineDISPLAY_OFF0x3e #definePARA10x40 /PORTA-数据口PORTB-控制口 #defineLCD_DIR_PORTDDRA #defineLCD_IP_PORTPINA #defineLCD_OP_PORTPORTA #defineL

15、CD_EN_PORTPORTC #defineLCD_CS2_PORTPORTC #defineLCD_CS1_PORTPORTC #defineLCD_RW_PORTPORTC #defineLCD_DI_PORTPORTC #defineLCD_DI_BITBIT(7)/0x80 #defineLCD_RW_BITBIT(6)/0x40 #defineLCD_EN_BITBIT(5)/0x20 #defineLCD_CS1_BITBIT(4)/0x10 #defineLCD_CS2_BITBIT(3)/0x08 #defineSET_LCD_ELCD_EN_PORT|=LCD_EN_BIT

16、/LCD推荐精选使能 #defineCLEAR_LCD_ELCD_EN_PORT&=LCD_EN_BIT/LCD禁止 /以下可能出错,数据指令接口 #defineSET_LCD_DATALCD_DI_PORT|=LCD_DI_BIT/选择数据端口 #defineSET_LCD_CMDLCD_DI_PORT&=LCD_DI_BIT/选择指令端口 #defineSET_LCD_READLCD_RW_PORT|=LCD_RW_BIT/读模式 #defineSET_LCD_WRITELCD_RW_PORT&=LCD_RW_BIT/写模式 #defineSET_LCD_CS2LCD_CS2_PORT|=

17、LCD_CS2_BIT/右屏选择禁止 #defineCLEAR_LCD_CS2LCD_CS2_PORT&=LCD_CS2_BIT/右屏选择使能 #defineSET_LCD_CS1LCD_CS1_PORT|=LCD_CS1_BIT/左屏选择禁止 #defineCLEAR_LCD_CS1LCD_CS1_PORT&=LCD_CS1_BIT/左屏选择使能 #defineLEFT0 #defineRIGHT1 #defineCMD0 #defineDATA1 voidLCD_BUSY(unsignedcharlr)/判断忙标志。 unsignedcharstatus; CLI(); if(lr=LEF

18、T) /选择左半屏。 CLEAR_LCD_CS2;/cs2=0 SET_LCD_CS1;/cs1=1 else /选择右半屏。 SET_LCD_CS2;/cs2=1 CLEAR_LCD_CS1;/cs1=0 SET_LCD_CMD;/推荐精选选择指令端口。 LCD_DIR_PORT=0x00;/数据口方向设置。 LCD_OP_PORT=0xff;/数据口输出高电平。 SET_LCD_READ;/读模式。 SET_LCD_E;/LCD使能。 asm(nop);asm(nop); asm(nop);asm(nop); while(LCD_IP_PORT)&LCD_STATUS_BUSY)/判断LC

19、D是否忙。 CLEAR_LCD_E;/LCD禁止。 asm(nop);asm(nop); asm(nop);asm(nop); SET_LCD_E;/LCD使能。 asm(nop);asm(nop); asm(nop);asm(nop); CLEAR_LCD_E; SET_LCD_WRITE;/写模式。 LCD_OP_PORT=0xff;/写入显示RAM SEI(); voidwrite_LCD(unsignedcharlr,unsignedcharcd,unsignedchardata)/*写入指令或数据*/ CLI(); LCD_BUSY(lr); if(cd=CMD)SET_LCD_CM

20、D; elseSET_LCD_DATA; SET_LCD_WRITE; SET_LCD_E; LCD_DIR_PORT=0xff; LCD_OP_PORT=data; asm(nop);asm(nop); asm(nop);asm(nop); CLEAR_LCD_E; LCD_OP_PORT=0xff; SEI(); unsignedcharread_LCD(unsignedcharlr)/*读显示数据*/ unsignedchardata; CLI(); LCD_BUSY(lr); SET_LCD_DATA; LCD_DIR_PORT=0x00; LCD_OP_PORT=0xff; SET_

21、LCD_READ; SET_LCD_E; asm(nop);asm(nop); asm(nop);asm(nop); data=LCD_IP_PORT; CLEAR_LCD_E; SET_LCD_WRITE; LCD_BUSY(lr); SET_LCD_DATA; LCD_DIR_PORT=0x00; LCD_OP_PORT=0xff; SET_LCD_READ; SET_LCD_E; asm(nop);asm(nop); asm(nop);asm(nop); data=LCD_IP_PORT; CLEAR_LCD_E; SET_LCD_WRITE; SEI(); returndata; vo

22、idset_start_line_L(unsignedcharline)/*推荐精选设置显示起始行*/0-63 write_LCD(LEFT,CMD,0xc0|line); voidset_start_line_R(unsignedcharline)/*设置显示起始行*/0-63 write_LCD(RIGHT,CMD,0xc0|line); voidset_page_L(unsignedcharpage)/*设置X地址设置页*/0-7 write_LCD(LEFT,CMD,0xb8|page); voidset_page_R(unsignedcharpage)/*推荐精选设置X地址设置页*/

23、0-7 write_LCD(RIGHT,CMD,0xb8|page); voidset_col_addr_L(unsignedcharcol)/*设置Y地址*/0-63 write_LCD(LEFT,CMD,0x40|col); voidset_col_addr_R(unsignedcharcol)/*设置Y地址*/0-63 write_LCD(RIGHT,CMD,0x40|col); voidinit_lcd(void)/*初始化函数*/ set_start_line_L(0);/*显示起始行为0*/ set_start_line_R(0);/*显示起始行为0*/ write_LCD(LEF

24、T,CMD,DISPLAY_ON);/*开显示*/ write_LCD(RIGHT,CMD,DISPLAY_ON);/*开显示*/ voidclr_lcd(void)/*清屏函数*/ unsignedcharpages,i; for(pages=0;pages8;pages+) set_page_L(pages);/*X页地址*/ set_page_R(pages);/*X页地址*/ for(i=0;i64;i+) set_col_addr_L(i);/Y set_col_addr_R(i);/Y write_LCD(LEFT,DATA,0x0); write_LCD(RIGHT,DATA,0

25、x0); /*/ /*绘点函数*/ /*/ voidpixel(unsignedcharxx,unsignedcharyy,unsignedcharflag) unsignedinty,ch; ch=yy%8;/推荐精选余数 y=1; for(;ch!=0;) y=y*2; ch-; if(xx64) set_page_L(yy/8); set_col_addr_L(xx); ch=read_LCD(LEFT); set_col_addr_L(xx); if(flag) write_LCD(LEFT,DATA,ch|y); else y=y; ch&=y; write_LCD(LEFT,DAT

26、A,ch|y); else set_page_R(yy/8); set_col_addr_R(xx-64); ch=read_LCD(RIGHT); set_col_addr_R(xx-64); if(flag) write_LCD(RIGHT,DATA,ch|y); else y=y; ch&=y; write_LCD(RIGHT,DATA,ch|y); /ASCII字模宽度及高度 #defineASC_CHR_WIDTH8 #defineASC_CHR_HEIGHT12 typedefstructtypFNT_ASC16/*推荐精选汉字字模显示数据结构*/ charIndex1; char

27、Msk16; ; structtypFNT_ASC16constASC_16=/*显示为8*16Curier10常规*/ 1,0x00,0x00,0x08,0x08,0xFC,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x07,0x04,0x04,0x00, 2,0x00,0x00,0x08,0x04,0x84,0x44,0x38,0x00,0x00,0x00,0x06,0x05,0x04,0x04,0x04,0x00, 3,0x00,0x00,0x08,0x04,0x44,0x44,0xB8,0x00,0x00,0x00,0x02,0x04,0x04,0x04,0

28、x03,0x00, 4,0x00,0x00,0x80,0x60,0x18,0xFC,0x00,0x00,0x00,0x00,0x01,0x01,0x05,0x07,0x05,0x00, 5,0x00,0x00,0x7C,0x44,0x44,0x44,0x84,0x00,0x00,0x00,0x02,0x04,0x04,0x04,0x03,0x00, 6,0x00,0x00,0xF0,0x48,0x44,0x44,0x80,0x00,0x00,0x00,0x03,0x04,0x04,0x04,0x03,0x00, 7,0x00,0x00,0x0C,0x04,0x84,0x64,0x1C,0x00

29、,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x00, 8,0x00,0x00,0xB8,0x44,0x44,0x44,0xB8,0x00,0x00,0x00,0x03,0x04,0x04,0x04,0x03,0x00, 9,0x00,0x00,0x38,0x44,0x44,0x44,0xF8,0x00,0x00,0x00,0x00,0x04,0x04,0x02,0x01,0x00, 0,0x00,0x00,0xF8,0x04,0x04,0x04,0xF8,0x00,0x00,0x00,0x03,0x04,0x04,0x04,0x03,0x00, .,0x00,0x

30、00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x06,0x00,0x00,0x00, :,0x00,0x00,0x00,0x0C,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x00,0x00,0x00, ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, (,0x00,0x00,0x00,0xE0,0x18,0x04,0x00,0x00,0x00,0x00,0x00,0x03

31、,0x0C,0x10,0x00,0x00, ),0x00,0x00,0x00,0x04,0x18,0xE0,0x00,0x00,0x00,0x00,0x00,0x10,0x0C,0x03,0x00,0x00, ; #defineASC_HZ_WIDTH12 /#defineASC_HZ_HEIGHT12 typedefstructtypFNT_GB16/*12*16推荐精选汉字字模显示数据结构*/ charIndex2; charMsk24; ; structtypFNT_GB16constGB_16=/*宋体9小五显示为12*16*/ 液,0x19,0xE2,0x14,0x42,0xF2,0

32、x2E,0x72,0x8F,0xAA,0x7A,0x02,0x00,0x01,0x07,0x00,0x00,0x07,0x04,0x04,0x02,0x01,0x02,0x04,0x00, 晶,0x00,0xC0,0x40,0x5F,0xD5,0x15,0xD5,0x55,0x5F,0x40,0xC0,0x00,0x00,0x07,0x05,0x05,0x07,0x00,0x07,0x05,0x05,0x05,0x07,0x00, 显,0x00,0x40,0x9F,0x15,0xD5,0x15,0xD5,0x15,0x1F,0xC0,0x00,0x00,0x04,0x04,0x05,0x04,

33、0x07,0x04,0x07,0x06,0x05,0x04,0x04,0x00, 示,0x10,0x12,0x92,0x52,0x12,0xF2,0x12,0x12,0x53,0x92,0x10,0x00,0x02,0x01,0x00,0x04,0x04,0x07,0x00,0x00,0x00,0x00,0x03,0x00, 的,0xFC,0x44,0x46,0x45,0xFC,0x10,0x2C,0xC7,0x04,0x04,0xFC,0x00,0x07,0x02,0x02,0x02,0x07,0x00,0x00,0x04,0x04,0x04,0x03,0x00, 第,0x04,0xEA,0

34、xAB,0xAE,0xAA,0xFC,0xAA,0xAB,0xAE,0xBA,0x82,0x00,0x04,0x04,0x02,0x01,0x00,0x07,0x00,0x02,0x02,0x02,0x01,0x00, 一,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x30,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 行,0x48,0x24,0xF3,0x08,0x09,0x09,0x09,0x09,0xF9,0x09,0x08,0x00,0x00,

35、0x00,0x07,0x00,0x00,0x04,0x04,0x04,0x07,0x00,0x00,0x00, 二,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x06,0x04,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00, 三,0x00,0x02,0x22,0x22,0x22,0x22,0x22,0x22,0x23,0x02,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x06,0x04,0x00

36、, 四,0x00,0xFF,0x81,0x41,0x3F,0x01,0x01,0xFF,0x81,0x81,0xFF,0x00,0x00,0x07,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x07,0x00, 五,0x00,0x11,0x11,0x91,0x7F,0x11,0x11,0x11,0xF1,0x01,0x00,0x00,0x04,0x04,0x04,0x07,0x04,0x04,0x04,0x04,0x07,0x04,0x04,0x00, ; unsignedcharGetPage(void)/*推荐精选得到当前页*/ returnCurPa

37、ge; unsignedcharGetCol(void)/*得到当前列*/ returnCurCol; voidSetPageCol(unsignedcharupage,unsignedcharucol)/*设置液晶的页和列*/ CurPage=upage; CurCol=ucol; if(ucol64) set_page_L(upage); set_col_addr_L(ucol); else set_page_R(upage); set_col_addr_R(ucol-64); /*设置当前显示的页和列*/ voidSetRowCol(unsignedcharurow,unsignedch

38、arucol) unsignedcharpage; CurRow=urow; CurCol=ucol; switch(urow) case1: page=0; CurOffset=1; break; case2: page=1; CurOffset=2; break; case3: page=3; CurOffset=1; break; case4: page=4; CurOffset=2; break; case5: page=6; CurOffset=1; break; SetPageCol(page,ucol); voiddisp_char(unsignedcharc) unsigned

39、chark,j,uPage,uCol,ch_r,ch_w; unsignedcharwidth; unsignedcharlen; uPage=GetPage(); uCol=GetCol(); len=sizeof(ASC_16)/sizeof(ASC_160); for(k=0;klen;k+) if(c=ASC_16k.Index0)break; if(klen) if(c=-|c=:) width=ASC_CHR_WIDTH-2; elseif(c=|) width=ASC_HZ_WIDTH-ASC_CHR_WIDTH; else width=ASC_CHR_WIDTH; if(Cur

40、Offset=1)/推荐精选下半部是写半个字节 for(j=0;jwidth;j+) SetPageCol(uPage,uCol+j); ch_w=ASC_16k.Mskj; if(uCol+j64)write_LCD(LEFT,DATA,ch_w); elsewrite_LCD(RIGHT,DATA,ch_w); SetPageCol(uPage+1,uCol); for(j=0;jwidth;j+) SetPageCol(uPage+1,uCol+j); if(uCol+j64)ch_r=read_LCD(LEFT); elsech_r=read_LCD(RIGHT); ch_r&=0xf

41、0; ch_w=ASC_16k.MskASC_CHR_WIDTH+j&0x推荐精选0f; ch_w|=ch_r; SetPageCol(uPage+1,uCol+j); if(uCol+j64)write_LCD(LEFT,DATA,ch_w); elsewrite_LCD(RIGHT,DATA,ch_w); else/上半部是写半个字节 for(j=0;jwidth;j+) SetPageCol(uPage,uCol+j); if(uCol+j64)ch_r=read_LCD(LEFT); elsech_r=read_LCD(RIGHT); ch_r&=0x0f; ch_w=ASC_16k.

42、Mskj; ch_w=ch_w4; ch_w|=ch_r; SetPageCol(uPage,uCol+j); if(uCol+j64)write_LCD(LEFT,DATA,ch_w); elsewrite_LCD(RIGHT,DATA,ch_w); SetPageCol(uPage+1,uCol); for(j=0;j4; ch_w=ch_w4; ch_w|=ch_r; SetPageCol(uPage+1,uCol+j); if(uCol+j64)write_LCD(LEFT,DATA,ch_w); elsewrite_LCD(RIGHT,DATA,ch_w); SetPageCol(u

43、Page,uCol+width); voiddisp_hz(unsignedcharconst*hz) unsignedchark,j,uPage,uCol,ch_r,ch_w; uPage=GetPage(); uCol=GetCol(); for(k=0;ksizeof(GB_16)/sizeof(GB_160);k+) if(hz0=GB_16k.Index0&hz1=GB_16k.Index1) break; if(CurOffset=1) for(j=0;jASC_HZ_WIDTH;j+) SetPageCol(uPage,uCol+j); ch_w=GB_16k.Mskj; if(

44、uCol+j64)write_LCD(LEFT,DATA,ch_w); elsewrite_LCD(RIGHT,DATA,ch_w); SetPageCol(uPage+1,uCol); for(j=0;jASC_HZ_WIDTH;j+) SetPageCol(uPage+1,uCol+j); if(uCol+j64)ch_r=read_LCD(LEFT); elsech_r=read_LCD(RIGHT); ch_r&=0xf0; ch_w=GB_16k.MskASC_HZ_WIDTH+j&0x推荐精选0f; ch_w|=ch_r; SetPageCol(uPage+1,uCol+j); i

45、f(uCol+j64)write_LCD(LEFT,DATA,ch_w); elsewrite_LCD(RIGHT,DATA,ch_w); SetPageCol(uPage,uCol+ASC_HZ_WIDTH); else/推荐精选汉字上半部是写半个字节 for(j=0;jASC_HZ_WIDTH;j+) SetPageCol(uPage,uCol+j); if(uCol+j64)ch_r=read_LCD(LEFT); elsech_r=read_LCD(RIGHT); ch_r&=0x0f; ch_w=GB_16k.Mskj; ch_w=ch_w4; ch_w|=ch_r; SetPage

46、Col(uPage,uCol+j); if(uCol+j64)write_LCD(LEFT,DATA,ch_w); elsewrite_LCD(RIGHT,DATA,ch_w); SetPageCol(uPage+1,uCol); for(j=0;j4; ch_w=ch_w4; ch_w|=ch_r; SetPageCol(uPage+1,uCol+j); if(uCol+j0) if(pi128) /*ASCII*/ disp_char(pi); else /*推荐精选中文*/ disp_hz(&pi); i+; i+; voidmain() unsignedchari; DDRC=0xff; init_lcd(); clr_lcd(); SetRowCol(1,0); disp_str(液晶显示的第一行1234); SetRowCol(2,0); disp_str(液晶显示的第二行2345); SetRowCol(3,0); disp_str(液晶显示的第三行3456

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!