⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 g19264.lst

📁 这是一个用STC单片机作的,带液晶显示屏的万年历程序,并有串行接收部份,大家一定要珍惜用.
💻 LST
📖 第 1 页 / 共 5 页
字号:
C51 COMPILER V7.02b   G19264                                                               04/19/2008 20:43:15 PAGE 17  

 984   1                      {
 985   2                      cbyte = bigzf[x];                               /*取点阵码,rom数组     */
 986   2                      Wrdata(cbyte);                          /*写输出一字节          */
 987   2                      x++;
 988   2                      col++;
 989   2                      if (col==LCMLIMIT){col=0;row=row+2;};   /*下一列,如果列越界换行*/
 990   2                              if (row>7) row=0;               /*如果行越界,返回首行  */
 991   2                      }                                                       /*上半个字符输出结束    */
 992   1      
 993   1              col = bakerx;                                   /*列对齐                */
 994   1              row ++;//= bakery+2;                                    /*指向下半个字符行      */
 995   1      /*下半个字符输出,8列   */
 996   1              for(i=0;i<24;i++)
 997   1                      {
 998   2                      cbyte = bigzf[x];                               /*取点阵码              */
 999   2                      Wrdata(cbyte);                          /*写输出一字节          */
1000   2                      x++;
1001   2                      col++;
1002   2                      if (col==LCMLIMIT){col=0;row=row+2;};   /*下一列,如果列越界换行*/
1003   2                              if (row>7) row=1;               /*如果行越界,返回首行  */
1004   2                      }                                       /*下半个字符输出结束    */
1005   1      
1006   1              col = bakerx;                                   /*列对齐                */
1007   1              row++;// = bakery+4;                                    /*指向下半个字符行      */
1008   1      /*下半个字符输出,8列   */
1009   1              for(i=0;i<24;i++)
1010   1                      {
1011   2                      cbyte = bigzf[x];                               /*取点阵码              */
1012   2                      Wrdata(cbyte);                          /*写输出一字节          */
1013   2                      x++;
1014   2                      col++;
1015   2                      if (col==LCMLIMIT){col=0;row=row+2;};   /*下一列,如果列越界换行*/
1016   2                              if (row>7) row=1;               /*如果行越界,返回首行  */
1017   2                      }                                       /*下半个字符输出结束    */
1018   1      
1019   1              col = bakerx;                                   /*列对齐                */
1020   1              row++;// = bakery+6;                                    /*指向下半个字符行      */
1021   1      /*下半个字符输出,8列   */
1022   1              for(i=0;i<24;i++)
1023   1                      {
1024   2                      cbyte = bigzf[x];                               /*取点阵码              */
1025   2                      Wrdata(cbyte);                          /*写输出一字节          */
1026   2                      x++;
1027   2                      col++;
1028   2                      if (col==LCMLIMIT){col=0;row=row+2;};   /*下一列,如果列越界换行*/
1029   2                              if (row>7) row=1;               /*如果行越界,返回首行  */
1030   2                      }                                       /*下半个字符输出结束    */
1031   1              col = bakerx;                                   /*列对齐                */
1032   1              row++;// = bakery+8;                                    /*指向下半个字符行      */
1033   1      /*下半个字符输出,8列   */
1034   1              for(i=0;i<24;i++)
1035   1                      {
1036   2                      cbyte = bigzf[x];                               /*取点阵码              */
1037   2                      Wrdata(cbyte);                          /*写输出一字节          */
1038   2                      x++;
1039   2                      col++;
1040   2                      if (col==LCMLIMIT){col=0;row=row+2;};   /*下一列,如果列越界换行*/
1041   2                              if (row>7) row=1;               /*如果行越界,返回首行  */
1042   2                      }                                       /*下半个字符输出结束    */
1043   1              col = bakerx;                                   /*列对齐                */
1044   1              row++;//= bakery+10;                                    /*指向下半个字符行      */
1045   1      /*下半个字符输出,8列   */
C51 COMPILER V7.02b   G19264                                                               04/19/2008 20:43:15 PAGE 18  

1046   1              for(i=0;i<24;i++)
1047   1                      {
1048   2                      cbyte = bigzf[x];                               /*取点阵码              */
1049   2                      Wrdata(cbyte);                          /*写输出一字节          */
1050   2                      x++;
1051   2                      col++;
1052   2                      if (col==LCMLIMIT){col=0;row=row+2;};   /*下一列,如果列越界换行*/
1053   2                              if (row>7) row=1;               /*如果行越界,返回首行  */
1054   2                      }                                       /*下半个字符输出结束    */
1055   1      /*下半个字符输出,8列   */
1056   1      
1057   1              row=bakery;
1058   1              }                                               /*整个字符输出结束      */
1059          
1060          
1061          /****************************************/
1062          /*  全角字符点阵码数据输出              */
1063          /****************************************/
1064          void Putcdot(Uchar Order)
1065                  {
1066   1              Uchar i,bakerx,bakery;          /*共定义3个局部变量             */
1067   1              int x;                                          /*偏移量,字符量少的可以定义为UCHAR     */
1068   1              bakerx = col;                           /*暂存x,y坐标,已备下半个字符使用       */
1069   1              bakery = row;
1070   1              x=Order * 32;                           /*每个字符32字节        */
1071   1              
1072   1      /*上半个字符输出,16列  */
1073   1              for(i=0;i<16;i++)
1074   1                      {
1075   2                      Wrdata(HZ[x]);                          /*写输出一字节          */
1076   2                      x++;
1077   2                      col++;
1078   2                      if (col==LCMLIMIT){ col=0;row=row+2;}   /*下一列,如果列越界换行*/
1079   2                              if (row>7) row=0;               /*如果行越界,返回首行  */
1080   2                      }                                       /*上半个字符输出结束    */
1081   1                      
1082   1      /*下半个字符输出,16列  */
1083   1              col = bakerx;
1084   1              row = bakery+1;
1085   1              for(i=0;i<16;i++)                               /*下半部分*/
1086   1                      {
1087   2                      Wrdata(HZ[x]);
1088   2                      x++;
1089   2                      col++;
1090   2                      if (col==LCMLIMIT){col=0;row=row+2;}    /*下一列,如果列越界换行*/
1091   2                              if (row>7) row=1;               /*如果行越界,返回首行  */
1092   2                      }                                       /*下半个字符输出结束    */
1093   1              row = bakery;
1094   1              }                                               /*整个字符输出结束      */
1095          
1096          /****************************************/
1097          /*      清屏,全屏幕清零                */
1098          /****************************************/
1099          void Lcmcls( void )
1100                  {
1101   1              for(row=0;row<8;row++)
1102   1                      for(col=0;col<LCMLIMIT;col++) Wrdata(0);
1103   1              }
1104          
1105          /****************************************/
1106          /*  从液晶片上读数据,保留在全局变量中  */
1107          /****************************************/
C51 COMPILER V7.02b   G19264                                                               04/19/2008 20:43:15 PAGE 19  

1108          
1109          void Rddata(void)
1110                  {
1111   1                      Locatexy();             /*坐标定位,返回时保留分区状态不变      */
1112   1                      Datalcm=0xFF;
1113   1                      Dilcm = 1;      /*数据*/
1114   1                      Rwlcm = 1;      /*读数据*/
1115   1                      Elcm = 1;       /*读入到LCM*/
1116   1                      _nop_();
1117   1                      cbyte = Datalcm;        /*虚读一次 */
1118   1                      Elcm = 0;
1119   1                      Locatexy();             /*坐标定位,返回时保留分区状态不变      */
1120   1                      Datalcm=0xFF;
1121   1                      _nop_();
1122   1              Dilcm = 1;      /*数据*/
1123   1                      Rwlcm = 1;      /*读数据*/
1124   1                      Elcm = 1;       /*读入到LCM*/
1125   1                      _nop_();
1126   1                      cbyte = Datalcm;        /*从数据口读数据,真读 */
1127   1                      Elcm = 0;
1128   1      }
1129          
1130          /****************************************/
1131          /*      数据写输出                      */
1132          /****************************************/
1133          
1134          void Wrdata(Uchar X)
1135                  {
1136   1              Locatexy();             /*坐标定位,返回时保留分区状态不变      */
1137   1              wtcom();
1138   1                      Dilcm = 1;      /*数据输出*/
1139   1                      Rwlcm = 0;      /*写输出  */
1140   1                      Datalcm = X;    /*数据输出到数据口 */
1141   1                      Elcm = 1;       /*读入到LCM*/
1142   1                      _nop_();
1143   1                      Elcm = 0;
1144   1              }
1145          
1146          /********************************/
1147          /* 命令输出到左区控制口         */
1148          /********************************/
1149          
1150          void WrcmdL(Uchar X)
1151                  {
1152   1                      lcdbusyL();             /*确定分区,返回时保留分区状态不变*/
1153   1                      Dilcm = 0;                      /*命令操作      */
1154   1                      Rwlcm = 0;                      /*写输出        */
1155   1                      Datalcm = X;                    /*数据输出到数据口 */
1156   1                      Elcm = 1;_nop_();Elcm = 0;      /*读入到LCM*/
1157   1              }
1158          
1159          /********************************/
1160          /* 命令输出到中区控制口         */
1161          /********************************/
1162          
1163          void WrcmdM(Uchar X)
1164                  {
1165   1                      lcdbusyM();             /*确定分区,返回时保留分区状态不变*/
1166   1                      Dilcm = 0;                      /*命令操作      */
1167   1                      Rwlcm = 0;                      /*写输出        */
1168   1                      Datalcm = X;                    /*命令输出到数据口 */
1169   1                      Elcm = 1;_nop_();Elcm = 0;      /*读入到LCM*/
C51 COMPILER V7.02b   G19264                                                               04/19/2008 20:43:15 PAGE 20  

1170   1              }
1171          
1172          /********************************/
1173          /* 命令输出到右区控制口         */
1174          /********************************/
1175          
1176          void WrcmdR(Uchar X)
1177                  {
1178   1                      lcdbusyR();     /*确定分区,返回时保留分区状态不变      */
1179   1                      Dilcm = 0;                      /*命令操作      */
1180   1                      Rwlcm = 0;                      /*写输出        */
1181   1                      Datalcm = X;                    /*命令输出到数据口 */
1182   1                      Elcm = 1;_nop_();Elcm = 0;      /*读入到LCM*/
1183   1              }
1184          
1185          /********************************************************/
1186          /* 分区操作允许等待,返回时保留分区选择状态              */
1187          /********************************************************/
1188          void lcdbusyL(void)
1189                  {
1190   1              CS1LCM = 0;             /*CLR   CS1             */
1191   1              CS2LCM = 0;             /*SETB  CS2             */
1192   1             // CS3LCM = 1;           /*SETB  CS3             */
1193   1              wtcom();                /* waitting for enable  */
1194   1              }
1195          
1196          void lcdbusyM(void)
1197                  {
1198   1              CS1LCM = 0;             /*SETB  CS1             */
1199   1              CS2LCM = 1;             /*CLR   CS2             */
1200   1              //CS3LCM = 1;           /*SETB  CS3             */
1201   1              wtcom();                /* waitting for enable  */
1202   1              }
1203          
1204          void lcdbusyR(void)
1205                  {
1206   1              CS1LCM = 1;             /*SETB  CS1             */
1207   1              CS2LCM = 0;             /*SETB  CS2             */
1208   1             // CS3LCM = 0;           /*CLR   CS3             */
1209   1              wtcom();                   /* waitting for enable       */
1210   1              }
1211          
1212          void wtcom(void)
1213                  {
1214   1              Dilcm = 0;                  /*CLR       DI              */
1215   1              Rwlcm = 1;                  /*SETB      RW              */
1216   1          Datalcm = 0xFF;             /*MOV   DATA_LCM,#0FFH  */
1217   1              Elcm  = 1;_nop_();              
1218   1              while(Datalcm & Lcdbusy);//if BF=1;LCM is busy.
1219   1              Elcm  = 0;
1220   1              }
1221          
1222          /********************************************************/
1223          /*根据设定的坐标数据,定位LCM上的下一个操作单元位置     */
1224          /********************************************************/
1225          void Locatexy(void)
1226                  {
1227   1              unsigned char  x,y;
1228   1              switch (col&0xc0)               /*  col.and.0xC0,c0=1100,00

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -