专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
51单片机
[求助]希望哪位大神能详细解释下基于结构体的那个菜单。
2020-01-20 19:05
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
51单片机
3593
18
18
如题,看了傻孩子的,网上也找了一些,还是看不明白,原谅我这么菜,我找到的程序都没什么注释,说实话真的看不懂,越看越绕,越迷糊。。在此希望哪位大神能给来一个详细的解答。。。拜谢!!!
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
18条回答
lswhome
2020-01-21 06:26
比如这个也算是个菜单,可以调整一些参数,界面也不难看。
static void Menu_Screen_Set(void)//屏幕设定
{
UINT8 xdata Select=0;
UINT8 xdata Last_Select=0;
bit RePaint_Menu=1;
UINT8 xdata str[4];
UINT8 xdata tmp1=Roms[0];
UINT8 xdata tmp2=Roms[1];
UINT8 xdata tmp3=Roms[31];
bit RePaint=1;//是否重画整个菜单项
while(1)
{
if(RePaint==1)
{
ST7565_Paint_RectangleFill(0,0,64,128,0);//清屏
ST7565_Paint_Rectangle(0,8,64,112,1);//边框
ST7565_Paint_HLine(13,8,112,1);//横线
ST7565_Paint_MixStr(1,40,"屏幕设定",0);
ST7565_Paint_MixStr(18,28,"屏幕对比度",0);
ST7565_Paint_MixStr(32,19,"关闭时间 时 分",0);
ST7565_Paint_MixStr(46,22,"数码管对比度",0);
ST7565_Paint_HLine(30,88,12,1);//
ST7565_Paint_HLine(44,67,6,1);//
ST7565_Paint_HLine(44,85,12,1);//
ST7565_Paint_HLine(58,94,12,1);//
}
if(Select==0 || Last_Select==0 || RePaint_Menu==1)//选择了第1项
{
sprintf(str,"%02d", (UINT16)tmp1);//对比度
ST7565_Paint_MixStr(18,88,str,(Select==0)?1:0);
}
if(Select==1 || Last_Select==1 || RePaint_Menu==1)//选择了第1项
{
sprintf(str,"%01d", (UINT16)(tmp2/60));//
ST7565_Paint_MixStr(32,67,str,(Select==1)?1:0);//时
sprintf(str,"%02d", (UINT16)(tmp2%60));//
ST7565_Paint_MixStr(32,85,str,(Select==1)?1:0);//分
}
if(Select==2 || Last_Select==2 || RePaint_Menu==1)//选择了第1项
{
sprintf(str,"%02d", (UINT16)(tmp3));//
ST7565_Paint_MixStr(46,94,str,(Select==2)?1:0);//数码管对比度
}
RePaint=0;
Last_Select=Select;//保存上次的选择
ST7565_Paint_Push_Data();//刷新显示
//键盘
Key_Scan();//扫描键盘
while(Key_Trg==0)//等待按一个键
{
Key_Scan();//扫描键盘
}
if(Key_Trg & Key_Cancel) break;
if(Key_Trg & Key_Select)
{
Select>1?Select=0:Select++;
}
if(Key_Trg & Key_plus)
{
if(Select==0) (tmp1>51)?(tmp1=25):(tmp1++);//对比度
if(Select==1) (tmp2>254)?(tmp2=1):(tmp2++);//关屏时间
if(Select==2) (tmp3>6)?(tmp3=0):(tmp3++);
}
if(Key_Trg & Key_Minus)
{
if(Select==0) (tmp1<26)?(tmp1=52):(tmp1--);//对比度
if(Select==1) (tmp2<2)?(tmp2=255):(tmp2--);//关屏时间
if(Select==2) (tmp3<1)?(tmp3=7):(tmp3--);
}
if(Key_Trg & Key_Ok)
{
Roms[0]=tmp1;//对比度的值
Roms[1]=tmp2;//关屏时间的值
Roms[31]=tmp3;
SaveOfSetting();//保存设置
break;
}
ST7565_Set_Contrast(tmp1);//即时做出对比度的设定
TM1638_SetContrast(tmp3);//立即更改TM1638的对比度
}
}
复制代码
加载中...
查看其它18个回答
一周热门
更多
>
相关问题
【东软载波ESF0654 PDS开发板活动】开箱
1 个回答
东软载波ESF0654 PDS开发板外部中断
1 个回答
东软载波ESF0654 PDS开发板高级控制定时器AD16C4T
1 个回答
用串口调试助手为什么只能在hex模式接收发送而在文本模式不行
9 个回答
触摸芯片SC02B/SC04B在地砖灯的设计方案
1 个回答
相关文章
51单片机与蓝牙模块连接
0个评论
51单片机的硬件结构
0个评论
基于51单片机的无线遥控器制作
0个评论
51单片机 AD转换
0个评论
51单片机数码管递增显示
0个评论
如何实现对单片机寄存器的访问
0个评论
基于51单片机的指纹密码锁
0个评论
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
51单片机
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
- static void Menu_Screen_Set(void)//屏幕设定
- {
- UINT8 xdata Select=0;
- UINT8 xdata Last_Select=0;
- bit RePaint_Menu=1;
-
- UINT8 xdata str[4];
- UINT8 xdata tmp1=Roms[0];
- UINT8 xdata tmp2=Roms[1];
- UINT8 xdata tmp3=Roms[31];
- bit RePaint=1;//是否重画整个菜单项
- while(1)
- {
- if(RePaint==1)
- {
- ST7565_Paint_RectangleFill(0,0,64,128,0);//清屏
- ST7565_Paint_Rectangle(0,8,64,112,1);//边框
- ST7565_Paint_HLine(13,8,112,1);//横线
- ST7565_Paint_MixStr(1,40,"屏幕设定",0);
- ST7565_Paint_MixStr(18,28,"屏幕对比度",0);
- ST7565_Paint_MixStr(32,19,"关闭时间 时 分",0);
- ST7565_Paint_MixStr(46,22,"数码管对比度",0);
- ST7565_Paint_HLine(30,88,12,1);//
- ST7565_Paint_HLine(44,67,6,1);//
- ST7565_Paint_HLine(44,85,12,1);//
- ST7565_Paint_HLine(58,94,12,1);//
- }
- if(Select==0 || Last_Select==0 || RePaint_Menu==1)//选择了第1项
- {
- sprintf(str,"%02d", (UINT16)tmp1);//对比度
- ST7565_Paint_MixStr(18,88,str,(Select==0)?1:0);
- }
-
- if(Select==1 || Last_Select==1 || RePaint_Menu==1)//选择了第1项
- {
- sprintf(str,"%01d", (UINT16)(tmp2/60));//
- ST7565_Paint_MixStr(32,67,str,(Select==1)?1:0);//时
- sprintf(str,"%02d", (UINT16)(tmp2%60));//
- ST7565_Paint_MixStr(32,85,str,(Select==1)?1:0);//分
- }
-
- if(Select==2 || Last_Select==2 || RePaint_Menu==1)//选择了第1项
- {
- sprintf(str,"%02d", (UINT16)(tmp3));//
- ST7565_Paint_MixStr(46,94,str,(Select==2)?1:0);//数码管对比度
- }
-
- RePaint=0;
- Last_Select=Select;//保存上次的选择
- ST7565_Paint_Push_Data();//刷新显示
- //键盘
- Key_Scan();//扫描键盘
- while(Key_Trg==0)//等待按一个键
- {
- Key_Scan();//扫描键盘
- }
- if(Key_Trg & Key_Cancel) break;
- if(Key_Trg & Key_Select)
- {
- Select>1?Select=0:Select++;
- }
- if(Key_Trg & Key_plus)
- {
- if(Select==0) (tmp1>51)?(tmp1=25):(tmp1++);//对比度
- if(Select==1) (tmp2>254)?(tmp2=1):(tmp2++);//关屏时间
- if(Select==2) (tmp3>6)?(tmp3=0):(tmp3++);
- }
- if(Key_Trg & Key_Minus)
- {
- if(Select==0) (tmp1<26)?(tmp1=52):(tmp1--);//对比度
- if(Select==1) (tmp2<2)?(tmp2=255):(tmp2--);//关屏时间
- if(Select==2) (tmp3<1)?(tmp3=7):(tmp3--);
- }
- if(Key_Trg & Key_Ok)
- {
- Roms[0]=tmp1;//对比度的值
- Roms[1]=tmp2;//关屏时间的值
- Roms[31]=tmp3;
- SaveOfSetting();//保存设置
- break;
- }
- ST7565_Set_Contrast(tmp1);//即时做出对比度的设定
- TM1638_SetContrast(tmp3);//立即更改TM1638的对比度
- }
- }
复制代码一周热门 更多>