久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
stm8的12864菜單程序 反白滾動菜單
[打印本頁]
作者:
XD1860
時間:
2017-12-4 20:42
標題:
stm8的12864菜單程序 反白滾動菜單
通過移植51單片機的菜單顯示程序,成功顯示并增加反白滾動 菜單
0.png
(7.38 KB, 下載次數: 35)
下載附件
2017-12-4 23:53 上傳
單片機源程序如下:
#include"stm8s.h"
#include"stm8s_gpio.h"
#include"Cry12864.h"
uchar curr=1,currold;
uchar curr_flag,currold_flag;
uchar curr_flag1,currold_flag1;
uchar curr_flag2,currold_flag2;
uchar flag,flag1,flag2;
uchar user16x16[]={ 0x00,0x00,0x20,0x00,0x30,0x00,0x38,0x00,0x3C,0x00,0x3E,0x00,0x3F,0x00,0x3F,0x80,
0x3F,0xC0,0x3F,0x80,0x3F,0x00,0x3E,0x00,0x3C,0x00,0x38,0x00,0x30,0x00,0x20,0x00,
};
unsigned char *MainMenu[]=
{
{" 功能菜單"},
{"登錄系統"},
{"電壓顯示一"},
{"電壓顯示二"},
};
unsigned char *MainMenu1[]=
{
{" 電流顯示一"},
{"電流顯示二"},
{"制作萬年歷"},
{"溫度傳感器"},
{" QQ音樂"},
{"我的圖片"},
{"本地音樂"},
{"更多應用"},
};
unsigned char *MainMenu2[8]=
{
{" 全民清賬"},
{"CF"},
{"飛機"},
{"王者榮耀"},
{" 超級瑪麗"},
{"魂斗羅"},
{"非常英雄"},
{"下一頁"},
};
unsigned char *MainMenu3[]=
{
{" 幻月后續"},
{"能否敵發送"},
{"測試的個i哦"},
{"飯店附近"},
{"大幅度"},
{"放大發送單個"},
{"地方"},
{"放大上輸給"},
};
extern const unsigned char shuzi_table[];
#define LCD_RS_H GPIOG->ODR|=0x01 //PD6拉高
#define LCD_RS_L GPIOG->ODR&=~0x01 //PD6拉低
#define LCD_RW_H GPIOG->ODR|=0x02 //PD7拉高
#define LCD_RW_L GPIOG->ODR&=~0x02 //PD7拉低
#define LCD_EN_H GPIOG->ODR|=0x04 //PD5拉高
#define LCD_EN_L GPIOG->ODR&=~0x04 //PD5拉低
#define LCD_PSB_H GPIOG->ODR|=0x08 //PD0拉高
#define LCD_CSB_L GPIOG->ODR&=~0x08 //PD0拉低
/*******************************************
函數名稱:Delay_1ms
功 能:延時約1ms的時間
參 數:無
返回值 :無
********************************************/
void Delay_1ms(void)
{
uint i,j;
for(i = 16;i > 0;i--)
for(j=10;j>0;j--);
}
/*******************************************
函數名稱:Delay_Nms
功 能:延時N個1ms的時間
參 數:n--延時長度
返回值 :無
********************************************/
void Delay_Nms(uint n)
{
uint k;
for(k = n;k > 0;k--) Delay_1ms();
}
void Io_Config(void)
{ GPIOB->DDR|=0xff; //PB端口設置為輸出
GPIOB->CR1|=0xff;//推免模式
GPIOB->CR2&=~0xff;//低速模式
GPIOG->DDR|=0xff; //PA端口設置為輸出
GPIOG->CR1|=0xff;//推免模式
GPIOG->CR2&=~0xff;//低速模式*/
}
//讀狀態,檢測忙
void check_busy(void)
{uchar busy;
do
{ LCD_RS_L;
LCD_RW_H;
LCD_EN_L;
Delay_1ms();
LCD_EN_H;
busy=GPIOB->IDR;
Delay_1ms();
LCD_EN_L;
}
while(busy&0x80);
}
/*******************************************
函數名稱:Write_Cmd
功 能:向液晶中寫控制命令
參 數:cmd--控制命令
返回值 :無
********************************************/
void Write_Cmd(uchar cmd)
{
// check_busy();
LCD_RW_L;
LCD_RS_L;
Delay_1ms();
GPIOB->ODR&=0x00;
GPIOB->ODR|=cmd;
LCD_EN_H;
Delay_1ms();
LCD_EN_L;
Delay_1ms();
}
/*******************************************
函數名稱:Write_Data
功 能:向液晶中寫顯示數據
參 數:dat--顯示數據
返回值 :無
********************************************/
void Write_Data(uchar dat)
{ // check_busy();
LCD_RW_L;
LCD_RS_H;
Delay_1ms();
GPIOB->ODR&=0x00;
GPIOB->ODR|=dat;
LCD_EN_H;
Delay_1ms();
LCD_EN_L;
Delay_1ms();
}
/*******************************************
函數名稱:Ini_Lcd
功 能:初始化液晶模塊
參 數:無
返回值 :無
********************************************/
void Ini_Lcd(void)
{ Io_Config();
LCD_PSB_H;
Delay_Nms(100);
Write_Cmd(0x30); //基本指令集
Delay_Nms(10);
Write_Cmd(0x02); // 地址歸位
Delay_Nms(10);
Write_Cmd(0x0c); //整體顯示打開,游標關閉
Delay_Nms(10);
Write_Cmd(0x01); //清除顯示
Delay_Nms(10);
Write_Cmd(0x06); //游標右移
Delay_Nms(10);
Write_Cmd(0x80); //設定顯示的起始地址
}
/*******************************************
函數名稱:Clear_GDRAM
功 能:清除液晶GDRAM中的隨機數據
參 數:無
返回值 :無
********************************************/
void Clear_GDRAM(void)
{
/* uchar i,j,k;
Write_Cmd(0x34); //打開擴展指令集
i = 0x80;
for(j = 0;j < 32;j++)
{
Write_Cmd(i++);
Write_Cmd(0x80);
for(k = 0;k < 16;k++)
{
Write_Data(0x00);
}
}
i = 0x80;
for(j = 0;j < 32;j++)
{
Write_Cmd(i++);
Write_Cmd(0x88);
for(k = 0;k < 16;k++)
{
Write_Data(0x00);
}
}
Write_Cmd(0x30); //回到基本指令集
*/
Write_Cmd(0x01);
Delay_Nms(15);
}
/*******************************************
函數名稱:Draw_PM
功 能:在整個液晶屏幕上畫圖
參 數:無
返回值 :無
********************************************/
void Draw_PM(const uchar *ptr)
{
uchar i,j,k;
Write_Cmd(0x34); //打開擴展指令集
i = 0x80;
for(j = 0;j < 32;j++)
{
Write_Cmd(i++);
Write_Cmd(0x80);
for(k = 0;k < 16;k++)
{
Write_Data(*ptr++);
}
}
i = 0x80;
for(j = 0;j < 32;j++)
{
Write_Cmd(i++);
Write_Cmd(0x88);
for(k = 0;k < 16;k++)
{
Write_Data(*ptr++);
}
}
Write_Cmd(0x36); //打開繪圖顯示
Write_Cmd(0x30); //回到基本指令集
}
/*********************************************************/
/* */
/* 設定顯示位置 */
/* */
/*********************************************************/
void lcd_pos(uchar X,uchar Y)
{
uchar pos;
if (X==0)
{X=0x80;}
else if (X==1)
{X=0x90;}
else if (X==2)
{X=0x88;}
else if (X==3)
{X=0x98;}
pos = X+Y ;
Write_Cmd(pos); //顯示地址
}
/*******************************************
函數名稱:Disp1Char
功 能:在某個位置顯示一個字符
參 數:x--位置的列坐標
y--位置的行坐標
data--顯示的字符數據
返回值 :無
********************************************/
void Disp1Char(uchar x,uchar y,uchar data)
{
lcd_pos( x, y );
Write_Data( data );
}
/*******************************************
函數名稱:DispNchar
功 能:讓液晶從某個位置起連續顯示N個字符
參 數:x--位置的列坐標
y--位置的行坐標
n--字符個數
ptr--指向字符存放位置的指針
返回值 :無
********************************************/
void DispNChar(uchar x,uchar y, uchar n,uchar *ptr)
{
uchar i;
for (i=0;i<n;i++)
{
Disp1Char(x++,y,ptr[i]);
if (x == 0x0f)
{
x = 0;
y ^= 1;
}
}
}
/*******************************************
函數名稱:DispString
功 能:讓液晶從某個位置起連續顯示N個字符
參 數:x--位置的列坐標
y--位置的行坐標
n--字符個數
ptr--指向字符存放位置的指針
返回值 :無
********************************************/
void DispString(uchar x,uchar y,uchar *ptr)
{
uchar i = 0;
lcd_pos( x, y );
while(ptr[i] != '\0')
{ //顯示字符
Write_Data(ptr[i]);
i++;
}
}
/*******************************************
函數名稱:Draw_TX
功 能:顯示一個16*16大小的圖形
參 數:Yaddr--Y地址
Xaddr--X地址
dp--指向圖形數據存放地址的指針
返回值 :無
********************************************/
void Draw_TX(uchar Yaddr,uchar Xaddr,const uchar * dp)
{
uchar j;
uchar k=0;
// Write_Cmd(0x01); //清屏,只能清除DDRAM
Write_Cmd(0x34); //使用擴展指令集,關閉繪圖顯示
for(j=0;j<16;j++)
{
Write_Cmd(Yaddr++); //Y地址
Write_Cmd(Xaddr); //X地址
Write_Data(dp[k++]);
Write_Data(dp[k++]);
}
Write_Cmd(0x36); //打開繪圖顯示
// Write_Cmd(0x30); //回到基本指令集模式
}
/***********************************************
寫入用戶自定義函數
***********************************************/
void CGRAM()
{
int i;
Write_Cmd(0x30);
Write_Cmd(0x40); //對CGRAM第一個自定義符操作
for(i=0;i<16;i++)
{
Write_Data(user16x16[i*2]);
Write_Data(user16x16[i*2+1]);
}
}
/***********************************************
顯示用戶自定義字符
***********************************************/
void DisplayCGRAM(unsigned char x,unsigned char y)
{
switch(y)
{
case 1: Write_Cmd(0x80+x);break;
case 2: Write_Cmd(0x90+x);break;
case 3: Write_Cmd(0x88+x);break;
case 4: Write_Cmd(0x98+x);break;
default:break;
}
Write_Data(00); //é???óDò???×?·?2ù×÷0x04á? ?ùò??±?óD′
Write_Data(00); //D′×?·? Write_Data(user16x16[i*2]);
// Write_Data(user16x16[i*2+1]);
}
/*************************************************************
//為反白做準備,目地是在圖形顯示時防止有噪點
*************************************************************/
void display() //為反白做準備,目地是在圖形顯示時防止有噪點
{
uchar i,j;
Write_Cmd(0x34); //寫數據時,關閉圖形顯示
for(i=0;i<32;i++)
{
Write_Cmd(0x80+i); //先寫入水平坐標值
Write_Cmd(0x80); //寫入垂直坐標值
for(j=0;j<16;j++) //再寫入兩個8位元的數據
Write_Data(0x00);
Delay_Nms(1);
}
for(i=0;i<32;i++)
{
Write_Cmd(0x80+i);
Write_Cmd(0x88);
for(j=0;j<16;j++)
Write_Data(0x00);
Delay_Nms(1);
}
Write_Cmd(0x36);//寫完數據,開圖形顯示
}
/*******************************************************
反白函數
*********************************************************/
void photodisplay(uchar x,uchar y,uchar width) //反白,X值為0-7,Y值為0-3,width為行反白格數
{
uchar i,j,flag=0x00;
display();
if(y>1)
{
flag=0x08;
y=y-2;
}
Write_Cmd(0x34); //寫數據時,關閉圖形顯示,且打開擴展指令集
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
12864菜單程序.rar
(1 MB, 下載次數: 61)
2017-12-4 20:41 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
黄色av一区
|
欧美日韩精品一区
|
国产精品伦理一区
|
一区二区三区网站
|
久久久综合网
|
国产免费黄色片
|
天天射天天舔
|
日本黄色a级片
|
国产又粗又猛又黄又爽的视频
|
黄色大片网站
|
成人免费视频国产免费麻豆
|
日韩视频在线观看免费
|
欧美日韩免费看
|
国内福利视频
|
一级片免费播放
|
亚洲精品视频在线播放
|
91亚洲国产
|
91视频色
|
亚洲欧美日韩一区
|
欧美一级在线观看
|
自拍偷拍欧美日韩
|
www.欧美日韩
|
日韩av不卡在线
|
久久av一区二区三区亚洲
|
国产精品成人免费视频
|
国产又粗又猛又黄又爽无遮挡
|
福利在线播放
|
亚洲精品成人网
|
国产中文字幕视频
|
中文字幕二区
|
亚洲精品自拍视频
|
欧美mv日韩mv国产
|
欧美一区二区免费
|
国产精品自拍一区
|
日韩精品网站
|
久久精品一区二区三区四区五区
|
在线国产91
|
www.夜夜骑
|
国产一区二区三区四区
|
国产视频一区二区在线观看
|
一区二区三区四区视频
|