標題: 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)
2013-6-20 23:25 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
022153j8hohxja0a9t9et0.jpg (47.19 KB, 下載次數: 208)
下載附件
2013-6-20 23:33 上傳
022153v81wgqmxvv14w44r.jpg (45.13 KB, 下載次數: 218)
下載附件
2013-6-20 23:33 上傳
022154lcbok0ncnlab7ika.jpg (46.98 KB, 下載次數: 176)
下載附件
2013-6-20 23:33 上傳
022155sm11x0d1uatdnatn.jpg (45.93 KB, 下載次數: 199)
下載附件
2013-6-20 23:33 上傳
022156szzmhm7qdmph6hzu.jpg (46.31 KB, 下載次數: 195)
下載附件
2013-6-20 23:33 上傳
022157rz8vpik8vn0fhin7.jpg (46.44 KB, 下載次數: 190)
下載附件
2013-6-20 23:33 上傳
作者: 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://m.raoushi.com/bbs/) |
Powered by Discuz! X3.1 |