标题: 新人求教proteus中字体显示位置不对 [打印本页]

作者: vvs1212    时间: 2020-3-4 10:49
标题: 新人求教proteus中字体显示位置不对
使用的AGM1232,然后使用proteus仿真图是这样的,程序代码如下,怎么调位置都不对。

  1. #include<reg51.h>
  2. #define PD1 61

  3. unsigned char Column;
  4. unsigned char Page_;
  5. unsigned char Code_;
  6. unsigned char Command;
  7. unsigned char LCDData;

  8. xdata unsigned char CWADD1 _at_ 0x8000;
  9. xdata unsigned char DWADD1 _at_ 0x8001;
  10. xdata unsigned char CRADD1 _at_ 0x8002;
  11. xdata unsigned char DRADD1 _at_ 0x8003;

  12. xdata unsigned char CWADD2 _at_ 0x8004;
  13. xdata unsigned char DWADD2 _at_ 0x8005;
  14. xdata unsigned char CRADD2 _at_ 0x8006;
  15. xdata unsigned char DRADD2 _at_ 0x8007;

  16. code unsigned char EETAB[ ][8]={
  17.     {0x38,0x44,0x44,0x44,0x44,0x44,0x38,0x00},
  18.     {0x10,0x30,0x50,0x10,0x10,0x10,0x7c,0x00},
  19.     {0x38,0x44,0x04,0x08,0x10,0x20,0x7c,0x00},
  20.     {0x78,0x84,0x04,0x38,0x04,0x84,0x78,0x00}
  21. };

  22. code unsigned char CCTAB[][32] ={
  23.     {0x00,0x24,0xF6,0x24,0x24,0x64,0xA4,0x24,0x3F,0x24,0xA4,0x64,0x24,0x24,0xE4,0x04,
  24.         0x00,0x00,0x7F,0x80,0x49,0x09,0x09,0x09,0x7F,0x09,0x09,0x09,0x09,0x00,0xFF,0x00},
  25. };

  26. void WriteCommandE1(){
  27.     while(CRADD1 & 0x80);
  28.     CWADD1 = Command;
  29. }

  30. void WriteDataE1(){
  31.     while(CRADD1 & 0x80);
  32.     DWADD1 = LCDData;
  33. }

  34. void ReadDataE1(){
  35.     while(CRADD1 & 0x80);
  36.     LCDData = DRADD1;
  37. }

  38. void WriteCommandE2(){
  39.     while(CRADD2 & 0x80);
  40.     CWADD2 = Command;
  41. }

  42. void WriteDataE2(){
  43.     while(CRADD2 & 0x80);
  44.     DWADD2 = LCDData;
  45. }

  46. void ReadDataE2(){
  47.     while(CRADD2 & 0x80);
  48.     LCDData = DRADD2;
  49. }

  50. void Init(){
  51.     Command = 0xe2;

  52.     WriteCommandE1();
  53.     WriteCommandE2();

  54.     Command = 0xa4;
  55.     WriteCommandE1();
  56.     WriteCommandE2();

  57.     Command = 0xa9;
  58.     WriteCommandE1();
  59.     WriteCommandE2();

  60.     Command = 0xa0;
  61.     WriteCommandE1();
  62.     WriteCommandE2();

  63.     Command = 0xc0;
  64.     WriteCommandE1();
  65.     WriteCommandE2();

  66.     Command = 0xaf;
  67.     WriteCommandE1();
  68.     WriteCommandE2();

  69. }

  70. void Clear(){
  71.     unsigned char i, j;
  72.     i = 0;
  73.     do{
  74.         Command = (i + 0xb8);
  75.         WriteCommandE1();
  76.         WriteCommandE2();

  77.         Command = 0x00;
  78.         WriteCommandE1();
  79.         WriteCommandE2();
  80.         j = 0x50;
  81.         do{
  82.             LCDData = 0x00;
  83.             WriteDataE1();
  84.             WriteDataE2();
  85.         }while(--j!=0);
  86.     }while(++i!=4);
  87. }

  88. void Delay(){
  89.     unsigned char i, j;
  90.     i = 20;
  91.     j = 0;
  92.     do{
  93.         do{
  94.         }while(--j!=0);
  95.     }while(--i!=0);
  96. }

  97. void WriteCHN16x16(){
  98.     unsigned char i, j, k;
  99.     i = 0;
  100.     j = 0;
  101.     while(j<2){
  102.         Command = ((Page_ + j) & 0x03)|0xb8;
  103.         WriteCommandE1();
  104.         WriteCommandE2();
  105.         k = Column;
  106.         while(k < Column + 16){
  107.             if(k < PD1){
  108.                 Command = k;
  109.                 WriteCommandE1();
  110.                 LCDData = CCTAB[Code_][i];
  111.                 WriteDataE1();
  112.             }
  113.             else{
  114.                 Command = k-PD1;
  115.                 WriteCommandE2();
  116.                 LCDData = CCTAB[Code_][i];
  117.                 WriteDataE2();
  118.             }
  119.             i++;
  120.             if(++k >= PD1*2) break;
  121.         }
  122.         j++;
  123.     }
  124. }

  125. int main(){
  126.     Init();
  127.     Clear();
  128.     Page_ = 0x02;
  129.     Column = 0x00;
  130.     Code_ = 0x00;
  131.     WriteCHN16x16();
  132.         
  133.                 Page_ = 0x02;
  134.     Column = 0x10;
  135.     Code_ = 0x00;
  136.     WriteCHN16x16();

  137.     while(1);
  138. }
复制代码


作者: vvs1212    时间: 2020-3-5 14:43
真的很急,有人能帮忙看一下吗

作者: tangzhan    时间: 2022-2-1 15:12
我做的程序也是这样,proteus仿真时不对,但是实物连接时候却是正常的。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1