采用深圳瑞特的RT12864-J-3点阵屏做了个程序,MCU是东芝87PH846,仿真调试时出现屏闪烁,且需要用手靠近或压着仿真头的扁平线,显示屏才显示,而且显示不稳定,出现移位,且有时不显示,有时显示,不知是何故,附上程序,请大家帮忙分析下(时钟为8MHZ),采用P6口输出并行数据,P1口输出控制信号,RET接5V.<br />;-----------------------------------------------------------<br />;左半屏64列:显示汉字程序(16*16点阵)<br />;纵向取模,字节倒序<br />disp_chinese_l:<br /> ld (lcd_command),(lcd_addz) ;设置起始行地址<br /> call ww_command_left <br /> ; ld e,(lcd_addx) ;设置页地址<br />loop1_la: <br /> <br /> ld d,0 ;每个汉字占两页<br />loop1_l: <br /> ld c,0 ;查表指针清零 <br /> ld (lcd_command),(lcd_addx) ;e ;设置页地址<br /> call ww_command_left <br /> ld (lcd_command),(lcd_addy) ;设置列地址<br /> call ww_command_left <br />loop2_l: <br /> ld a,(hl+) ;查表显示汉字的上半部分<br /> ld (lcd_data1),a ;0xa5 ;共16个字节<br /> call ww_data_left <br /> inc c <br /> cmp c,16 <br /> j lt,loop2_l <br /> <br /> inc (lcd_addx) ;e ;页地址加1,指向汉字的下半部分<br /> inc d <br /> cmp d,2 <br /> j lt,loop1_l <br /> add (lcd_addy),16 <br /> dec (lcd_addx) ;e <br /> dec (lcd_addx) ;e <br /> dec (lcd_data2) ;显示汉字的个数<br /> j nz,loop1_la<br /> ld a,(lcd_addy)<br /> sub a,0x40<br /> cmp a,64<br /> j lt,disp_ch_l_ret<br /> add (lcd_addx),2<br /> ld (lcd_addy),0x40<br />disp_ch_l_ret: <br /> ret<br /><br />;下面是主程序循环中显示刷新程序<br />home_picture:<br /> ld (lcd_command),0x3e ;关闭显示命令<br /> call ww_command_left ;关左屏<br /> call ww_command_right ;关右屏<br /> <br /> ld (lcd_addz),0xc0 ;设定起始行,从0行开始<br /> ld (lcd_command),(lcd_addz)<br /> call ww_command_left<br /> call ww_command_right <br /> <br /> ld (lcd_addx),0xb8 ;设定起始页,从0页开始<br /> ld (lcd_command),(lcd_addx)<br /> call ww_command_left<br /> call ww_command_right <br /> <br /> ld (lcd_addy),0x40 ;设定起始列,从0列开始<br /> ld (lcd_command),(lcd_addy)<br /> call ww_command_left<br /> call ww_command_right <br /> <br /> ld (lcd_command),0x3f ;开启显示命令<br /> call ww_command_left ;开左屏<br /> call ww_command_right ;开右屏 <br /><br /> ld hl,ch_tab30 <br /> ld (lcd_data2),2 ;显示两个汉字 <br /> call disp_chinese_l <br /><br /> ld (lcd_data2),2 ;显示两个汉字<br /> call disp_chinese_l <br /> ld (lcd_data2),2<br /> call disp_chinese_l ;显示两个汉字<br /><br /> ld (lcd_data2),2 ;显示两个汉字<br /><br /> call disp_chinese_l <br /><br /> ld (lcd_data2),2 ;显示两个汉字 <br /> call disp_chinese_l <br /><br /> ld (lcd_data2),2 ;显示两个汉字<br /> call disp_chinese_l <br /> ld (lcd_data2),2 ;显示两个汉字<br /><br /> call disp_chinese_l <br /> ld (lcd_data2),2 ;显示两个汉字<br /><br /> call disp_chinese_l<br /><br /> ret |
|