找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 22714|回复: 85
收起左侧

51单片机+12864上面实现3级菜单显示和切换

  [复制链接]
ID:51124 发表于 2013-6-20 23:24 | 显示全部楼层 |阅读模式
用STC12系列的单片机在12864上面实现3级菜单显示!其中显示的图片是用坛子里一网友的LOG改装了的,但忘记是谁了。感谢那网友。



优酷视频地址,感兴趣的朋友可以去看看。
代码可能不是很优化,望各位网友拍砖的时候手下留情。
是不是图片太大了,怎么传上去后图片的颜色都变了。感兴趣的还是去看看视频吧视频的效果比图片好。

程序和LOG都在此压缩包里 12864三级菜单.rar (175.29 KB, 下载次数: 886)

评分

参与人数 3黑币 +14 收起 理由
almsy + 3 赞一个!
sky日耀 + 7 很给力!
wangyin + 4 赞一个!

查看全部评分

回复

使用道具 举报

ID:235868 发表于 2017-9-30 20:09 | 显示全部楼层
切换了几个界面,液晶屏突然什么都不显示了;复位也不行,断电重启一下换了几个界面,又不行啦,是什么问题呀
回复

使用道具 举报

ID:51124 发表于 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]);		
	}
}


回复

使用道具 举报

ID:51124 发表于 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
回复

使用道具 举报

ID:51265 发表于 2013-6-25 22:14 | 显示全部楼层
下载看看,很强大的样子
回复

使用道具 举报

ID:33668 发表于 2013-11-20 21:51 | 显示全部楼层
下载看看,很强大的样子
回复

使用道具 举报

ID:56710 发表于 2013-11-23 10:03 | 显示全部楼层
好像很强大
回复

使用道具 举报

ID:56710 发表于 2013-11-23 10:04 | 显示全部楼层
下一个看看
回复

使用道具 举报

ID:56710 发表于 2013-11-23 10:05 | 显示全部楼层
谢谢楼主的分享
回复

使用道具 举报

ID:56710 发表于 2013-11-23 10:05 | 显示全部楼层
真心的感谢楼主
回复

使用道具 举报

ID:57273 发表于 2013-11-26 00:06 | 显示全部楼层
谢谢楼主分享,学习一下
回复

使用道具 举报

ID:57984 发表于 2013-12-18 12:09 | 显示全部楼层
非常不错,谢谢楼主,学习了
回复

使用道具 举报

ID:55219 发表于 2013-12-21 20:46 | 显示全部楼层
非常不错的东东。。。。
回复

使用道具 举报

ID:27161 发表于 2013-12-23 00:32 | 显示全部楼层
学习学习,谢谢啦。
回复

使用道具 举报

ID:55772 发表于 2013-12-23 02:11 | 显示全部楼层
下载看看,很强大的样子
回复

使用道具 举报

ID:58995 发表于 2014-2-1 20:59 | 显示全部楼层
O(∩_∩)O谢谢
回复

使用道具 举报

ID:58796 发表于 2014-3-6 20:35 | 显示全部楼层
谢谢学习了
回复

使用道具 举报

ID:59072 发表于 2014-3-11 09:24 来自手机 | 显示全部楼层
太强大了,学习了!
回复

使用道具 举报

ID:59319 发表于 2014-3-14 17:23 | 显示全部楼层
看看 感谢分享
回复

使用道具 举报

ID:59780 发表于 2014-3-26 10:53 | 显示全部楼层
强   人
回复

使用道具 举报

ID:60316 发表于 2014-4-3 18:29 | 显示全部楼层
下载看看,谢谢分享。
回复

使用道具 举报

ID:46750 发表于 2014-4-6 13:34 | 显示全部楼层
正需要,强顶!!!!
回复

使用道具 举报

ID:52249 发表于 2014-4-17 21:41 | 显示全部楼层

努力学习中 
努力学习中 
回复

使用道具 举报

ID:58110 发表于 2014-4-17 22:09 | 显示全部楼层
真是不错,很强大,学习了
回复

使用道具 举报

ID:61339 发表于 2014-5-2 02:27 | 显示全部楼层
很不错,谢谢分享
回复

使用道具 举报

ID:61761 发表于 2014-5-13 14:55 | 显示全部楼层

学习学习,谢谢啦。
回复

使用道具 举报

ID:62636 发表于 2014-6-5 14:02 | 显示全部楼层
下载看看
回复

使用道具 举报

ID:64825 发表于 2014-8-7 09:30 | 显示全部楼层
不错,学习下,
回复

使用道具 举报

ID:64910 发表于 2014-8-10 06:57 | 显示全部楼层
好好好
回复

使用道具 举报

ID:65585 发表于 2014-9-5 15:57 | 显示全部楼层
很不错,正好要用到!
回复

使用道具 举报

ID:47760 发表于 2014-9-13 05:29 | 显示全部楼层
感谢楼主分享
回复

使用道具 举报

ID:66181 发表于 2014-9-15 10:49 | 显示全部楼层
谢谢分享
回复

使用道具 举报

ID:67235 发表于 2014-10-11 15:23 | 显示全部楼层
很强大的样子
回复

使用道具 举报

ID:67573 发表于 2014-10-20 20:42 | 显示全部楼层
下载来研究研究
回复

使用道具 举报

ID:75994 发表于 2015-4-2 20:07 | 显示全部楼层
好资料!
回复

使用道具 举报

ID:77907 发表于 2015-4-24 15:18 | 显示全部楼层
刚好需要,谢啦~
回复

使用道具 举报

ID:35471 发表于 2015-6-7 19:58 | 显示全部楼层
弄二级菜单两天了,实在是弄不出来了。参考下!
回复

使用道具 举报

ID:83349 发表于 2015-6-27 19:35 | 显示全部楼层
xugang 发表于 2013-6-20 23:42
**** 作者被禁止或删除 内容自动屏蔽 ****

赞两个
回复

使用道具 举报

ID:86621 发表于 2015-8-7 18:56 | 显示全部楼层
你们都自己喜欢写头文件啊
回复

使用道具 举报

ID:57896 发表于 2015-8-7 19:08 | 显示全部楼层
支持,谢谢分享~~~~!
回复

使用道具 举报

ID:78507 发表于 2015-8-31 19:45 | 显示全部楼层
好资料
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表