标题: 51单片机+12864上面实现3级菜单显示和切换 [打印本页]
作者: xugang 时间: 2013-6-20 23:24
标题: 51单片机+12864上面实现3级菜单显示和切换
用STC12系列的单片机在12864上面实现3级菜单显示!其中显示的图片是用坛子里一网友的LOG改装了的,但忘记是谁了。感谢那网友。
http://player.youku.com/player.php/sid/XMzEwMTU5MTY0/v.swf
优酷视频地址,感兴趣的朋友可以去看看。
代码可能不是很优化,望各位网友拍砖的时候手下留情。
是不是图片太大了,怎么传上去后图片的颜色都变了。感兴趣的还是去看看视频吧视频的效果比图片好。
程序和LOG都在此压缩包里
12864三级菜单.rar
(175.29 KB, 下载次数: 914)
作者: xugang 时间: 2013-6-20 23:42
/**************************************************************
* +---------------------------------------------------+ *
* 12864三级菜单显示 *
* +---------------------------------------------------+ *
* *
* 此源码版权属 小牛 全权享有,如欲引用,敬请署名并告知 *
* 严禁随意用于商业目的,违者必究,后果自负 *
* Q Q:513696765 *
* *
* 运行环境:STC12C5A60S2单片机 12M晶振 *
* 程序说明:在12864上面实现三级菜单显示 *
**************************************************************/
#include<reg52.h>
#include<intrins.h>
#include"def.h"
#include"mode.h"
#include"fuction.h"
void main()
{
init();
while(1)
{
menucut(0,mun,table10,table0sub[0]);
menucut(1,table0,table9,table1sub[0]);
menucut(2,table1,table8,table2sub[0]);
menucut(3,table2,table7,table3sub[0]);
menucut(4,table3,table6,table4sub[0]);
menucut(5,table4,table11,table5sub[0]);
menucut(6,table5,table12,table6sub[0]);
}
}
作者: xugang 时间: 2013-6-20 23:42
#ifndef _fuction_h_
#define _fuction_h_
void init()
{
w_com(0x01); //清屏
w_com(0x02); //地址-》00H
w_com(0x0c); //显示状态设置
w_com(0x30); //功能设定
w_com(0x80);
w_com(0x01); //清屏
}
//——————————读忙!—————————————//
void r_busy()
{
IO=0xff;
R_S=0;
W_R=1;
E=1;
while(IO&0x80);
E=0;
}
//——————————写指令—————————————//
void w_com(uchar com)
{
r_busy();
R_S=0;
W_R=0;
E=0;
E=1;
IO=com;
E=0;
}
//——————————扩充指令——————————————//
void w_ecom(uchar ecom)
{
w_com(0x34); //选择8位数据发送,选择为扩充指令
r_busy();
R_S=0;
W_R=0;
E=0;
E=1;
IO=ecom;
E=0;
}
//——————————写数据—————————————//
void w_dat(uchar dat)
{
r_busy();
R_S=1;
W_R=0;
E=0;
E=1;
IO=dat;
E=0;
}
void delay(uchar x)
{
uchar i,j;
for(i=0;i<x;i++)
for(j=0;j<124;j++);
}
void draw_pic(uchar *pic)
{
uchar i,j;
w_com(0x01); //清屏
for(i=0;i<32;i++)
{
w_ecom(0x80+i); //扩充指令,设定绘图RAM垂直地址
w_ecom(0x80); //扩充指令,设定绘图RAM水平地址
for(j=0;j<16;j++)
{
w_dat(*(pic++));
}
}
for(i=0;i<32;i++)
{
w_ecom(0x80+i); //扩充指令,设定绘图RAM垂直地址
w_ecom(0x88); //扩充指令,设定绘图RAM水平地址
for(j=0;j<16;j++)
{
w_dat(*(pic++));
}
}
w_com(0x36);
flag=1;
}
void draw_submune(uchar *pic,uchar row) //定义两个变量*pic-->图片字模的首地址;row-->子菜单要选择的行
{
uchar i,j;
flag=0;
w_com(0x01); //清屏
for(i=0;i<32;i++)
{
w_ecom(0x80+i); //扩充指令,设定绘图RAM垂直地址
w_ecom(0x80); //扩充指令,设定绘图RAM水平地址
for(j=0;j<16;j++)
{
if((i>(16*(row-1))) && (i<(row*16)) && row<3) //用于判断LCD前32行的行反白
w_dat(~(*(pic++))); //如果是选择的反白行就反显其数据
else //否则就正常显示其数据
w_dat(*(pic++));
}
}
for(i=0;i<32;i++)
{
w_ecom(0x80+i); //扩充指令,设定绘图RAM垂直地址
w_ecom(0x88); //扩充指令,设定绘图RAM水平地址
for(j=0;j<16;j++)
{
if((i>(16*(row-3))) && (i<((row-2)*16)) && row>2) //用于判断LCD后32行的行反白
w_dat(~(*(pic++))); //如果是选择的反白行就反显其数据
else //否则就正常显示其数据
w_dat(*(pic++));
}
}
w_com(0x36);
flag=1; //子菜单显示标志位
}
void key()
{
if((s3==0) || (s2==0) )
{
delay(10);
if(s3==0)
{
temp++;
if(temp>6)
temp=0;
while(!s3);
}
else if(s2==0)
{
temp--;
if(temp>6)
temp=6;
while(!s2);
}
}
}
void keycut()
{
if((s1==0) || (s0==0) )
{
delay(10);
if(s1==0)
{
submune=1;
if(sub && subflag)
subflag1=1;
while(!s1);
}
if(submune==0)
return;
else if(s0==0)
{
sub=0;
submune=0;
subflag1=0;
submune1=1;
if(sub1)
{
submune=1;
sub1=0;
sub=0;
flag=1;
subflag=0;
}
else
{
flag=0;
submune=0;
subflag=0;
}
while(!s0);
}
}
}
void key_submune()
{
if((s3==0) || (s2==0))
{
delay(10);
if(s3==0)
{
submune1++;
if(submune1>4)
submune1=1;
while(!s3);
}
else if(s2==0)
{
submune1--;
if(submune1==0)
submune1=4;
while(!s2);
}
subflag=0;
}
}
void key_submune1()
{
if((s3==0) || (s2==0))
{
delay(10);
if(s3==0)
{
submune2++;
if(submune2>4)
submune2=1;
while(!s3);
}
else if(s2==0)
{
submune2--;
if(submune2==0)
submune2=4;
while(!s2);
}
subflag=0;
}
}
/****************************************************************************
* num-->第一级菜单的标志位;*add-->第一级菜单的图片的地址入口 *
* *sbuadd第二级菜单的图片的地址入口;*sbuadd1第三级菜单的图片的地址入口; *
*****************************************************************************/
void menucut(uchar num,uchar *add,uchar *sbuadd,uchar *sbuadd1)
{
while(num==temp) //第一级菜单的标志位判断条件
{
draw_pic(add); //画第一级菜单的图形界面
/*第一级菜单界面等待时的要支持第一级菜单的切换和第二级界面的进入和返回 */
while((num==temp) && flag)
{
key(); //第一级菜单界面的切换
keycut(); //第二级界面的进入
while((num==temp) && (submune==1)) //第二级菜单的标志位判断条件
{
draw_submune(sbuadd,submune1); //画第二级菜单的图形界面
subflag=1; //画完第二级菜单的图形界面要置位进入可以进行界面切换的循环
/*第二级菜单界面等待时的要支持第二级菜单的切换和第三级界面的进入和返回 */
while((num==temp) && (submune==1) && subflag)
{
sub=1; //第三级菜单的标志位用于区分其级数
keycut(); //第二级菜单界面的进入第三级菜单切换和返回第一级菜单
key_submune(); //第二级界面的进入
while(subflag1 && sub)
{
/*第三级菜单是一个二维数组所以在第二级进入第三级的时候要根据第二级的标志位选择进入第三级的的地址入口*/
draw_submune(sbuadd1+((submune1-1)*1024),submune2); //画第三级菜单的图形界面
subflag=1;
sub1=1; //画完第三级菜单的图形界面要置位进入可以进行界面切换的循环
while(subflag1 && sub && subflag)
{
key_submune1(); //第三级界面的切换
keycut(); //第三级界面的返回
}
}
}
}
}
}
}
#endif
作者: 心__空灵 时间: 2013-6-25 22:14
下载看看,很强大的样子
作者: dyun1988 时间: 2013-11-20 21:51
下载看看,很强大的样子
作者: abccb 时间: 2013-11-23 10:03
好像很强大
作者: abccb 时间: 2013-11-23 10:04
下一个看看
作者: abccb 时间: 2013-11-23 10:05
谢谢楼主的分享
作者: abccb 时间: 2013-11-23 10:05
真心的感谢楼主
作者: xiaokangkp 时间: 2013-11-26 00:06
谢谢楼主分享,学习一下

作者: zgmzgm 时间: 2013-12-18 12:09
非常不错,谢谢楼主,学习了
作者: yxz1140 时间: 2013-12-21 20:46
非常不错的东东。。。。
作者: xjlfh 时间: 2013-12-23 00:32
学习学习,谢谢啦。
作者: azhiarm9 时间: 2013-12-23 02:11
下载看看,很强大的样子
作者: daizhi1970 时间: 2014-2-1 20:59
O(∩_∩)O谢谢
作者: zhangxiaoljs 时间: 2014-3-6 20:35
谢谢学习了
作者: yhu168 时间: 2014-3-11 09:24
太强大了,学习了!
作者: zhou920017 时间: 2014-3-14 17:23
看看 感谢分享
作者: 小新灬 时间: 2014-3-26 10:53
强 人
作者: lvdianguang 时间: 2014-4-3 18:29
下载看看,谢谢分享。
作者: zenghl 时间: 2014-4-6 13:34
正需要,强顶!!!!
作者: 930417801 时间: 2014-4-17 21:41
努力学习中
努力学习中
作者: lyMarvin 时间: 2014-4-17 22:09
真是不错,很强大,学习了
作者: 稻草人‘mirror 时间: 2014-5-2 02:27
很不错,谢谢分享
作者: delux3344 时间: 2014-5-13 14:55
学习学习,谢谢啦。
作者: yy8881 时间: 2014-6-5 14:02
下载看看
作者: qzsulin 时间: 2014-8-7 09:30
不错,学习下,
作者: kpdz009 时间: 2014-8-10 06:57
好好好
作者: ladeng0303 时间: 2014-9-5 15:57
很不错,正好要用到!
作者: 周安松 时间: 2014-9-13 05:29
感谢楼主分享
作者: heam 时间: 2014-9-15 10:49
谢谢分享
作者: tjj163 时间: 2014-10-11 15:23
很强大的样子
作者: blj178 时间: 2014-10-20 20:42
下载来研究研究
作者: weichao4808335 时间: 2015-4-2 20:07
好资料!
作者: 小天爱小葱 时间: 2015-4-24 15:18
刚好需要,谢啦~
作者: 二十出头 时间: 2015-6-7 19:58
弄二级菜单两天了,实在是弄不出来了。参考下!
作者: jasone 时间: 2015-6-27 19:35
赞两个
作者: 1678 时间: 2015-8-7 18:56
你们都自己喜欢写头文件啊
作者: engcyh 时间: 2015-8-7 19:08
支持,谢谢分享~~~~!
作者: hyq2012510 时间: 2015-8-31 19:45
好资料
作者: 邰夏留 时间: 2015-9-11 19:23
电路呢???????
作者: 北极光2015 时间: 2015-10-5 18:15
谢谢分享。正在学习多级菜单!
作者: ababzx2199 时间: 2015-10-22 10:35
好像很强大的样子
作者: xiao23123 时间: 2015-11-5 15:08
不知道这个图片是用什么软件处理的
作者: aj1139420688 时间: 2016-3-17 09:43
如果用串行口的lcd12864会更简单
作者: 398231290 时间: 2016-3-18 15:26
厉害,好厉害
作者: 7547163 时间: 2016-5-2 09:58
感谢分享,正要寻找呢
作者: guangyong_xia 时间: 2016-5-25 19:42
看起来不错,正要学习编写菜单,先收藏了,谢谢!
作者: guangyong_xia 时间: 2016-5-25 19:45
看起来不错,正要学习菜单,先收藏了,谢谢!
作者: join22life 时间: 2016-7-1 15:28
五个币希望能用
作者: 状元郎 时间: 2016-7-1 23:52
新手,寻找,老司机带带我
作者: 状元郎 时间: 2016-7-1 23:53
感谢楼主怎么不能下载
作者: wojjh 时间: 2016-7-19 09:29
非常感谢楼主的分享,下载下来学习一下~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
作者: duan316 时间: 2016-7-19 11:18
学习了厉害
作者: fengqishi 时间: 2016-8-21 21:46
怎么在中断中调回显示程序啊
作者: cvi670 时间: 2016-8-22 14:20
干的漂亮楼主
作者: 曹世鹏 时间: 2016-9-21 16:37
一层层嵌套的。希望能够用结构体和指针来做。那样不会这么的繁琐。
作者: linnyshow 时间: 2016-11-5 13:59
没有黑币。可惜了。。。
作者: billtest36 时间: 2017-4-12 23:30
太好了 感謝分享
作者: dawei1935 时间: 2017-4-24 19:19
谢谢楼主
作者: jamyg 时间: 2017-4-27 09:00
好资料,值得学习
作者: 1182687819 时间: 2017-9-30 20:09
切换了几个界面,液晶屏突然什么都不显示了;复位也不行,断电重启一下换了几个界面,又不行啦,是什么问题呀
作者: Huyssen 时间: 2017-10-5 17:10
正需要,很感谢楼主
作者: lq115116 时间: 2017-11-29 12:19
谢谢分享


作者: huajiata 时间: 2018-1-9 10:47
多谢分享


作者: j172756239 时间: 2018-4-10 10:20
牛逼!!很赞
作者: yulin3192 时间: 2018-4-17 13:31
谢谢楼主的分享
作者: 31415ydl 时间: 2018-6-23 19:53
支持楼主
作者: 31415ydl 时间: 2018-6-23 19:54
多谢分享
作者: zhsir 时间: 2018-7-26 11:00
功能强大,想法不错
作者: Longan.Wang 时间: 2018-8-7 08:34
参考一下,谢谢!
作者: guanzhongmou 时间: 2018-8-22 16:26
好资料~!
作者: luhuayiw 时间: 2018-10-15 09:41
学习了,多谢分享!
作者: hong19851024 时间: 2018-10-16 15:57
好资料


作者: Rorschach 时间: 2018-11-19 19:14
好啊,可惜黑币又没了
作者: c51stm32 时间: 2018-11-23 09:58
太强大了,学习了!
作者: EEEEELI 时间: 2018-11-23 21:55
受用,谢谢
作者: zeze10000 时间: 2018-12-7 00:07
菜单不错,学习一下
作者: gnez 时间: 2018-12-12 12:28
感谢分享!!!!!
作者: pianer 时间: 2018-12-20 23:53
为什么我烧到板子上什么都不显示呀
作者: doublecityggb 时间: 2018-12-27 08:48
很不错。
作者: 3290700544 时间: 2019-7-17 08:41
膜拜大神 好厉害 佩服
作者: tfq1 时间: 2019-11-3 15:37
我想问一下LCD12864主界面5秒后怎么显示其他界面
作者: 1481714970 时间: 2019-11-3 18:33
赞一个 很给力
作者: 西点钟灵毓秀 时间: 2019-11-3 20:06
下载在哪里?
作者: kaiyunliu 时间: 2020-5-14 16:13
感谢分享
作者: freemusic8 时间: 2024-8-27 12:35
下载来研究研究
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |