当前位置:首页 > 1 LCD1602显示总结
即可。
2.3 LCD1602字符菜单界面的Tab实现
在解决了每次按键就只有一个输入后,菜单输入区就可以接受字符了。多个输入区彼此切换应成为一个菜单界面基备的。
要让各个输入区实现Tab式的切换,首先是要用一个按键来触发(Tab按键)。而且还要用标志变量来保存到底该切换到哪一个输入区。在程序的模块化设计中,可以专门的编写一个函数来实现。如果用一个函数来实现,可以用两种思路来实现这个功能。
(1) 用一个全局变量来作为各个输入区的标志变量。用此变量的值来判断LCD光标该跳往各处。
(2) 用局部static的变量来作为各个输入区的标志变量。此时可以将变量定义来函数内部。
至于全局变量和局部静态变量到底哪个好,还得学习一下,空口还说不出来太多。 举一个用局部static变量来实现上图两个坐标的切换,很简单的了:
[plain] view plaincopyprint?
?? void x_to_y_to_x() ?? {
?? if( in_menu_flag ){
?? static unsigned char x_cur = 1; ?? static unsigned char y_cur = 0; ??
?? //光标首先在输入x值处,如果用户输入x坐标按确定就跳将LCD的输入y坐标处 ?? if( x_cur ){
?? lcd_write_command( 0x80 + 0x40 + strlen( d_line ) + strlen( y_axis) ); ??
?? //光标在输入y坐标处 ?? x_cur = 0; ?? y_cur = 1; ?? //如果是在
?? }else if( y_cur ){
?? lcd_write_command( 0x80 + 0x40 + strlen( x_axis ) ); ??
?? //光标在输入x坐标处 ?? x_cur = 1; ?? y_cur = 0; ?? }
?? }else if( in_line_menu_flag ){ ??
?? static unsigned char location = 1;
?? if( location == 1 ){
?? lcd_write_command( 0x80 + BEFOR_X_LENGHT + 5 ); ??
?? }else if( location == 2 ){
?? lcd_write_command( 0x80 + 0x40 + BEFOR_X_LENGHT ); ??
?? }else if( location == 3){
?? lcd_write_command( 0x80 + 0x40 + BEFOR_X_LENGHT + 5); ??
?? }else if( location == 4){
?? lcd_write_command( 0x80 + BEFOR_X_LENGHT ); ?? location = 0; ?? }
?? location++; ?? } ?? }
程序表明,如果当前处于in_menu_flag这个菜单界面(上图界面)内,则在接收到切换按键时实现切换。这里用了static变量生命周期长,可以记住变量本身状态(值)的特点实现了这一要求。
后面那段处于in_line_menu_flag中的界面时(每次只有一个界面状态为真),用一个static变量实现了4个输入区的切换。
共分享92篇相关文档