久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
STM32 lcd子菜單的實(shí)現(xiàn)程序
[打印本頁(yè)]
作者:
456654321123
時(shí)間:
2019-10-21 10:50
標(biāo)題:
STM32 lcd子菜單的實(shí)現(xiàn)程序
實(shí)現(xiàn)了一個(gè)stm32 上LCD屏幕的菜單選擇
單片機(jī)源程序如下:
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "lcd.h"
#include "led.h"
#include "key.h"
#include "malloc.h"
#include "sdio_sdcard.h"
#include "w25qxx.h"
#include "ff.h"
#include "exfuns.h"
#include "text.h"
#include "pyinput.h"
#include "touch.h"
#include "string.h"
#include "usmart.h"
u16 kbdxsize; //虛擬鍵盤按鍵寬度
u16 kbdysize;//虛擬鍵盤按鍵高度
u8 aaa;//一級(jí)菜單翻轉(zhuǎn)位
vu8 key=0;
u16 i;
//數(shù)字表
const u8* kbd_tbl[9]={"LED1","LED2","LED3","LED4","LED5","LED6","set","fun","close"};
//字符表
const u8* kbs_tbl[9]={"燈1","燈2","燈3","燈4","燈5","燈6","設(shè)置","功能","關(guān)閉"};
void first_meau_1(void)
{
POINT_COLOR=RED;
Show_Str(30,5,200,16,"led燈管控制",16,0);
Show_Str(30,20,200,16,"all點(diǎn)亮所有",16,0);
Show_Str(30,35,200,16,"fun進(jìn)入功能",16,0);
Show_Str(30,50,200,16,"close關(guān)閉當(dāng)前",16,0);
Show_Str(30,65,200,16,"circle1:校準(zhǔn) KEY0:切換",16,0);
Show_Str(30,90,200,16,"輸入:",16,0);
Show_Str(30,110,200,32,"結(jié)果:",16,0);
}
void first_meau_2(void)
{
POINT_COLOR=RED;
Show_Str(30,5,200,16,"led control",16,0);
Show_Str(30,20,200,16,"all lights on",16,0);
Show_Str(30,35,200,16,"function",16,0);
Show_Str(30,50,200,16,"close now",16,0);
Show_Str(30,65,200,16,"circle1:adjust KEY0:change",16,0);
Show_Str(30,90,200,16,"in:",16,0);
Show_Str(30,110,200,32,"out:",16,0);
}
void Init_all(void)
{
delay_init(); //延時(shí)函數(shù)初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設(shè)置中斷優(yōu)先級(jí)分組為組2:2位搶占優(yōu)先級(jí),2位響應(yīng)優(yōu)先級(jí)
uart_init(115200); //串口初始化為115200
usmart_dev.init(72); //初始化USMART
KEY_Init(); //初始化按鍵
LCD_Init(); //初始化LCD
W25QXX_Init(); //初始化W25Q128
tp_dev.init(); //初始化觸摸屏
my_mem_init(SRAMIN); //初始化內(nèi)部?jī)?nèi)存池
exfuns_init(); //為fatfs相關(guān)變量申請(qǐng)內(nèi)存
f_mount(fs[0],"0:",1); //掛載SD卡
f_mount(fs[1],"1:",1); //掛載FLASH.
POINT_COLOR=RED;
while(font_init()) //檢查字庫(kù)
{
LCD_ShowString(30,50,200,16,16,"Font Error!");
delay_ms(200);
LCD_Fill(30,50,240,66,WHITE);//清除顯示
}
}
void secondMeau(void)
{
}
//加載鍵盤界面
//x,y:界面起始坐標(biāo)
void py_load_ui(u16 x,u16 y,u8 flag)
{
POINT_COLOR=BLACK;
LCD_DrawRectangle(x,y,x+kbdxsize*3,y+kbdysize*3);
LCD_DrawRectangle(x+kbdxsize,y,x+kbdxsize*2,y+kbdysize*3);
LCD_DrawRectangle(x,y+kbdysize,x+kbdxsize*3,y+kbdysize*2);
POINT_COLOR=BLUE;
if(flag)
{
first_meau_2();
for(i=0;i<9;i++)
{
Show_Str_Mid(x+(i%3)*kbdxsize,y+4+kbdysize*(i/3),(u8*)kbd_tbl[i],16,kbdxsize); //Chinese
}
}
else
{
first_meau_1();
for(i=0;i<9;i++)
{
Show_Str_Mid(x+(i%3)*kbdxsize,y+kbdysize/2+kbdysize*(i/3),(u8*)kbs_tbl[i],16,kbdxsize); //English
}
}
}
//按鍵狀態(tài)設(shè)置
//x,y:鍵盤坐標(biāo)
//key:鍵值(0~8)
//sta:狀態(tài),0,松開(kāi);1,按下;
void py_key_staset(u16 x,u16 y,u8 keyx,u8 sta)
{
u16 i=keyx/3,j=keyx%3;
if(keyx>8)
return;
if(sta)
LCD_Fill(x+j*kbdxsize+1,y+i*kbdysize+1,x+j*kbdxsize+kbdxsize-1,y+i*kbdysize+kbdysize-1,GREEN);
else
LCD_Fill(x+j*kbdxsize+1,y+i*kbdysize+1,x+j*kbdxsize+kbdxsize-1,y+i*kbdysize+kbdysize-1,WHITE);
}
//得到觸摸屏的輸入
//x,y:鍵盤坐標(biāo)
//返回值:按鍵鍵值(1~9有效;0,無(wú)效)
u8 py_get_keynum(u16 x,u16 y)
{
u16 i,j;
static u8 key_x=0;//0,沒(méi)有任何按鍵按下;1~9,1~9號(hào)按鍵按下
u8 key=0;
tp_dev.scan(0);
if(tp_dev.sta&TP_PRES_DOWN) //觸摸屏被按下
{
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
if(tp_dev.x[0]<(x+j*kbdxsize+kbdxsize)&&tp_dev.x[0]>(x+j*kbdxsize)&&tp_dev.y[0]<(y+i*kbdysize+kbdysize)&&tp_dev.y[0]>(y+i*kbdysize))
{
key=i*3+j+1;
break;
}
}
if(key)
{
if(key_x==key)key=0;
else
{
py_key_staset(x,y,key_x-1,0);
key_x=key;
py_key_staset(x,y,key_x-1,1);
}
break;
}
}
}
else if(key_x)
{
py_key_staset(x,y,key_x-1,0);
key_x=0;
}
return key; //得到key值
}
int main(void)
{
u8 i=0;
u8 circle1,circle2,circle3;//按鍵標(biāo)志位
u8 inputstr[100]; //最大輸入100個(gè)字符+結(jié)束符
u8 inputlen; //輸入長(zhǎng)度
u8 ok=0;
Init_all();
if(lcddev.id==0X5310){kbdxsize=86;kbdysize=43;}//根據(jù)LCD分辨率設(shè)置按鍵大小
else if(lcddev.id==0X5510||lcddev.id==0X1963){kbdxsize=140;kbdysize=70;}
else {kbdxsize=60;kbdysize=40;}
memset(inputstr,0,7); //全部清零
inputlen=0; //輸入長(zhǎng)度為0
while(1)
{
circle1=KEY_Scan(0);
circle2 = circle1;
while(circle2==KEY0_PRES)
{
circle2=KEY_Scan(0);
}
if(circle1==KEY0_PRES)
{
ok =~ok;
LCD_Clear(WHITE);
}
i++;
delay_ms(10);
if(aaa==1)
{
secondMeau();
circle3=KEY_Scan(0);
if(circle3==KEY1_PRES)
{
aaa=0;
}
}
else
{
py_load_ui(30,195,ok);
key=py_get_keynum(30,195);
if(key)
{
if(key==9)//刪除
{
Show_Str(30,130,200,16,"關(guān)閉當(dāng)前",16,0);
delay_ms(1000);
LCD_Fill(30,130,30+100,140+16,WHITE);
if(inputlen)
{
inputstr[inputlen-1]=' ';//添加結(jié)束符
inputlen--;
}
}
else
{
if(key==8)
{
Show_Str(30,130,200,16,"進(jìn)入下一功能",16,0);
delay_ms(1000);
LCD_Fill(30,130,30+100,140+16,WHITE);
LCD_Fill(30+40,90,30+40+48,110+16,WHITE); //清除之前的顯示
delay_ms(1000);
LCD_Fill(0,0,2000,2000,WHITE);
Show_Str(30+40,90,200,16," ",16,0);
aaa=1;
}
if(key==7)
{
Show_Str(30,130,200,16,"設(shè)置地址",16,0);
delay_ms(1000);
Show_Str(30+40,90,200,16," ",16,0);
}
inputstr[inputlen]=key+'0';//輸入字符
if(inputlen<100)
inputlen++;
}
LCD_Fill(30+40,90,30+40+48,110+16,WHITE); //清除之前的顯示
if(key!=8&&key!=7)
{
Show_Str(30+40,90,200,16,inputstr,16,0); //顯示有效的數(shù)字串
}
}
}
}
}
復(fù)制代碼
所有資料51hei提供下載:
LCD顯示.7z
(1.39 MB, 下載次數(shù): 41)
2019-10-21 17:35 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者:
耿慶梓!!@#!
時(shí)間:
2019-11-24 19:28
解決燃眉之急
作者:
asm555
時(shí)間:
2020-4-11 19:37
正好需要,,多謝
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
日本视频在线播放
|
欧美日韩国产在线观看
|
成人午夜视频在线观看
|
亚洲成人一区
|
第一区在线观看免费国语入口
|
国产精品国产三级国产aⅴ原创
|
91麻豆精品国产91久久久资源速度
|
久久精品免费看
|
久久免费精彩视频
|
日韩欧美网
|
精品一区二区三区91
|
久久久久久999
|
欧美在线播放一区
|
精品国产乱码久久久久久1区2区
|
精品久久香蕉国产线看观看亚洲
|
性生生活大片免费看视频
|
日韩在线视频免费观看
|
91黄在线观看
|
日本视频一区二区三区
|
h视频在线观看免费
|
狠狠操电影
|
成人国产精品免费观看视频
|
国产一区91精品张津瑜
|
国内精品久久久久
|
欧美性乱
|
成人在线免费观看
|
国产精品欧美精品日韩精品
|
超碰成人av
|
一区二区三区视频
|
久久精品成人
|
成人二区
|
国产精品久久久久久婷婷天堂
|
国产成视频在线观看
|
91久久久久久久久久久
|
成人国产在线视频
|
视频一区 国产精品
|
暴草美女
|
成人av电影天堂
|
亚洲欧美日韩在线一区二区
|
国产精品乱码一区二区三区
|
久久毛片
|