[资料分享] 基于MEGA128带字库的LCD12864写显示

cc哥儿   2014-8-25 21:12 楼主
  1. #include<iom128v.h>
  2. #include<macros.h>
  3. #define uchar            unsigned char
  4. #define uint                 unsigned int
  5. #define RS_ON                  PORTC|=BIT(0)
  6. #define RS_OFF                   PORTC&=~BIT(0)
  7. #define RW_ON                   PORTC|=BIT(1)
  8. #define RW_OFF                    PORTC&=~BIT(1)

  9. #define LCDE_ON                 PORTC|=BIT(2)
  10. #define LCDE_OFF                 PORTC&=~BIT(2)

  11. uchar const table1[]="数据组1";
  12. uchar const table2[]="数据组2";

  13. /*************************10us延时函数**************************/
  14. void delay_10us(void)
  15. {
  16. uchar i,j;
  17.     for(i=23;i>0;i--)
  18.         for(j=1;j>0;j--);       
  19. }
  20. /******************************************************************/


  21. /*************************毫秒级延时函数***************************/
  22. void delay_1ms(uchar t)
  23. {
  24. uchar a,b,c;
  25.         for(c=t;c>0;c--)
  26.             for(b=129;b>0;b--)
  27.                 for(a=45;a>0;a--);
  28. }
  29. /*****************************读忙指令********************************/
  30. void read_busy(void)
  31. {
  32.          RS_OFF;
  33.         RW_ON;
  34.         LCDE_ON;
  35.         delay_10us();
  36.         DDRA=0X00;
  37.         delay_10us();
  38.         while(PINA&0x80);
  39.         DDRA=0XFF;
  40.         LCDE_OFF;
  41. }
  42. /*********************************************************************/


  43. /*****************************写指令函数*********************************/
  44. void write_cmd(uchar cdata)
  45. {
  46.         read_busy();
  47.         RS_OFF;
  48.         RW_OFF;
  49.         LCDE_ON;
  50.         delay_10us();
  51.         PORTA=cdata;
  52.         delay_10us();
  53.         LCDE_OFF;
  54.         delay_10us();       
  55. }
  56. /************************************************************************/



  57. /*****************************写数据函数*********************************/
  58. void write_data(uchar ddata)
  59. {
  60.         read_busy();
  61.         RS_ON;
  62.         RW_OFF;
  63.         LCDE_ON;
  64.         delay_10us();
  65.         PORTA=ddata;
  66.         delay_10us();
  67.         LCDE_OFF;
  68.         delay_10us();
  69. }
  70. /***************************************************************************/


  71. /****************************12864液晶初始化********************************/
  72. void lcd12864_init(void)
  73. {
  74.         delay_1ms(50);
  75.         write_cmd(0x30);
  76.         delay_1ms(1);
  77.         write_cmd(0x0c);
  78.         delay_1ms(1);
  79.         write_cmd(0x06);
  80.         delay_1ms(1);
  81.         write_cmd(0x01);
  82.         delay_1ms(1);               
  83. }
  84. /****************************************************************************/

  85. void IO_init(void)
  86. {
  87. DDRA=0xff;
  88. PORTA=0XFF;
  89. DDRD=0XFF;
  90. PORTD=0X00;
  91. DDRC=0XFF;
  92. PORTC=0X28;
  93. }



  94. /******************************主函数*******************************************/
  95. void main(void)
  96. {
  97.          uchar i,j;
  98.          IO_init();
  99.         while(1)
  100.         {
  101.                 lcd12864_init();
  102.                 write_cmd(0x80);
  103.                 for(i=0;i<16;i++)
  104.                 {
  105.                         write_data(table1[i]);
  106.                         delay_1ms(2);
  107.                 }

  108.                 write_cmd(0x90);
  109.                 for(i=0;i<16;i++)
  110.                 {
  111.                         write_data(table1[i+16]);
  112.                         delay_1ms(2);
  113.                 }
  114.                 write_cmd(0x88);
  115.                 for(i=0;i<8;i++)
  116.                 {
  117.                         write_data(table1[i+32]);
  118.                         delay_1ms(2);
  119.                 }
  120.                 delay_1ms(10);
  121.                 write_cmd(0x01);
  122.                 delay_1ms(10);               
  123.                 write_cmd(0x01);
  124.                 delay_1ms(10);


  125.                 lcd12864_init();
  126.                 write_cmd(0x80);
  127.                 for(i=0;i<16;i++)
  128.                 {
  129.                         write_data(table2[i]);
  130.                         delay_1ms(2);
  131.                 }

  132.                 write_cmd(0x90);
  133.                 for(i=0;i<16;i++)
  134.                 {
  135.                         write_data(table2[i+16]);
  136.                         delay_1ms(2);
  137.                 }

  138.                 write_cmd(0x98);
  139.                 for(i=0;i<16;i++)
  140.                 {
  141.                         write_data(table2[i+32]);
  142.                         delay_1ms(2);
  143.                 }
  144.                 delay_1ms(10);

  145.         }
  146. }
  147. /**************************************************************/

回复评论 (1)

拿来试试看
不锈钢电阻,电阻器
点赞  2014-8-26 14:48
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复