找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 30467|回復(fù): 86
打印 上一主題 下一主題
收起左側(cè)

51單片機(jī)+12864上面實(shí)現(xiàn)3級(jí)菜單顯示和切換

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:51124 發(fā)表于 2013-6-20 23:24 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
用STC12系列的單片機(jī)在12864上面實(shí)現(xiàn)3級(jí)菜單顯示!其中顯示的圖片是用壇子里一網(wǎng)友的LOG改裝了的,但忘記是誰了。感謝那網(wǎng)友。



優(yōu)酷視頻地址,感興趣的朋友可以去看看。
代碼可能不是很優(yōu)化,望各位網(wǎng)友拍磚的時(shí)候手下留情。
是不是圖片太大了,怎么傳上去后圖片的顏色都變了。感興趣的還是去看看視頻吧視頻的效果比圖片好。

程序和LOG都在此壓縮包里 12864三級(jí)菜單.rar (175.29 KB, 下載次數(shù): 914)





















評(píng)分

參與人數(shù) 3黑幣 +14 收起 理由
almsy + 3 贊一個(gè)!
sky日耀 + 7 很給力!
wangyin + 4 贊一個(gè)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏11 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報(bào)

來自 2#
ID:235868 發(fā)表于 2017-9-30 20:09 | 只看該作者
切換了幾個(gè)界面,液晶屏突然什么都不顯示了;復(fù)位也不行,斷電重啟一下?lián)Q了幾個(gè)界面,又不行啦,是什么問題呀
回復(fù)

使用道具 舉報(bào)

板凳
ID:51124 發(fā)表于 2013-6-20 23:42 | 只看該作者
/**************************************************************
*	+---------------------------------------------------+	  *
*   			   12864三級(jí)菜單顯示						  *
*	+---------------------------------------------------+  	  *
*															  *
*  此源碼版權(quán)屬 小牛 全權(quán)享有,如欲引用,敬請(qǐng)署名并告知		  *
*        嚴(yán)禁隨意用于商業(yè)目的,違者必究,后果自負(fù)			  *
*             			Q Q:513696765 						  *
*			       											  *
*  運(yùn)行環(huán)境:STC12C5A60S2單片機(jī) 12M晶振						  *
*  程序說明:在12864上面實(shí)現(xiàn)三級(jí)菜單顯示					  *
**************************************************************/
#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]);		
	}
}


回復(fù)

使用道具 舉報(bào)

地板
ID:51124 發(fā)表于 2013-6-20 23:42 | 只看該作者
#ifndef _fuction_h_
#define _fuction_h_

void init()
{
	w_com(0x01);	//清屏
	w_com(0x02);	//地址-》00H
	w_com(0x0c);	//顯示狀態(tài)設(shè)置
	w_com(0x30);	//功能設(shè)定
	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;
}
//——————————擴(kuò)充指令——————————————//
void w_ecom(uchar ecom)
{
	w_com(0x34); //選擇8位數(shù)據(jù)發(fā)送,選擇為擴(kuò)充指令 
	r_busy();
	R_S=0;
	W_R=0;
	E=0;
	E=1;
	IO=ecom;
	E=0;
}
//——————————寫數(shù)據(jù)—————————————//
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);		   //擴(kuò)充指令,設(shè)定繪圖RAM垂直地址
		w_ecom(0x80);		   //擴(kuò)充指令,設(shè)定繪圖RAM水平地址
		for(j=0;j<16;j++)
		{
			w_dat(*(pic++));
		}
	}

	for(i=0;i<32;i++)
	{	
		w_ecom(0x80+i);			//擴(kuò)充指令,設(shè)定繪圖RAM垂直地址
		w_ecom(0x88);			//擴(kuò)充指令,設(shè)定繪圖RAM水平地址
		for(j=0;j<16;j++)
		{
		
			w_dat(*(pic++));
		}
	}
		
	w_com(0x36);
	flag=1;
}

void draw_submune(uchar *pic,uchar row)		   //定義兩個(gè)變量*pic-->圖片字模的首地址;row-->子菜單要選擇的行
{
	uchar i,j;
	flag=0; 
	w_com(0x01);	//清屏

	for(i=0;i<32;i++)
	{	
		w_ecom(0x80+i);		   //擴(kuò)充指令,設(shè)定繪圖RAM垂直地址
		w_ecom(0x80);		   //擴(kuò)充指令,設(shè)定繪圖RAM水平地址
		for(j=0;j<16;j++)
		{
			if((i>(16*(row-1))) && (i<(row*16)) && row<3)	 //用于判斷LCD前32行的行反白
			w_dat(~(*(pic++)));								 //如果是選擇的反白行就反顯其數(shù)據(jù)
			else											 //否則就正常顯示其數(shù)據(jù)
			w_dat(*(pic++));
		}
	}

	for(i=0;i<32;i++)
	{	
		w_ecom(0x80+i);			//擴(kuò)充指令,設(shè)定繪圖RAM垂直地址
		w_ecom(0x88);			//擴(kuò)充指令,設(shè)定繪圖RAM水平地址
		for(j=0;j<16;j++)
		{
		
			if((i>(16*(row-3))) && (i<((row-2)*16)) && row>2)		//用于判斷LCD后32行的行反白
			w_dat(~(*(pic++)));										//如果是選擇的反白行就反顯其數(shù)據(jù)										 		
			else													//否則就正常顯示其數(shù)據(jù)
			w_dat(*(pic++));
		}
	}
		
	w_com(0x36);										   
	flag=1;													   		//子菜單顯示標(biāo)志位	
}


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-->第一級(jí)菜單的標(biāo)志位;*add-->第一級(jí)菜單的圖片的地址入口			*
*	*sbuadd第二級(jí)菜單的圖片的地址入口;*sbuadd1第三級(jí)菜單的圖片的地址入口;	*
*****************************************************************************/
void menucut(uchar num,uchar *add,uchar *sbuadd,uchar *sbuadd1)	  
{
	while(num==temp)		  			//第一級(jí)菜單的標(biāo)志位判斷條件
	{
		draw_pic(add);		  			//畫第一級(jí)菜單的圖形界面

/*第一級(jí)菜單界面等待時(shí)的要支持第一級(jí)菜單的切換和第二級(jí)界面的進(jìn)入和返回 */
		while((num==temp) && flag)		
		{
			key();						//第一級(jí)菜單界面的切換
			keycut();					//第二級(jí)界面的進(jìn)入
			while((num==temp) && (submune==1)) //第二級(jí)菜單的標(biāo)志位判斷條件
			{
				draw_submune(sbuadd,submune1);	//畫第二級(jí)菜單的圖形界面
				subflag=1;						//畫完第二級(jí)菜單的圖形界面要置位進(jìn)入可以進(jìn)行界面切換的循環(huán)
/*第二級(jí)菜單界面等待時(shí)的要支持第二級(jí)菜單的切換和第三級(jí)界面的進(jìn)入和返回 */
				while((num==temp) && (submune==1) && subflag)
				{
					sub=1;				 //第三級(jí)菜單的標(biāo)志位用于區(qū)分其級(jí)數(shù)
					keycut();			 //第二級(jí)菜單界面的進(jìn)入第三級(jí)菜單切換和返回第一級(jí)菜單
					key_submune();		 //第二級(jí)界面的進(jìn)入
					while(subflag1 && sub)
					{
/*第三級(jí)菜單是一個(gè)二維數(shù)組所以在第二級(jí)進(jìn)入第三級(jí)的時(shí)候要根據(jù)第二級(jí)的標(biāo)志位選擇進(jìn)入第三級(jí)的的地址入口*/
						draw_submune(sbuadd1+((submune1-1)*1024),submune2);	  //畫第三級(jí)菜單的圖形界面
						subflag=1;
						sub1=1;		  //畫完第三級(jí)菜單的圖形界面要置位進(jìn)入可以進(jìn)行界面切換的循環(huán)
						while(subflag1 && sub && subflag)
						{
							 key_submune1();   //第三級(jí)界面的切換
							 keycut();		   //第三級(jí)界面的返回
						}		
					}
				}		
			}
		}
	}
}

#endif
回復(fù)

使用道具 舉報(bào)

5#
ID:51265 發(fā)表于 2013-6-25 22:14 | 只看該作者
下載看看,很強(qiáng)大的樣子
回復(fù)

使用道具 舉報(bào)

6#
ID:33668 發(fā)表于 2013-11-20 21:51 | 只看該作者
下載看看,很強(qiáng)大的樣子
回復(fù)

使用道具 舉報(bào)

7#
ID:56710 發(fā)表于 2013-11-23 10:03 | 只看該作者
好像很強(qiáng)大
回復(fù)

使用道具 舉報(bào)

8#
ID:56710 發(fā)表于 2013-11-23 10:04 | 只看該作者
下一個(gè)看看
回復(fù)

使用道具 舉報(bào)

9#
ID:56710 發(fā)表于 2013-11-23 10:05 | 只看該作者
謝謝樓主的分享
回復(fù)

使用道具 舉報(bào)

10#
ID:56710 發(fā)表于 2013-11-23 10:05 | 只看該作者
真心的感謝樓主
回復(fù)

使用道具 舉報(bào)

11#
ID:57273 發(fā)表于 2013-11-26 00:06 | 只看該作者
謝謝樓主分享,學(xué)習(xí)一下
回復(fù)

使用道具 舉報(bào)

12#
ID:57984 發(fā)表于 2013-12-18 12:09 | 只看該作者
非常不錯(cuò),謝謝樓主,學(xué)習(xí)了
回復(fù)

使用道具 舉報(bào)

13#
ID:55219 發(fā)表于 2013-12-21 20:46 | 只看該作者
非常不錯(cuò)的東東。。。。
回復(fù)

使用道具 舉報(bào)

14#
ID:27161 發(fā)表于 2013-12-23 00:32 | 只看該作者
學(xué)習(xí)學(xué)習(xí),謝謝啦。
回復(fù)

使用道具 舉報(bào)

15#
ID:55772 發(fā)表于 2013-12-23 02:11 | 只看該作者
下載看看,很強(qiáng)大的樣子
回復(fù)

使用道具 舉報(bào)

16#
ID:58995 發(fā)表于 2014-2-1 20:59 | 只看該作者
O(∩_∩)O謝謝
回復(fù)

使用道具 舉報(bào)

17#
ID:58796 發(fā)表于 2014-3-6 20:35 | 只看該作者
謝謝學(xué)習(xí)了
回復(fù)

使用道具 舉報(bào)

18#
ID:59072 發(fā)表于 2014-3-11 09:24 來自手機(jī) | 只看該作者
太強(qiáng)大了,學(xué)習(xí)了!
回復(fù)

使用道具 舉報(bào)

19#
ID:59319 發(fā)表于 2014-3-14 17:23 | 只看該作者
看看 感謝分享
回復(fù)

使用道具 舉報(bào)

20#
ID:59780 發(fā)表于 2014-3-26 10:53 | 只看該作者
強(qiáng)   人
回復(fù)

使用道具 舉報(bào)

21#
ID:60316 發(fā)表于 2014-4-3 18:29 | 只看該作者
下載看看,謝謝分享。
回復(fù)

使用道具 舉報(bào)

22#
ID:46750 發(fā)表于 2014-4-6 13:34 | 只看該作者
正需要,強(qiáng)頂。。。
回復(fù)

使用道具 舉報(bào)

23#
ID:52249 發(fā)表于 2014-4-17 21:41 | 只看該作者

努力學(xué)習(xí)中 
努力學(xué)習(xí)中 
回復(fù)

使用道具 舉報(bào)

24#
ID:58110 發(fā)表于 2014-4-17 22:09 | 只看該作者
真是不錯(cuò),很強(qiáng)大,學(xué)習(xí)了
回復(fù)

使用道具 舉報(bào)

25#
ID:61339 發(fā)表于 2014-5-2 02:27 | 只看該作者
很不錯(cuò),謝謝分享
回復(fù)

使用道具 舉報(bào)

26#
ID:61761 發(fā)表于 2014-5-13 14:55 | 只看該作者

學(xué)習(xí)學(xué)習(xí),謝謝啦。
回復(fù)

使用道具 舉報(bào)

27#
ID:62636 發(fā)表于 2014-6-5 14:02 | 只看該作者
下載看看
回復(fù)

使用道具 舉報(bào)

28#
ID:64825 發(fā)表于 2014-8-7 09:30 | 只看該作者
不錯(cuò),學(xué)習(xí)下,
回復(fù)

使用道具 舉報(bào)

29#
ID:64910 發(fā)表于 2014-8-10 06:57 | 只看該作者
好好好
回復(fù)

使用道具 舉報(bào)

30#
ID:65585 發(fā)表于 2014-9-5 15:57 | 只看該作者
很不錯(cuò),正好要用到!
回復(fù)

使用道具 舉報(bào)

31#
ID:47760 發(fā)表于 2014-9-13 05:29 | 只看該作者
感謝樓主分享
回復(fù)

使用道具 舉報(bào)

32#
ID:66181 發(fā)表于 2014-9-15 10:49 | 只看該作者
謝謝分享
回復(fù)

使用道具 舉報(bào)

33#
ID:67235 發(fā)表于 2014-10-11 15:23 | 只看該作者
很強(qiáng)大的樣子
回復(fù)

使用道具 舉報(bào)

34#
ID:67573 發(fā)表于 2014-10-20 20:42 | 只看該作者
下載來研究研究
回復(fù)

使用道具 舉報(bào)

35#
ID:75994 發(fā)表于 2015-4-2 20:07 | 只看該作者
好資料!
回復(fù)

使用道具 舉報(bào)

36#
ID:77907 發(fā)表于 2015-4-24 15:18 | 只看該作者
剛好需要,謝啦~
回復(fù)

使用道具 舉報(bào)

37#
ID:35471 發(fā)表于 2015-6-7 19:58 | 只看該作者
弄二級(jí)菜單兩天了,實(shí)在是弄不出來了。參考下!
回復(fù)

使用道具 舉報(bào)

38#
ID:83349 發(fā)表于 2015-6-27 19:35 | 只看該作者
xugang 發(fā)表于 2013-6-20 23:42
**** 作者被禁止或刪除 內(nèi)容自動(dòng)屏蔽 ****

贊兩個(gè)
回復(fù)

使用道具 舉報(bào)

39#
ID:86621 發(fā)表于 2015-8-7 18:56 | 只看該作者
你們都自己喜歡寫頭文件啊
回復(fù)

使用道具 舉報(bào)

40#
ID:57896 發(fā)表于 2015-8-7 19:08 | 只看該作者
支持,謝謝分享~~~~!
回復(fù)

使用道具 舉報(bào)

41#
ID:78507 發(fā)表于 2015-8-31 19:45 | 只看該作者
好資料
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表