久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 11693|回復: 7
打印 上一主題 下一主題
收起左側

51單片機驅動320X240液晶屏(RA8803)源程序-多圖

  [復制鏈接]
跳轉到指定樓層
樓主
ID:72705 發表于 2015-1-24 14:25 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
今天完成了320X240液晶屏的測試,先上個效果圖,然后上程序。
這是我的測試環境:


這個是圖形模式:

再上個文字模式:

350大洋呀,在單色屏里這是我玩的最貴的屏了.
        我把程序放到另一個文章中吧,因為比較多。一個主文件,一個頭文件,大家用的時候看一下,不要復雜然后不能用,再來罵我。
        用這個屏比較討厭的地方就是,如果程序不對了,調節對比度的電位器是沒反應的,不知道別人用過的屏是不是這個樣子的。電位器中間接VO,一端接VOUT,另外一端接地。INT和BUSY腳沒接。來了背光,屏的工作電流在250mA左右,挺大的。

  1. 主程序(RA8803.C):
  2. /****************************************************
  3. 圖片橫向取模
  4. *********************************************************/
  5. #include <reg52.h>
  6. #include <driver.h>

  7. code uchar s1[]={"320X240液晶驅動"};
  8. code uchar s2[]={"-- RA8803控制器 Crasyboye"};
  9. code uchar s3[]={"RA8803是一款雙圖層文字/圖形LCD控制器,"
  10.                  "支持320X240,擴展模式可支持640X240和320X480。"
  11.                  "RA8803支持屏幕水平卷動及垂直卷動"
  12.                  "支持512Byte sRAM可自行造字等等"};
  13. code uchar s4[]={"本驅動來源于網絡,經修參照資料改后顯示穩定,"
  14.                  "可以用來測試采用RA8803控制器的液晶屏,"
  15.                  "如轉摘請注明出處:"};
  16. code uchar s5[]={"http*//hi*baidu*com*crasyboye"};
  17. /***************************************************
  18. 函數:void display_NET()
  19. 功能:網點的顯示,大小四種網點
  20. ****************************************************/
  21. void display_NET(uchar s,uchar n)
  22. {
  23. lcd_cmdwrite(0x00,0xc5); //圖形顯示模式
  24. lcd_cursorxy(0,0);

  25. for(i=0;i<240;i++) //行畫點控制
  26. {
  27. for(j=0;j<40;j++)   //同時進行8列
  28. {
  29.       if(n==1)lcd_datawrite(s);
  30.       if(n==2) lcd_datawrite(s);
  31.       if(n==4)lcd_datawrite(s);
  32.    if(n==8)
  33.      if(j%2)lcd_datawrite(s);
  34.     else lcd_datawrite(~s);
  35. }
  36.    if(n==1) s=~s;
  37.    if(n==2) if((i)%2) s=~s;
  38.    if(n==4) if((i+1)%4==0) s=~s;
  39.    if(n==8) if((i+1)%8==0) s=~s;

  40. }
  41. }
  42. /*************************************************
  43.             主程序
  44. ***************************************************/
  45. void main(void)
  46. {
  47. delay(10);
  48. lcd_Initial();
  49. while(1)
  50.    {

  51.     lcd_clear();
  52.     display_NET(0x0f,4);
  53.     DelayKey(1,4);

  54. lcd_clear();
  55.     display_NET(0x00,8);
  56.     DelayKey(1,4);

  57. lcd_clear();
  58.     lcd_clear();
  59.     lcd_cursorxy(5,10);
  60.     display_Bstring(s1);

  61.     lcd_cursorxy(7,50);
  62.     display_string(s2);

  63.     lcd_cursorxy(4,74);
  64.     display_string(s3);
  65.     lcd_cursorxy(4,145);
  66.     display_string(s4);
  67.    lcd_cursorxy(4,200);
  68.     display_string(s5);
  69. DelayKey(1,4);
  70.    }  
  71. }

  72.      頭文件(driver.h):
  73. #ifndef _driver_h
  74. #define _driver_h
  75. #define uchar unsigned char
  76. #define uint unsigned int

  77. #define x 320
  78. #define y 240
  79. #define xy (x/8)*y

  80. sbit lcd_RS=     P3^1; //A0
  81. sbit lcd_WR=     P3^4;
  82. sbit lcd_RD=     P3^3;
  83. sbit lcd_CS=     P3^2 ; //CE27
  84. sbit lcd_RES=    P3^0;
  85. #define lcd_data    P0
  86. sbit key=       P3^4;    //用來定住顯示的

  87. uint i,j;
  88. void melay(unsigned int MS)
  89. {
  90. unsigned char us,usn;
  91. while(MS!=0)
  92. {
  93.    usn = 2; //for 12M
  94.    while(usn!=0)
  95.    {
  96.     us=0xf6;
  97.     while (us!=0){us--;};
  98.     usn--;
  99.    }
  100.    MS--;
  101. }
  102. }

  103. void DelayKey(unsigned int Second , unsigned int MS100)
  104. {       //輸入精確到0.1S,是用,
  105. unsigned int i;
  106. for(i=0;i<Second*100+MS100;i++)
  107. {
  108.    if(key==0)
  109.    {
  110.     melay(20);
  111.     while(key==0) melay(100);
  112.     break;
  113.    }
  114.    else melay(50);
  115. }   
  116. }
  117. /**********************************************
  118. 函數:void delay(uint t)
  119. 功能:延時微秒的設定
  120. **************************************************/
  121. void delay(uint t)
  122. {
  123. while(t--);
  124. }
  125. /**************************************************
  126. 函數:void lcd_cmdwrite (uchar cmdx , uchar cmdy)
  127. 功能:在指定的寄存器寫下命令
  128. ********************************************************/
  129. void lcd_cmdwrite (uchar cmdx , uchar cmdy)
  130. {
  131. lcd_data=cmdx;
  132. lcd_CS=0;
  133. lcd_RD=1;
  134. lcd_RS=0;   
  135. lcd_WR=0;
  136. lcd_WR=1;   
  137. lcd_RS=1;
  138. lcd_CS=1;
  139.    
  140. lcd_data=cmdy;
  141. lcd_CS=0;
  142. lcd_RD=1;
  143. lcd_RS=0;   
  144. lcd_WR=0;
  145. lcd_WR=1;
  146. lcd_RS=1;
  147. lcd_CS=1;
  148. }
  149. /*************************************************
  150. 函數:void lcd_datawrite(unsigned char datax)
  151. 功能:寫下顯示的數據
  152. *****************************************************/
  153. void lcd_datawrite(unsigned char datax)
  154. {
  155.     lcd_data=datax;
  156. lcd_CS=0;
  157. lcd_RD=1;
  158. lcd_RS=1;
  159. lcd_WR=0;
  160. lcd_WR=1;
  161. lcd_RS=0;
  162. lcd_CS=1;
  163. }
  164. /****************************************************
  165. 函數:uchar lcd_cmdread(unsigned char cmdx)
  166. 功能:讀回一個值
  167. *********************************************************/
  168. uchar lcd_cmdread(uchar cmdx)
  169. {
  170.     uchar address_cmd;
  171. lcd_data=cmdx;
  172. lcd_CS=0;
  173. lcd_RD=1;
  174. lcd_RS=0;
  175. lcd_WR=0;
  176. lcd_WR=1;  
  177. lcd_RS=1;
  178. lcd_CS=1;

  179. lcd_data=0xff;
  180. lcd_CS=0;
  181. lcd_WR=1;
  182. lcd_RS=0;  
  183. lcd_RD=0;
  184. address_cmd=lcd_data;
  185. lcd_RD=1;
  186. lcd_RS=1;
  187. lcd_CS=1;
  188. return(address_cmd);
  189. }
  190. /******************************************************
  191. 函數:void lcd_Initial(void)
  192. 功能:初始化好多寄存器
  193. **********************************************************/
  194. void lcd_Initial(void)
  195. {
  196. lcd_cmdwrite(0x00,0xcd);   //WLCR 正常模式;文字模式;屏幕開啟;不閃爍;不反白;
  197. lcd_cmdwrite(0x01,0x03);   //MISC 系統頻率選擇:8M
  198. lcd_cmdwrite(0x02,0x10);   //APSR  
  199. lcd_cmdwrite(0x03,0x80);   //ADSR 平移方向動控制
  200. lcd_cmdwrite(0x10,0x6b);   //WCCR 正常顯示,不加粗

  201. lcd_cmdwrite(0x12,0xb3);   //MAMR   

  202. lcd_cmdwrite(0x20,0x27);   //AWRR  
  203. lcd_cmdwrite(0x30,0xef);   //AWBR  
  204. lcd_cmdwrite(0x40,0x00);   //AWLR  
  205. lcd_cmdwrite(0x50,0x00);   //AWTR  

  206. lcd_cmdwrite(0x21,0x27);   //DWRR  
  207. lcd_cmdwrite(0x31,0xef);   //DWBR  
  208. lcd_cmdwrite(0x41,0x00);   //DWLR
  209. lcd_cmdwrite(0x51,0x00);   //DWTR

  210. lcd_cmdwrite(0x60,0x00);   //CPXR
  211. lcd_cmdwrite(0x61,0x00);   //BGSG
  212. lcd_cmdwrite(0x70,0x00);   //CPYR
  213. lcd_cmdwrite(0x71,0x00);   //BGCM
  214. lcd_cmdwrite(0x72,0xef);   //EDCM      
  215. lcd_cmdwrite(0x90,0x09);   //SCCR  
  216. lcd_cmdwrite(0xc0,0xc8);   //TPCR  
  217. lcd_cmdwrite(0xc1,0x3a);   //TPSR  
  218. lcd_cmdwrite(0xc8,0x80);   //TPXR
  219. lcd_cmdwrite(0xc9,0x80);   //TPYR
  220. lcd_cmdwrite(0xca,0x00);   //TPZR
  221. lcd_cmdwrite(0xd0,0x0f);   //LCCR  
  222. lcd_cmdwrite(0xe0,0x00);   //PNTR
  223. lcd_cmdwrite(0xf0,0xa0);   //FNCR  
  224. lcd_cmdwrite(0xf1,0x0f);   //FVHT      字體不放大
  225. }

  226. /*****************************************************
  227. 函數:void lcd_clear()
  228. 功能:清除內存
  229. ********************************************************/
  230. void lcd_clear()
  231. {
  232. uchar reg;
  233. lcd_cmdwrite(0xe0,0x00);
  234. reg = lcd_cmdread(0xf0);
  235.     reg &=0xf7;
  236. reg |=0x08;
  237. lcd_cmdwrite(0xf0,reg);
  238.     delay(300);
  239. }
  240. /******************************************************
  241. 函數:void lcd_cursorxy(unsigned int xn,unsigned int yn)
  242. 功能:設定要顯示數據的地址
  243. **********************************************************/
  244. void lcd_cursorxy(uint xn,uint yn)
  245. {
  246. lcd_cmdwrite(0x60,xn);
  247. lcd_cmdwrite(0x70,yn);
  248. }
  249. /***********************************************
  250. 函數:void lcd_showbig(uchar *text,uint xn)
  251. 功能:顯示字符,漢字
  252. ******************************************************/
  253. void display_string(uchar *text)
  254. {
  255.     lcd_cmdwrite(0x00,0xcd);
  256. lcd_cmdwrite(0xf1,0x0f); //不放大
  257.     while(*text != '\0')         
  258. {
  259.     lcd_datawrite(*text);
  260.     ++text;
  261.     }
  262. }

  263. void display_Bstring(uchar *text)
  264. {
  265.     lcd_cmdwrite(0x00,0xcd);
  266. lcd_cmdwrite(0xf1,0x5f); //放大一倍
  267.     while(*text != '\0')         
  268. {
  269.     lcd_datawrite(*text);
  270.     ++text;
  271.     }
  272. }
  273. /***********************************************
  274. 函數:void display_img(uchar code *p)
  275. 功能:顯示一幅320*240的完美圖片,但分正顯和反顯
  276.       顯示,我用的S52,放不下了。
  277. ***********************************************
  278. void display_img(uchar code *p,bit c)
  279. {
  280. lcd_cmdwrite(0x00,0xc5);         
  281. lcd_cursorxy(0,0);
  282. for(i=0;i<xy;i++)
  283.      {
  284.       if(c)lcd_datawrite(p[i]);     //320*240
  285.       else lcd_datawrite(~p[i]);
  286.      }
  287. }
  288. */
  289. #endif
  290.                
復制代碼




分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏9 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:89971 發表于 2015-9-12 20:26 | 只看該作者
樓主你好!.#include <driver.h>里的程序怎么沒放上來
回復

使用道具 舉報

板凳
ID:84147 發表于 2015-11-11 14:33 | 只看該作者
你這個屏幕是帶字庫的嗎,控制器是集成在上面的嗎
回復

使用道具 舉報

地板
ID:104638 發表于 2017-8-11 11:01 | 只看該作者
我用這個不能用,不知為什么,管配重新配置了的
回復

使用道具 舉報

5#
ID:245473 發表于 2018-10-16 19:04 | 只看該作者
好,樓下無私
回復

使用道具 舉報

6#
ID:314908 發表于 2020-3-31 21:19 | 只看該作者
謝謝分享,我把程序燒錄到51后,從驅字開始顯示亂碼,后在網上提問,說是Keil軟件本身的一個“BUG”,keil編譯器會忽略0xFD值的字符串,就是要打一個關于oxfd的補丁,用12864的也是這個問題,打了補丁后顯示正常。
回復

使用道具 舉報

7#
ID:860649 發表于 2020-12-15 16:00 | 只看該作者
RA8803要停產,要改用RA8806了
回復

使用道具 舉報

8#
ID:157849 發表于 2020-12-18 13:08 | 只看該作者
調節對比度的電位器,中間接VO,一端接VOUT,另外一端不是接地,而是要接電源(5V)
這樣才能調節對比度.
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品免费播放 | 皇色视频在线 | 中文字幕视频在线观看 | 尤物视频在线免费观看 | 看av电影 | 国产精品 欧美精品 | 男人天堂网址 | 午夜影院毛片 | 中文字幕国产精品 | 91福利在线观看视频 | 久久国产免费 | 色www精品视频在线观看 | 国产有码| 久久久影院 | 日韩一区二区三区在线观看视频 | 91精品国产综合久久婷婷香蕉 | 亚洲不卡在线观看 | 日韩手机在线视频 | 久久久精品久久久 | 你懂的国产 | 蜜桃日韩 | 国产原创视频 | 精品久久一区 | 欧美激情视频一区二区三区在线播放 | 81精品国产乱码久久久久久 | 激情a| 亚洲欧美一区二区三区在线 | 黄网站在线播放 | 日日夜夜天天综合 | 国产精品久久久久久久久久久久 | 热久久国产 | 日本久久一区 | 国产激情在线 | 久久精品久久久久久 | 波多野结衣精品 | 日本粉嫩一区二区三区视频 | 日韩色视频 | 亚洲精品视频免费观看 | 视频一区二区在线观看 | 一区二区三区在线 | 久久精品久久久 |