demo.LST
上传用户:nbddcb
上传日期:2022-05-19
资源大小:48k
文件大小:11k
源码类别:

菜单

开发平台:

Visual C++

  1. C51 COMPILER V7.50   DEMO                                                                  04/08/2010 15:43:34 PAGE 1   
  2. C51 COMPILER V7.50, COMPILATION OF MODULE DEMO
  3. OBJECT MODULE PLACED IN demo.OBJ
  4. COMPILER INVOKED BY: C:KeilC51BINC51.EXE demo.C BROWSE DEBUG OBJECTEXTEND
  5. line level    source
  6.    1          #include <REGX51.H>
  7.    2          #include "demo.h"
  8.    3          
  9.    4          UCHAR  synchronization=SYN_INTERNAL;   //demo_choice=0;
  10.    5          /*********************************************************************************************************
  11.    6          ** 函数名称: Delay_ms
  12.    7          ** 功能描述: 延时ms毫秒 (不精确)
  13.    8          ********************************************************************************************************/
  14.    9          void Delay_ms (UINT ms)
  15.   10          {
  16.   11   1              UINT i,j,k;
  17.   12   1              for(k=0; k<ms; k++)
  18.   13   1            for(i=48; i>0; i--)
  19.   14   1              for(j=10; j>0; j--);
  20.   15   1      }
  21.   16          
  22.   17          /*********************************************************************************************************
  23.   18          ** 函数名称: MB90092_WriteByte
  24.   19          ** 功能描述: 向MB90092 写一个字节数据
  25.   20          ********************************************************************************************************/
  26.   21          void MB90092_WriteByte (UCHAR _data)
  27.   22          {
  28.   23   1              UCHAR i;
  29.   24   1      
  30.   25   1              ACC=_data;
  31.   26   1              CS=0;
  32.   27   1              for (i=8;i>0;i--)
  33.   28   1               {
  34.   29   2                 CLK=0;
  35.   30   2                 SIN = ACC_0;
  36.   31   2                 CLK=1;
  37.   32   2                 ACC>>=1;     
  38.   33   2           }
  39.   34   1          CS=1;
  40.   35   1      }
  41.   36          
  42.   37          /*********************************************************************************************************
  43.   38          ** 函数名称: MB90092_ClearXY
  44.   39          ** 功能描述: 清掉屏幕上面坐标(x,y)处的字符,y=0x00~0x0B and x=0x00~0x17 for main screen
  45.   40          ********************************************************************************************************/
  46.   41          void  MB90092_ClearXY (UCHAR x,UCHAR y)
  47.   42          {
  48.   43   1              UCHAR byte1,byte2;
  49.   44   1              
  50.   45   1              if (x>0x17||y>0x0B) 
  51.   46   1                 return;                             //invalid col number or row number
  52.   47   1      
  53.   48   1              byte1=((y>>2)&0x3)+0x80;
  54.   49   1              byte2=((y<<5)&0x60)+x;
  55.   50   1      
  56.   51   1              MB90092_WriteByte(byte1);             //command 0,设置写入地址,行和列
  57.   52   1              MB90092_WriteByte(byte2);
  58.   53   1      
  59.   54   1              MB90092_WriteByte(0x88);              //command1-1,定义字符颜色,背景颜色
  60.   55   1              MB90092_WriteByte(0x00);
  61. C51 COMPILER V7.50   DEMO                                                                  04/08/2010 15:43:34 PAGE 2   
  62.   56   1              
  63.   57   1              MB90092_WriteByte(0x90+62/128);       //command2-1,写入一个空格字符,地址62为空格符点阵
  64.   58   1              MB90092_WriteByte(62%128);
  65.   59   1      }
  66.   60          
  67.   61          /*********************************************************************************************************
  68.   62          ** 函数名称: MB90092_ClearRow
  69.   63          ** 功能描述: 清掉屏幕上面的第y行字符,y=0x00~0x0B for main screen
  70.   64          ********************************************************************************************************/
  71.   65          void  MB90092_ClearRow (UCHAR y)
  72.   66          {
  73.   67   1              UCHAR x;
  74.   68   1              
  75.   69   1              if (y>0x0B) 
  76.   70   1                return;                            //invlid row number
  77.   71   1              
  78.   72   1              for (x=0;x<0x18;x++)
  79.   73   1                MB90092_ClearXY (x,y);
  80.   74   1      }
  81.   75          
  82.   76          /*********************************************************************************************************
  83.   77          ** 函数名称: MB90092_ClearScreen
  84.   78          ** 功能描述: 清屏
  85.   79          ********************************************************************************************************/
  86.   80          void  MB90092_ClearScreen ()
  87.   81          {
  88.   82   1              UCHAR i;
  89.   83   1              for (i=0;i<0x0C;i++)
  90.   84   1                MB90092_ClearRow (i);
  91.   85   1      }
  92.   86          
  93.   87          /*********************************************************************************************************
  94.   88          ** 函数名称: MB90092_DisColor
  95.   89          ** 功能描述: MB90092颜色初始化
  96.   90          ********************************************************************************************************/
  97.   91          void  MB90092_DisColor (UCHAR y)
  98.   92          {
  99.   93   1              UCHAR temp1,temp2;
  100.   94   1              
  101.   95   1              temp1=((y>>2)&0x3)+0x84;
  102.   96   1              temp2=((y<<5)&0x60)+1;
  103.   97   1      
  104.   98   1              MB90092_WriteByte(temp1);             //command 0,设置写入地址,行和列
  105.   99   1              MB90092_WriteByte(temp2);
  106.  100   1      
  107.  101   1              MB90092_WriteByte(0x88);              //ff控制是否特显
  108.  102   1              MB90092_WriteByte(0x00);              //command1-1,设置字符颜色,背景颜色
  109.  103   1              
  110.  104   1              MB90092_WriteByte(0x90);              //command2-1,设置字符点阵在外rom的地址
  111.  105   1              MB90092_WriteByte(0x00);
  112.  106   1      }
  113.  107          
  114.  108          /*********************************************************************************************************
  115.  109          ** 函数名称: MB90092_DisChar
  116.  110          ** 功能描述: 在屏幕坐标(x,y)处显示一个字符,该字符的点阵存储地址为addr,为一24x32的矩形区域
  117.  111          ** 参  数:   x,y为屏幕坐标,addr为字符点阵在外rom的存储地址,mul为字符尺寸,bc为字符背景颜色,
  118.  112                       cc为字符颜色,ff控制是否特显.
  119.  113          ********************************************************************************************************/
  120.  114          void  MB90092_DisChar (UCHAR x,UCHAR y,int addr,UCHAR mul,UCHAR bc,UCHAR cc,UCHAR ff)
  121.  115          {
  122.  116   1              UCHAR temp1,temp2,color;
  123.  117   1      
  124. C51 COMPILER V7.50   DEMO                                                                  04/08/2010 15:43:34 PAGE 3   
  125.  118   1              if (x>0x17||y>0x0B) 
  126.  119   1                return;                             //invalid col number or row number
  127.  120   1              
  128.  121   1              temp1=((y>>2)&0x3)+0x80;
  129.  122   1              temp2=((y<<5)&0x60)+x;
  130.  123   1      
  131.  124   1              MB90092_WriteByte(temp1);             //command 0,设置写入地址,行和列
  132.  125   1              MB90092_WriteByte(temp2);
  133.  126   1      
  134.  127   1              MB90092_WriteByte(0xB0|mul);          //command 6,mul->字符尺寸控制(datasheel82),设置一整行
  135.  128   1              MB90092_WriteByte(0x20|y);
  136.  129   1      
  137.  130   1              if (synchronization==SYN_EXTERNAL)
  138.  131   1               {
  139.  132   2                 cc=7;
  140.  133   2                 bc=0;
  141.  134   2               }
  142.  135   1              color=((cc<<4)&0x70)|bc;
  143.  136   1      
  144.  137   1              MB90092_WriteByte(0x88|ff);           //ff控制是否特显
  145.  138   1              MB90092_WriteByte(color);             //command1-1,设置字符颜色,背景颜色
  146.  139   1              
  147.  140   1              MB90092_WriteByte(0x90+addr/128);     //command2-1,设置字符点阵在外rom的地址
  148.  141   1              MB90092_WriteByte(addr%128);
  149.  142   1      }
  150.  143          
  151.  144          
  152.  145          
  153.  146          /*********************************************************************************************************
  154.  147          ** 函数名称: MainScreen_Init
  155.  148          ** 功能描述: MB90092主屏初始化
  156.  149          ********************************************************************************************************/
  157.  150          void  MainScreen_Init (UCHAR bc)
  158.  151          {
  159.  152   1              UCHAR i;
  160.  153   1          CS=0;
  161.  154   1          Delay_ms(10);                         //程序开始时,要输入CS四次去清除上电复位,然后所作的设置才是有效
  162.              -的。
  163.  155   1          CS=1;
  164.  156   1          Delay_ms(10);
  165.  157   1          CS=0;
  166.  158   1          Delay_ms(10);
  167.  159   1          CS=1;
  168.  160   1          Delay_ms(10);
  169.  161   1          CS=0;
  170.  162   1          Delay_ms(10);
  171.  163   1          CS=1;
  172.  164   1          Delay_ms(10);
  173.  165   1          CS=0;
  174.  166   1          Delay_ms(10);
  175.  167   1          CS=1;
  176.  168   1          Delay_ms(10);
  177.  169   1      
  178.  170   1              MB90092_WriteByte(0xA0);              //command 4,首先选择内同步
  179.  171   1              MB90092_WriteByte(0x00);
  180.  172   1              
  181.  173   1              MB90092_WriteByte(0xAD);              //command 5
  182.  174   1              MB90092_WriteByte(0x10);              //KID=0;APC与颜色有关;GYZ=0;W3--W0为行间距;10101 KID APC GYZ0 BH2 
  183.              -BH1 BH0 W3 W2 W1 W0
  184.  175   1                      
  185.  176   1              MB90092_WriteByte(0xBC);              //command 7
  186.  177   1      //      MB90092_WriteByte(0x2A);              //垂直开始位置设定
  187. C51 COMPILER V7.50   DEMO                                                                  04/08/2010 15:43:34 PAGE 4   
  188.  178   1          MB90092_WriteByte(0x20); 
  189.  179   1      
  190.  180   1              MB90092_WriteByte(0xC0);              //command 8
  191.  181   1      //      MB90092_WriteByte(0x18);              //水平开始位置设定
  192.  182   1          MB90092_WriteByte(0x0A);
  193.  183   1         
  194.  184   1              MB90092_WriteByte(0xC8);              //command 9,GRM位设置普通模式或者扩展图形模式
  195.  185   1              MB90092_WriteByte(0x20);
  196.  186   1                      
  197.  187   1              MB90092_WriteByte(0xD1);              //command 10,设置普通模式/扩展图形模式,闪烁,字符背景,字符单色/彩色,
  198.              -背景单色/彩色
  199.  188   1              MB90092_WriteByte(0x38|bc);
  200.  189   1      
  201.  190   1         
  202.  191   1              MB90092_WriteByte(0xA2|synchronization);//command 4,内/外同步选择
  203.  192   1              MB90092_WriteByte(0x2B);
  204.  193   1      
  205.  194   1              for (i=0;i<0x0B;i++)
  206.  195   1                MB90092_DisColor (i);
  207.  196   1      
  208.  197   1              MB90092_ClearScreen ();
  209.  198   1      }
  210.  199          
  211. MODULE INFORMATION:   STATIC OVERLAYABLE
  212.    CODE SIZE        =    415    ----
  213.    CONSTANT SIZE    =   ----    ----
  214.    XDATA SIZE       =   ----    ----
  215.    PDATA SIZE       =   ----    ----
  216.    DATA SIZE        =      1       8
  217.    IDATA SIZE       =   ----    ----
  218.    BIT SIZE         =   ----    ----
  219. END OF MODULE INFORMATION.
  220. C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)