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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6620|回復: 2
收起左側

ATmega16的lcd12864顯示程序及proteus仿真工程文件

[復制鏈接]
ID:137190 發表于 2016-9-8 20:48 | 顯示全部樓層 |閱讀模式
分享一些ATmega16的基本的lcd12864顯示函數,可能對大家的學習有用.仿真文件可以從本帖附件下載
0.png


  1. #include<iom16v.h>
  2. #include<macros.h>
  3. #include"12864.h"
  4. #include"main.h"

  5. void port_init(void)
  6. {
  7. DDRC=0xFF;                 //12864數據口,置為輸出
  8. PORTC=0xFF;

  9. en_out;   //置EN輸出
  10. rw_out;   //置rw輸出
  11. rs_out;   //置rs輸出
  12. cs1_out;//置cs1輸出
  13. cs2_out;//置cs2輸出
  14. }

  15. /***
  16. ******12864寫命令函數
  17. ***/
  18. void lcd_write_com(uchar com)
  19. {
  20.         rw_clr;                           //寫操作
  21.         delay_us(3);
  22.         rs_clr;                          //寫數據        
  23.         PORTC=com;
  24.         en_set;
  25.         delay_us(3);
  26.         en_clr;
  27. }

  28. /***
  29. ******12864寫數據函數
  30. ***/
  31. void lcd_write_date(uchar date)
  32. {
  33.         rw_clr;            //寫操作
  34.         delay_us(3);  
  35.         rs_set;   //寫數據
  36.         PORTC=date;
  37.         en_set;
  38.         delay_us(3);
  39.         en_clr;
  40. }

  41. /***
  42. ******12864確定位置數據函數
  43. ******頁地址:x范圍0-7
  44. ******列地址:y范圍0-63
  45. ***/
  46. void lcd_setxy(uchar x,uchar y)
  47. {
  48.         lcd_write_com(0xb8+x);
  49.         lcd_write_com(0x40+y);
  50. }

  51. /***
  52. ******12864寫一個字母或數字函數
  53. ******頁地址:x范圍0-3
  54. ******列地址:y范圍0-15
  55. ***/
  56. void lcd_write_ch(uchar x,uchar y,const uchar *ch)
  57. {
  58.         uchar i,j;
  59.         if(y<8)                        //判斷列地址,如果小于8列,顯示在左屏
  60.         {
  61.                 cs1_clr;        //        CS1=0;
  62.             cs2_set;        //  CS2=1;
  63.         }
  64.         else                         //判斷列地址,如果大于8列,顯示在右屏
  65.         {
  66.         
  67.                 cs1_set;        //  CS1=1;
  68.                 cs2_clr;        //  CS2=0;
  69.                 y=y-8;
  70.         }
  71.         for(i=0;i<2;i++)
  72.         {
  73.                  lcd_setxy(x*2+i,y*8);                                  // x*2+i的意思是每個字符占用兩頁,一共可以顯示4行(一共8頁)
  74.                                                                                               // y*8 的意思是每次寫入的列都是8的整數倍
  75.                  for(j=0;j<8;j++)
  76.                  {
  77.                           lcd_write_date(ch[i*8+j]) ;           //一共16個字節
  78.                          delay_us(1);
  79.                  }
  80.         }
  81.         cs1_clr;                 //    CS1=0;
  82.         cs2_clr;                 //    CS2=0;
  83. }

  84. /***
  85. ******12864寫一個漢字函數
  86. ******頁地址:x范圍0-3
  87. ******列地址:y范圍0-7
  88. ***/
  89. void lcd_write_hanzi(uchar x,uchar y,const uchar *dat)
  90. {
  91.         uchar i,j;
  92.         if(y<4)
  93.         {
  94.                 cs1_clr;                   //CS1=0;
  95.                 cs2_set;               //CS2=1;
  96.         }
  97.         else
  98.         {
  99.         cs1_set;                //CS1=1;
  100.                 cs2_clr;                //CS2=0;
  101.                 y-=4;
  102.         }

  103.         for(i=0;i<2;i++)
  104.         {
  105.                 lcd_setxy(x*2+i,y*16);                                  // x*2+i的意思是每個漢字占用兩頁,一共可以顯示4行(一共8頁)
  106.                 delay_us(1);                                                //每次寫入都是16的倍數列
  107.                 for(j=0;j<16;j++)
  108.                 {
  109.                         lcd_write_date(dat[i*16+j]) ;           //一共16個字節
  110.                         delay_us(3);
  111.                 }        
  112.         }
  113.         cs1_clr;                        //CS1=0;
  114.         cs2_clr;                        //CS2=0;
  115. }

  116. /***
  117. ******12864寫一行字符函數
  118. ******頁地址:x范圍0-3
  119. ******列地址:y范圍0-15
  120. ******字符數:0-15
  121. ***/
  122. void lcd_write_str_hang(uchar x,uchar y,const uchar *ch,uchar n)
  123. {
  124.         uchar i;
  125.         for(i=0;i<n;i++)
  126.         {
  127.                 lcd_write_ch(x,y,ch+16*i);        //指針相加
  128.                 y++;
  129.                 delay_us(3);        
  130.         }
  131. }


  132. /***
  133. ******12864寫一行漢字函數
  134. ******頁地址:x范圍0-3
  135. ******列地址:y范圍0-7
  136. ******字符數:0-7
  137. ***/
  138. void lcd_write_hanzi_hanzi_hang(uchar x,uchar y,const uchar *date,uchar n)
  139. {
  140.         uchar i;
  141.         for(i=0;i<n;i++)
  142.         {
  143.                 lcd_write_hanzi(x,y,date+i*32);
  144.                 //注意理解ch+i*32:指的是數組指向下 i*32個數組
  145.                 y++;        
  146.                 delay_us(3);
  147.         }
  148. }

  149. /***
  150. ******12864寫一個字母或數字反白函數
  151. ******頁地址:x范圍0-3
  152. ******列地址:y范圍0-15
  153. ***/
  154. void lcd_write_ch_fb(uchar x,uchar y,const uchar *ch)
  155. {
  156.         uchar i,j;
  157.         if(y<8)
  158.         {
  159.                 cs1_clr;                   //CS1=0;
  160.                 cs2_set;                   //CS2=1;
  161.         }
  162.         else
  163.         {
  164.                 cs1_set;                   //CS1=1;
  165.                 cs2_clr;                   //CS2=0;
  166.                 y-=8;
  167.         }
  168.         
  169.         for(i=0;i<2;i++)
  170.         {
  171.                 lcd_setxy(x*2+i,y*8);               
  172.                 {
  173.                         for(j=0;j<8;j++)
  174.                         {
  175.                                 lcd_write_date(255-ch[i*8+j]) ;           //一共16個字節        
  176.                                 delay_us(3);
  177.                         }
  178.                 }
  179.         }
  180.         cs1_clr;                                 //CS1=0;
  181.         cs2_clr;                                //CS2=0;        
  182. }

  183. /***
  184. ******12864寫一行字母或數字反白函數
  185. ******頁地址:x范圍0-3
  186. ******列地址:y范圍0-15
  187. ***/
  188. void lcd_write_str_fb(uchar x,uchar y,const uchar *ch,uchar n)
  189. {
  190. uchar i;
  191. for(i=0;i<n;i++)
  192. {
  193.   lcd_write_ch_fb(x,y,ch+i*16);
  194.         y++;
  195.         delay_us(3);
  196. }
  197. }
  198. /***
  199. ******12864寫一個漢字反白顯示函數
  200. ******頁地址:x范圍0-3
  201. ******列地址:y范圍0-7
  202. ******字符數: n范圍0-7
  203. ***/
  204. void lcd_write_hanzi_fb(uchar x,uchar y,const uchar *date)
  205. {
  206.         uchar i,j;
  207.         if(y<4)
  208.         {
  209.                 cs1_clr;                          //CS1=0;
  210.                 cs2_set;                          //CS2=1;
  211.         }
  212.         else
  213.         {
  214.                 cs1_set;                          //CS1=1;
  215.                 cs2_clr;                          //CS2=0;
  216.                 y-=4;
  217.         }

  218.         for(i=0;i<2;i++)
  219.         {
  220.                 lcd_setxy(x*2+i,y*16);        
  221.                 for(j=0;j<16;j++)
  222.                 {
  223.                         lcd_write_date(255-date[i*16+j]) ;           //一共16個字節        
  224.                         delay_us(3);
  225.                 }        
  226.         }
  227.         cs1_clr;                                 //CS1=0;
  228.         cs2_clr;                                //CS2=0;
  229. }

  230. /***
  231. ******12864寫一行漢字反白顯示函數
  232. ******頁地址:x范圍0-3
  233. ******列地址:y范圍0-7
  234. ******字符數: n范圍0-7
  235. ***/
  236. void lcd_write_hanzi_hang_fb(uchar x,uchar y,const uchar *date,uchar n)
  237. {
  238.         uchar i;
  239.         for(i=0;i<n;i++)
  240.         {
  241.                  lcd_write_hanzi_fb(x,y,date+i*32);
  242.                 y++;
  243.                 delay_us(3);
  244.         }
  245. }

  246. /***
  247. ******12864初始化函數
  248. ***/
  249. void lcd_init(void)
  250. {
  251.         lcd_write_com(0x3f);           //開顯示開關
  252.         lcd_write_com(0xc0);        //LCD行初始地址,共64行
  253.         lcd_write_com(0xb8);        //LCD頁初始地址         共8頁
  254.         lcd_write_com(0x40);        //LCD列初始地址,共64列
  255. }

  256. /***
  257. ******12864清屏函數
  258. ***/
  259. void lcd_clear_csr(void)
  260. {
  261.         uchar i,j;
  262. //        CS1=0;
  263.         cs1_clr;
  264. //  CS2=1;
  265.         cs2_set;
  266.         for(i=0;i<8;i++)                                  //清除左屏
  267.         {
  268.                 lcd_setxy(i,0);
  269.                 for(j=0;j<64;j++)
  270.                 {
  271.                         lcd_write_date(0) ;
  272.                         delay_us(1);
  273.                 }
  274.                 lcd_setxy(0,0);        
  275.         }

  276.         //CS1=1;
  277.         cs1_set;                                                            //清除右屏
  278.         //CS2=0;
  279.         cs2_clr;
  280.         for(i=0;i<8;i++)
  281.         {
  282.                 lcd_setxy(i,0);
  283.                 for(j=0;j<64;j++)
  284.                 {
  285.                         lcd_write_date(0) ;
  286.                         delay_us(1);
  287.                 }
  288.                 lcd_setxy(0,0);        
  289.         }
  290. }

  291. /***
  292. ******12864清除一行顯示函數
  293. ****        x :0-3
  294. ***/
  295. void lcd_clear_hang(uchar x)
  296. {
  297.         uchar i,j;
  298.         cs1_clr;  //CS1=0;                //左屏
  299.         cs2_set;  //CS2=1;
  300.         for(i=0;i<2;i++)
  301.         {
  302.                 lcd_setxy(x*2+i,0);
  303.                 delay_us(2);
  304.                 for(j=0;j<64;j++)
  305.                 {
  306.                         lcd_write_date(0);
  307.                         delay_us(2);
  308.                 }        
  309.         }

  310.         cs1_set;                        //CS1=1;  右屏
  311.         cs2_clr;                        //CS2=0;
  312.         for(i=0;i<2;i++)
  313.         {
  314.                 lcd_setxy(x*2+i,0);
  315.                 delay_us(2);
  316.                 for(j=0;j<64;j++)
  317.                 {
  318.                         lcd_write_date(0);
  319.                         delay_us(2);
  320.                 }        
  321.         }
  322. }

復制代碼


0.png

所有資料下載:
12864顯示avr單片機.rar (68.2 KB, 下載次數: 117)
回復

使用道具 舉報

ID:210735 發表于 2018-6-4 16:32 | 顯示全部樓層
不錯好資料,51黑有你更精彩!!!
回復

使用道具 舉報

ID:29256 發表于 2018-10-8 20:47 | 顯示全部樓層
正好可以參考
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 黄色一级特级片 | 成年人精品视频 | 日本成人在线免费视频 | 91在线观| 日本精品一区二区在线观看 | av网站在线看 | 欧美日韩在线精品 | aacc678成免费人电影网站 | 中文字幕视频在线免费 | 永久精品| av中文字幕在线 | 国产福利91精品 | 成人免费视频 | 亚洲精品99| 夜夜精品视频 | 日韩欧美国产不卡 | 国产精品一区二区av | 国产精品1区2区3区 一区中文字幕 | 欧美精品综合在线 | 久久久91 | 欧洲精品在线观看 | 在线一区观看 | 欧美日韩电影一区二区 | 亚洲高清在线 | 91国在线视频 | 精品日韩一区二区三区 | 国产 欧美 日韩 一区 | xx视频在线观看 | 久久免费看 | 99精品欧美一区二区三区综合在线 | 国产伦一区二区三区四区 | 亚洲性爰 | 一级做a爰片久久毛片免费看 | 99久久久无码国产精品 | 亚洲伊人久久综合 | 亚洲一区二区三区免费在线观看 | 伊人焦久影院 | 久久久免费精品 | 男女在线网站 | 一区二区三区在线免费 | 少妇一区二区三区 |