久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
51單片機驅動320X240液晶屏(RA8803)源程序-多圖
[打印本頁]
作者:
huxiao
時間:
2015-1-24 14:25
標題:
51單片機驅動320X240液晶屏(RA8803)源程序-多圖
今天完成了320X240液晶屏的測試,先上個效果圖,然后上程序。
這是我的測試環境:
這個是圖形模式:
再上個文字模式:
350大洋呀,在單色屏里這是我玩的最貴的屏了.
我把程序放到另一個文章中吧,因為比較多。一個主文件,一個頭文件,大家用的時候看一下,不要復雜然后不能用,再來罵我。
用這個屏比較討厭的地方就是,如果程序不對了,調節對比度的電位器是沒反應的,不知道別人用過的屏是不是這個樣子的。電位器中間接VO,一端接VOUT,另外一端接地。INT和BUSY腳沒接。來了背光,屏的工作電流在250mA左右,挺大的。
主程序(RA8803.C):
/****************************************************
圖片橫向取模
*********************************************************/
#include <reg52.h>
#include <driver.h>
code uchar s1[]={"320X240液晶驅動"};
code uchar s2[]={"-- RA8803控制器 Crasyboye"};
code uchar s3[]={"RA8803是一款雙圖層文字/圖形LCD控制器,"
"支持320X240,擴展模式可支持640X240和320X480。"
"RA8803支持屏幕水平卷動及垂直卷動"
"支持512Byte sRAM可自行造字等等"};
code uchar s4[]={"本驅動來源于網絡,經修參照資料改后顯示穩定,"
"可以用來測試采用RA8803控制器的液晶屏,"
"如轉摘請注明出處:"};
code uchar s5[]={"http*//hi*baidu*com*crasyboye"};
/***************************************************
函數:void display_NET()
功能:網點的顯示,大小四種網點
****************************************************/
void display_NET(uchar s,uchar n)
{
lcd_cmdwrite(0x00,0xc5); //圖形顯示模式
lcd_cursorxy(0,0);
for(i=0;i<240;i++) //行畫點控制
{
for(j=0;j<40;j++) //同時進行8列
{
if(n==1)lcd_datawrite(s);
if(n==2) lcd_datawrite(s);
if(n==4)lcd_datawrite(s);
if(n==8)
if(j%2)lcd_datawrite(s);
else lcd_datawrite(~s);
}
if(n==1) s=~s;
if(n==2) if((i)%2) s=~s;
if(n==4) if((i+1)%4==0) s=~s;
if(n==8) if((i+1)%8==0) s=~s;
}
}
/*************************************************
主程序
***************************************************/
void main(void)
{
delay(10);
lcd_Initial();
while(1)
{
lcd_clear();
display_NET(0x0f,4);
DelayKey(1,4);
lcd_clear();
display_NET(0x00,8);
DelayKey(1,4);
lcd_clear();
lcd_clear();
lcd_cursorxy(5,10);
display_Bstring(s1);
lcd_cursorxy(7,50);
display_string(s2);
lcd_cursorxy(4,74);
display_string(s3);
lcd_cursorxy(4,145);
display_string(s4);
lcd_cursorxy(4,200);
display_string(s5);
DelayKey(1,4);
}
}
頭文件(driver.h):
#ifndef _driver_h
#define _driver_h
#define uchar unsigned char
#define uint unsigned int
#define x 320
#define y 240
#define xy (x/8)*y
sbit lcd_RS= P3^1; //A0
sbit lcd_WR= P3^4;
sbit lcd_RD= P3^3;
sbit lcd_CS= P3^2 ; //CE27
sbit lcd_RES= P3^0;
#define lcd_data P0
sbit key= P3^4; //用來定住顯示的
uint i,j;
void melay(unsigned int MS)
{
unsigned char us,usn;
while(MS!=0)
{
usn = 2; //for 12M
while(usn!=0)
{
us=0xf6;
while (us!=0){us--;};
usn--;
}
MS--;
}
}
void DelayKey(unsigned int Second , unsigned int MS100)
{ //輸入精確到0.1S,是用,
unsigned int i;
for(i=0;i<Second*100+MS100;i++)
{
if(key==0)
{
melay(20);
while(key==0) melay(100);
break;
}
else melay(50);
}
}
/**********************************************
函數:void delay(uint t)
功能:延時微秒的設定
**************************************************/
void delay(uint t)
{
while(t--);
}
/**************************************************
函數:void lcd_cmdwrite (uchar cmdx , uchar cmdy)
功能:在指定的寄存器寫下命令
********************************************************/
void lcd_cmdwrite (uchar cmdx , uchar cmdy)
{
lcd_data=cmdx;
lcd_CS=0;
lcd_RD=1;
lcd_RS=0;
lcd_WR=0;
lcd_WR=1;
lcd_RS=1;
lcd_CS=1;
lcd_data=cmdy;
lcd_CS=0;
lcd_RD=1;
lcd_RS=0;
lcd_WR=0;
lcd_WR=1;
lcd_RS=1;
lcd_CS=1;
}
/*************************************************
函數:void lcd_datawrite(unsigned char datax)
功能:寫下顯示的數據
*****************************************************/
void lcd_datawrite(unsigned char datax)
{
lcd_data=datax;
lcd_CS=0;
lcd_RD=1;
lcd_RS=1;
lcd_WR=0;
lcd_WR=1;
lcd_RS=0;
lcd_CS=1;
}
/****************************************************
函數:uchar lcd_cmdread(unsigned char cmdx)
功能:讀回一個值
*********************************************************/
uchar lcd_cmdread(uchar cmdx)
{
uchar address_cmd;
lcd_data=cmdx;
lcd_CS=0;
lcd_RD=1;
lcd_RS=0;
lcd_WR=0;
lcd_WR=1;
lcd_RS=1;
lcd_CS=1;
lcd_data=0xff;
lcd_CS=0;
lcd_WR=1;
lcd_RS=0;
lcd_RD=0;
address_cmd=lcd_data;
lcd_RD=1;
lcd_RS=1;
lcd_CS=1;
return(address_cmd);
}
/******************************************************
函數:void lcd_Initial(void)
功能:初始化好多寄存器
**********************************************************/
void lcd_Initial(void)
{
lcd_cmdwrite(0x00,0xcd); //WLCR 正常模式;文字模式;屏幕開啟;不閃爍;不反白;
lcd_cmdwrite(0x01,0x03); //MISC 系統頻率選擇:8M
lcd_cmdwrite(0x02,0x10); //APSR
lcd_cmdwrite(0x03,0x80); //ADSR 平移方向動控制
lcd_cmdwrite(0x10,0x6b); //WCCR 正常顯示,不加粗
lcd_cmdwrite(0x12,0xb3); //MAMR
lcd_cmdwrite(0x20,0x27); //AWRR
lcd_cmdwrite(0x30,0xef); //AWBR
lcd_cmdwrite(0x40,0x00); //AWLR
lcd_cmdwrite(0x50,0x00); //AWTR
lcd_cmdwrite(0x21,0x27); //DWRR
lcd_cmdwrite(0x31,0xef); //DWBR
lcd_cmdwrite(0x41,0x00); //DWLR
lcd_cmdwrite(0x51,0x00); //DWTR
lcd_cmdwrite(0x60,0x00); //CPXR
lcd_cmdwrite(0x61,0x00); //BGSG
lcd_cmdwrite(0x70,0x00); //CPYR
lcd_cmdwrite(0x71,0x00); //BGCM
lcd_cmdwrite(0x72,0xef); //EDCM
lcd_cmdwrite(0x90,0x09); //SCCR
lcd_cmdwrite(0xc0,0xc8); //TPCR
lcd_cmdwrite(0xc1,0x3a); //TPSR
lcd_cmdwrite(0xc8,0x80); //TPXR
lcd_cmdwrite(0xc9,0x80); //TPYR
lcd_cmdwrite(0xca,0x00); //TPZR
lcd_cmdwrite(0xd0,0x0f); //LCCR
lcd_cmdwrite(0xe0,0x00); //PNTR
lcd_cmdwrite(0xf0,0xa0); //FNCR
lcd_cmdwrite(0xf1,0x0f); //FVHT 字體不放大
}
/*****************************************************
函數:void lcd_clear()
功能:清除內存
********************************************************/
void lcd_clear()
{
uchar reg;
lcd_cmdwrite(0xe0,0x00);
reg = lcd_cmdread(0xf0);
reg &=0xf7;
reg |=0x08;
lcd_cmdwrite(0xf0,reg);
delay(300);
}
/******************************************************
函數:void lcd_cursorxy(unsigned int xn,unsigned int yn)
功能:設定要顯示數據的地址
**********************************************************/
void lcd_cursorxy(uint xn,uint yn)
{
lcd_cmdwrite(0x60,xn);
lcd_cmdwrite(0x70,yn);
}
/***********************************************
函數:void lcd_showbig(uchar *text,uint xn)
功能:顯示字符,漢字
******************************************************/
void display_string(uchar *text)
{
lcd_cmdwrite(0x00,0xcd);
lcd_cmdwrite(0xf1,0x0f); //不放大
while(*text != '\0')
{
lcd_datawrite(*text);
++text;
}
}
void display_Bstring(uchar *text)
{
lcd_cmdwrite(0x00,0xcd);
lcd_cmdwrite(0xf1,0x5f); //放大一倍
while(*text != '\0')
{
lcd_datawrite(*text);
++text;
}
}
/***********************************************
函數:void display_img(uchar code *p)
功能:顯示一幅320*240的完美圖片,但分正顯和反顯
顯示,我用的S52,放不下了。
***********************************************
void display_img(uchar code *p,bit c)
{
lcd_cmdwrite(0x00,0xc5);
lcd_cursorxy(0,0);
for(i=0;i<xy;i++)
{
if(c)lcd_datawrite(p[i]); //320*240
else lcd_datawrite(~p[i]);
}
}
*/
#endif
復制代碼
作者:
菠菜1220
時間:
2015-9-12 20:26
樓主你好!.#include <driver.h>里的程序怎么沒放上來
作者:
血一
時間:
2015-11-11 14:33
你這個屏幕是帶字庫的嗎,控制器是集成在上面的嗎
作者:
技術
時間:
2017-8-11 11:01
我用這個不能用,不知為什么,管配重新配置了的
作者:
hong19851024
時間:
2018-10-16 19:04
好,樓下無私
作者:
hkf145
時間:
2020-3-31 21:19
謝謝分享,我把程序燒錄到51后,從驅字開始顯示亂碼,后在網上提問,說是Keil軟件本身的一個“BUG”,keil編譯器會忽略0xFD值的字符串,就是要打一個關于oxfd的補丁,用12864的也是這個問題,打了補丁后顯示正常。
作者:
想跳水的朱
時間:
2020-12-15 16:00
RA8803要停產,要改用RA8806了
作者:
vtjason
時間:
2020-12-18 13:08
調節對比度的電位器,中間接VO,一端接VOUT,另外一端不是接地,而是要接電源(5V)
這樣才能調節對比度.
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
亚洲欧美在线观看
|
一级黄片毛片
|
日本国产视频
|
日韩特级片
|
久久性生活视频
|
国产黄色免费看
|
成人a毛片
|
欧美视频亚洲视频
|
性少妇mdms丰满hdfilm
|
中文字幕日韩高清
|
日韩精品在线免费观看
|
久久久久久综合
|
欧美日韩国
|
国产精品美女久久久
|
国产性生活
|
欧美视频久久
|
欧美视频在线观看一区
|
欧美日韩国产一区二区
|
日韩欧美国产一区二区三区
|
亚洲欧美视频在线
|
九九九热
|
五月天一区二区三区
|
久久黄色网
|
蜜桃精品视频
|
日本天天操
|
亚洲伦理精品
|
亚洲美女一区
|
亚洲人成免费
|
久视频在线
|
五月伊人网
|
婷婷久久综合
|
欧美日韩精品一区二区在线播放
|
av手机在线观看
|
国产女人18毛片水18精品
|
国产精品五区
|
精品在线免费视频
|
天天射影院
|
人与拘一级a毛片
|
国产亚洲欧美在线
|
成人国产精品视频
|
日韩不卡av
|