找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3488|回复: 0
打印 上一主题 下一主题
收起左侧

AVR 12864 code

[复制链接]
跳转到指定楼层
楼主
最近研究的一些心得!



全部资料下载:
041 LCD12864显示实验.zip (71.8 KB, 下载次数: 26)



  1. /**********************HJ-2G V8.0 专业级AVR开发板例程************************
  2. *  平台:HJ-2G V8 AVR开发板 +ICC7.22 +ATMETA16
  3. *  名称:驱动开发板上的12864液晶
  4. *  公司:慧净电子
  5. *  淘宝:http://shop37031453.taobao.com      
  6. *  网站:www.hjmcu.com
  7. *  编写:HJMCU
  8. *  日期:2008-8-08
  9. *   QQ : 121350852 398115088
  10. *  晶振:内部12M晶振
  11. *  说明:免费开源,不提供源代码分析,有问题直接到慧净论坛交流
  12. *  论坛:http://hjdz.5d6d.net
  13. ******************************************************************/
  14. #include "iom16v.h"                        //包含型号头文件
  15. #include "macros.h"                        //包含"位"操作头文件
  16. #include "stdio.h"                        //标准输入输出头文件
  17. #include "AVR_PQ1A.h"                //包含自定义常量头文件

  18. #pragma data:code //以下是字模工具取出的图片数组
  19. const uchar GDRAM[1024]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  20. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  21. 0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,
  22. 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
  23. 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
  24. 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
  25. 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
  26. 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
  27. 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
  28. 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
  29. 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
  30. 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
  31. 0x20,0x7F,0xFF,0xC0,0xFF,0xFF,0x80,0xFF,0xFF,0x80,0xFF,0xFF,0x83,0xFF,0xFE,0x04,
  32. 0x20,0x40,0x00,0x40,0x80,0x00,0x80,0x80,0x00,0x80,0x80,0x00,0x82,0x00,0x02,0x04,
  33. 0x20,0x40,0x00,0x40,0x80,0x00,0x80,0x80,0x00,0x80,0x80,0x00,0x82,0x00,0x02,0x04,
  34. 0x20,0x40,0x00,0x40,0x80,0x00,0x80,0x80,0x00,0x80,0x80,0x00,0x82,0x00,0x02,0x04,
  35. 0x20,0x40,0x00,0x40,0x80,0x00,0x80,0x80,0x00,0x80,0x80,0x00,0x82,0x00,0x02,0x04,
  36. 0x20,0x40,0x00,0x40,0x80,0x00,0x80,0x80,0x00,0x80,0x80,0x00,0x82,0x00,0x02,0x04,
  37. 0x20,0x40,0x00,0x40,0x80,0x00,0x80,0x80,0x00,0x80,0x80,0x00,0x82,0x00,0x02,0x04,
  38. 0x20,0x40,0x00,0x40,0x80,0x00,0x80,0x80,0x00,0x80,0x80,0x00,0x82,0x00,0x02,0x04,
  39. 0x20,0x40,0x00,0x40,0x80,0x00,0x80,0x80,0x00,0x80,0x80,0x00,0x82,0x00,0x02,0x04,
  40. 0x20,0x40,0x00,0x40,0x80,0x00,0x80,0x80,0x00,0x80,0x80,0x00,0x82,0x00,0x02,0x04,
  41. 0x20,0x7F,0xFF,0xC0,0xFF,0xFF,0x80,0xFF,0xFF,0x80,0xFF,0xFF,0x83,0xFF,0xFE,0x04,
  42. 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
  43. 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
  44. 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
  45. 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
  46. 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
  47. 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
  48. 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
  49. 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
  50. 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
  51. 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
  52. 0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,
  53. 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
  54. 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
  55. 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
  56. 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
  57. 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
  58. 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
  59. 0x20,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
  60. 0x20,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
  61. 0x20,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
  62. 0x2F,0xFF,0xFF,0xFF,0xC1,0xF8,0x7F,0xBF,0xC1,0xE3,0x9C,0x00,0x78,0x1E,0x3F,0xC4,
  63. 0x26,0xD9,0xB6,0x6D,0x80,0x60,0x33,0x1B,0x63,0x31,0x8C,0x00,0xCC,0x33,0x1B,0x64,
  64. 0x26,0xD9,0xB6,0x6D,0x80,0x60,0x1E,0x1B,0x66,0x31,0x8C,0x01,0x8C,0x61,0x9B,0x64,
  65. 0x27,0xF9,0xFE,0x7F,0x80,0x60,0x0C,0x1B,0x66,0x01,0x8C,0x01,0x80,0x61,0x9B,0x64,
  66. 0x27,0xF9,0xFE,0x7F,0x80,0x60,0x1E,0x1B,0x66,0x01,0x8C,0x01,0x80,0x61,0x9B,0x64,
  67. 0x23,0x30,0xCC,0x33,0x1C,0x6C,0x33,0x1B,0x63,0x31,0x9C,0x70,0xCC,0x33,0x1B,0x64,
  68. 0x23,0x30,0xCC,0x33,0x1C,0x78,0x7F,0xBF,0xF1,0xE0,0xFC,0x70,0x78,0x1E,0x3F,0xF4,
  69. 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
  70. 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
  71. 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
  72. 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
  73. 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
  74. 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
  75. 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
  76. 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
  77. 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
  78. 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
  79. 0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,
  80. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  81. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  82. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
  83. #pragma data:data

  84. /*******************************************
  85. 函数名称: LCD12864_portini
  86. 功    能: 初始化12864液晶用到的IO口
  87. 参    数: 无
  88. 返回值  : 无
  89. /********************************************/
  90. void LCD12864_portini(void)
  91. {
  92.         LCDb_CTRL_DDR |= BIT(LCDb_RS)|BIT(LCDb_RW)|BIT(LCDb_E)|BIT(LCDb_RST);//配置控制管脚为输出
  93.         LCDb_DATA_DDR |= 0xFF;  //配置数据管脚为输出
  94.         LCDb_SET_RST;                //不使能复位端
  95. }
  96. /*******************************************
  97. 函数名称: LCD12864_readbyte
  98. 功    能: 从12864液晶读出一个字节数据或者指令
  99. 参    数: DatCmd--为iDat时是数据,为iCmd时是指令
  100. 返回值  : dByte--读回的数据或者指令
  101. /********************************************/
  102. uchar LCD12864_readbyte(uchar DatCmd)
  103. {
  104.         uchar dByte;
  105.         if (DatCmd == iCmd)                 //指令操作
  106.                 LCDb_CLR_RS;
  107.         else
  108.                 LCDb_SET_RS;
  109.                
  110.         LCDb_SET_RW;                              //读操作
  111.         LCDb_SET_E;
  112.         LCDb_DATA_DDR=0x00;         //数据总线定义为输入
  113.         dByte=LCDb_DI;                         //读数据或者指令
  114.         Delayms(1);                                 //时序调整
  115.         LCDb_CLR_E;       
  116.         LCDb_DATA_DDR|=0xff;         //数据总线还原为输出
  117.         return dByte;
  118. }
  119. /*******************************************
  120. 函数名称: LCD12864_sendbyte
  121. 功    能: 向12864液晶写入一个字节数据或者指令
  122. 参    数: DatCmd--为iDat时是数据,为iCmd时是指令
  123.                     dByte--为写入12864的数据或者指令
  124. 返回值  : 无
  125. /********************************************/
  126. void LCD12864_sendbyte(uchar DatCmd, uchar dByte)
  127. {
  128.         if (DatCmd == iCmd)                //指令操作
  129.                 LCDb_CLR_RS;
  130.         else
  131.                 LCDb_SET_RS;
  132.                
  133.         LCDb_CLR_RW;                        //写操作
  134.         LCDb_SET_E;
  135.         LCDb_DO = dByte;                //写入数据
  136.         Delayus(100);
  137.         LCDb_CLR_E;       
  138. }
  139. /*******************************************
  140. 函数名称: LCD12864_sendstr
  141. 功    能: 向12864液晶写入一个字符串
  142. 参    数: ptString--字符串指针
  143. 返回值  : 无
  144. /********************************************/
  145. void LCD12864_sendstr(uchar *ptString)
  146. {
  147.         while((*ptString)!='\0')                 //字符串未结束一直写
  148.         {
  149.                 LCD12864_sendbyte(iDat, *ptString++);
  150.         }
  151. }
  152. /*******************************************
  153. 函数名称: LCD12864_clear
  154. 功    能: 12864液晶清屏
  155. 参    数: 无
  156. 返回值  : 无
  157. /********************************************/
  158. void LCD12864_clear(void)
  159. {
  160.         LCD12864_sendbyte(iCmd,LCDb_CLS);
  161.         Delayms(2);// 清屏指令写入后,2ms 的延时是很必要的!!!
  162. }
  163. /*******************************************
  164. 函数名称: LCD12864_readBF
  165. 功    能: 12864液晶清屏
  166. 参    数: 无
  167. 返回值  : busy--为1时忙,为0时可以接收指令
  168. /********************************************/
  169. uchar LCD12864_readBF(void)
  170. {          
  171.         uchar busy;
  172.         busy=LCD12864_readbyte(iCmd);                //读回BF标志和地址
  173.         if(busy&0x80)                                                //如果忙,返回忙状态
  174.                 busy=1;
  175.         else                                                                   //不忙,可以写入
  176.                 busy=0;
  177.         return busy;
  178. }
  179. /*******************************************
  180. 函数名称: LCD12864_gotoXY
  181. 功    能: 移动到指定位置
  182. 参    数: Row--指定的行
  183.                     Col--指定的列
  184. 返回值  : 无
  185. /********************************************/
  186. void LCD12864_gotoXY(uchar Row, uchar Col)
  187. {       
  188.         switch (Row)                  //选择行
  189.         {
  190.                 case 2:
  191.                         LCD12864_sendbyte(iCmd, LCDb_L2 + Col); break;        //写入第2行的指定列
  192.                 case 3:
  193.                         LCD12864_sendbyte(iCmd, LCDb_L3 + Col); break;        //写入第3行的指定列
  194.                 case 4:
  195.                         LCD12864_sendbyte(iCmd, LCDb_L4 + Col); break;        //写入第4行的指定列       
  196.                 default:
  197.                         LCD12864_sendbyte(iCmd, LCDb_L1 + Col); break;        //写入第1行的指定列       
  198.         }
  199. }
  200. /*******************************************
  201. 函数名称: LCD12864_initial
  202. 功    能: 12864液晶初始化
  203. 参    数: 无
  204. 返回值  : 无
  205. /********************************************/
  206. void LCD12864_initial(void)
  207. {
  208.         Delayms(100);                                // 等待内部复位
  209.         LCD12864_portini();                        //端口初始化
  210.        
  211.         LCD12864_sendbyte(iCmd, LCDb_FUNCTION);        //功能、模式设定
  212.         while(LCD12864_readBF());
  213.         LCD12864_sendbyte(iCmd, LCDb_ON);                //打开显示
  214.         while(LCD12864_readBF());
  215.         LCD12864_clear();                                                //清屏
  216.         while(LCD12864_readBF());
  217.         LCD12864_sendbyte(iCmd, LCDb_ENTRY);        // 输入模式设定               
  218. }
  219. /*******************************************
  220. 函数名称: LCD12864_opGDRAM
  221. 功    能: 向GDRAM写入数据,并显示(完成绘图功能)
  222. 参    数: ptGDRAM--GDRAM数据指针
  223. 返回值  : 无
  224. /********************************************/
  225. void LCD12864_opGDRAM(const uchar *ptGDRAM)
  226. {
  227.         uchar i,j;
  228.         uint x=0;
  229.         while(LCD12864_readBF());          //读忙标志
  230.         LCD12864_sendbyte(iCmd,LCDb_EXTCMD1);                //扩充指令集,并关闭绘图显示       
  231.         //写入并显示上半屏幕
  232.         for(i=0;i<32;i++)                                            //行地址计数
  233.      {                               
  234.            for(j=0;j<8;j++)                                      //列地址计数
  235.            {                                                
  236.                                     LCD12864_sendbyte(iCmd,0x80|i);//输入行地址
  237.                                  Delayus(10);
  238.                                     LCD12864_sendbyte(iCmd,0x80|j);//输入列地址
  239.                                  Delayus(10);
  240.                  LCD12864_sendbyte(iDat,ptGDRAM[x++]); //输入高位字节数据
  241.                                  Delayus(10);               
  242.                                  LCD12864_sendbyte(iDat,ptGDRAM[x++]); //输入低位字节数据
  243.                                  Delayus(10);
  244.            }
  245.      }
  246.          //写入并显示下半屏幕
  247.          for(i=0;i<32;i++)            
  248.      {                               
  249.            for(j=8;j<16;j++)      
  250.            {            
  251.                                     LCD12864_sendbyte(iCmd,0x80|i);//输入行地址
  252.                                  Delayus(10);
  253.                                     LCD12864_sendbyte(iCmd,0x80|j);//输入列地址
  254.                                  Delayus(10);
  255.                  LCD12864_sendbyte(iDat,ptGDRAM[x++]); //输入高位字节数据      
  256.                                  Delayus(10);
  257.                                  LCD12864_sendbyte(iDat,ptGDRAM[x++]); //输入低位字节数据
  258.                                  Delayus(10);
  259.            }
  260.      }
  261.          Delayus(10);
  262.          LCD12864_sendbyte(iCmd,LCDb_EXTCMD2);                           //打开绘图显示
  263.          LCD12864_sendbyte(iCmd,LCDb_BASCMD);                           //还原回基本指令集模式
  264. }

  265. /*******************************************
  266. 函数名称: main
  267. 功    能: 12864液晶驱动主程序
  268. 参    数: 无
  269. 返回值  : 无
  270. /********************************************/
  271. void main(void)
  272. {
  273. uchar i;
  274. Board_init( );                                                                     //初始化开发板
  275. LCD12864_initial();                                                   //初始化12864液晶
  276.   
  277. while(1)
  278. {
  279.   LCD12864_clear();
  280.   while(LCD12864_readBF());
  281.   LCD12864_gotoXY(1,0);                                                     //第1行,第1列显示
  282.   LCD12864_sendstr("HJ-2G AVR 开发板");          
  283.   LCD12864_gotoXY(2,2);                                                      //第2行,第3列显示
  284.   LCD12864_sendstr("慧净制作");       
  285.   LCD12864_gotoXY(3,0);                                                  //第3行,第1列显示
  286.   LCD12864_sendstr("电话:18691419224");       
  287.   LCD12864_gotoXY(4,1);                                                  //第4行,第2列显示
  288.   LCD12864_sendstr("www.hjmcu.com ");       
  289.   Delayms(2000);                                                            //延时等待
  290.   
  291. }
  292. }

复制代码


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表