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

📄 disp160_128.lst

📁 手表在液晶上动态显示
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.50   DISP160_128                                                           05/21/2009 07:54:16 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE DISP160_128
OBJECT MODULE PLACED IN Disp160_128.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Disp160_128.c OPTIMIZE(0,SPEED) BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include"t6963.h"
   2          #include"reg51.h"
   3          #include"tab.h"
   4          extern void Delay_500ms();
   5          //引脚定义
   6          sbit _CD=P1^5;
   7          sbit _RD=P1^6;
   8          sbit _WR=P1^7;
   9          //读状态函数
  10          unsigned char Read_State()
  11          {
  12   1                              unsigned char a;
  13   1                              P2=0xff;//读状态之前先将数据线拉高
  14   1                              _CD=1;  //1为指令通道,0为数据通道
  15   1                              _RD=0;
  16   1                              _RD=1;
  17   1                              a=P2;
  18   1                              return a;
  19   1      }
  20          //bit0指令写状态位,bit1数据读/写状态位,为1时候空闲
  21          void Enable()
  22          {
  23   1                              while(1)
  24   1                              if((Read_State()&3)==3)break;
  25   1      }
  26          //bit3数据自动写状态位,为1时候空闲
  27          void Aut_Write()
  28          {
  29   1                              while(1)
  30   1                              if((Read_State()&8)==8)break;
  31   1      }
  32          //写单参数函数,Data1为传入的参数,Com为传入的指令
  33          //注意:写入顺序为先数据后写指令,不可颠倒
  34          void Write_Data1(unsigned char Data1,unsigned char Com)
  35                                  {
  36   1                              Enable();
  37   1                              _CD=0;
  38   1                              P2=Data1;
  39   1                              _WR=0;
  40   1                              _WR=1;
  41   1                              Enable();
  42   1                              _CD=1;
  43   1                              P2=Com;
  44   1                              _WR=0;
  45   1                              _WR=1;
  46   1                              }
  47          //写双参数函数,Data1/Data2为传入的参数,Com为传入的指令
  48          //注意:写入顺序为先数据Data1后写数据Data2,最后写指令,不可颠倒
  49          void Write_Data2(unsigned char Data1,unsigned char Data2,unsigned char Com)
  50          {
  51   1                              Enable();
  52   1                              _CD=0;
  53   1                              P2=Data1;
  54   1                              _WR=0;
  55   1                              _WR=1;
C51 COMPILER V7.50   DISP160_128                                                           05/21/2009 07:54:16 PAGE 2   

  56   1                              Enable();
  57   1                              _CD=0;
  58   1                              P2=Data2;
  59   1                              _WR=0;
  60   1                              _WR=1;
  61   1                              Enable();
  62   1                              _CD=1;
  63   1                              P2=Com;
  64   1                              _WR=0;
  65   1                              _WR=1;
  66   1      }
  67          //写指令函数
  68          void Write_Com(unsigned char Com)
  69          {
  70   1                              Enable();
  71   1                              _CD=1;
  72   1                              P2=Com;
  73   1                              _WR=0;
  74   1                              _WR=1;
  75   1      }
  76          //写8字节数据函数Addr表示数据首地址,Way表示写的方式
  77          void Write_8_Data(unsigned char Addr,unsigned char Way)
  78          {
  79   1                              Aut_Write();//判断是否能自动写
  80   1                              Write_Com(AUT_WR);//自动写开始
  81   1                              Write_Data1(Addr,Way);
  82   1                              Write_Com(AUT_WO);//自动写结束
  83   1      }
  84          //设置数据显示在屏幕上的坐标(以字节为单位)
  85          //x表示显示的行(0~15),y表示显示的列(0~19)
  86          void Set_xy(unsigned char x,unsigned char y)
  87          {
  88   1                              unsigned int a;
  89   1                              a=x*20+y;
  90   1                              Write_Data2(a&0xff,a>>8,ADR_POS);
  91   1      }
  92          //设置数据存储起始地址
  93          void Set_Addr(unsigned char Addr1,unsigned char Addr2)
  94          {
  95   1                 Write_Data2(Addr1,Addr2,ADR_POS);
  96   1      }
  97          /*CGRAM偏置地址设置函数*/
  98          void Set_CGRAM()
  99          {
 100   1                 Write_Data2(1,0,CGR_POS);
 101   1      }
 102          //液晶初始化函数
 103          //(文本区首地址D1,文本区首地址D2, 文本区宽度,  
 104          //图形区首地址D1, 图形区首地址D2, 图形区宽度,   
 105          //光标形状,  显示方式,  显示开关)
 106          void LCD_Init(unsigned char Txt1,unsigned char Txt2,unsigned char Txt_Wide,
 107                        unsigned char Map1,unsigned char Map2,unsigned char Map_Wide,
 108                        unsigned char Guang_Biao,unsigned char Disp_Mode,unsigned char Kai_Guan)
 109                                  {
 110   1                              Write_Data2(Txt1,Txt2,TXT_STP);    //设置文本方式RAM起始地址
 111   1                              Write_Data2(Txt_Wide,0,TXT_WID);   //设置文本模式宽度,宽度为N/6或N/8,N为宽度点数,比如N=160
 112   1                              Write_Data2(Map1,Map2,GRH_STP);    //设置图形方式RAM起始地址
 113   1                              Write_Data2(Map_Wide,0,GRH_WID);   //设置图形模式的宽度,宽度为N/6或N/8,N为宽度点数,如160
 114   1                              Write_Com(CUR_SHP|Guang_Biao);
 115   1                              Write_Com(Disp_Mode);
 116   1                              Write_Com(DIS_SW|Kai_Guan);
 117   1      }
C51 COMPILER V7.50   DISP160_128                                                           05/21/2009 07:54:16 PAGE 3   

 118          //显示一个汉字子程序,
 119          //x表示显示的行(0~15),y表示显示的列(0~19),n表示字在表格中的位置
 120          void Han_Zi(unsigned char x,unsigned char y,unsigned char Addr)
 121          {
 122   1                              Set_xy(x,y);
 123   1                              Write_8_Data(Addr,INC_WR);
 124   1                              Write_8_Data(Addr+2,INC_WR);
 125   1                              Set_xy(x+1,y);
 126   1                              Write_8_Data(Addr+1,INC_WR);
 127   1                              Write_8_Data(Addr+3,INC_WR);
 128   1      }
 129          //清屏程序
 130          void Clear_LCD()
 131          {
 132   1      unsigned int a;
 133   1                              Set_xy(0,0);
 134   1                              for(a=0;a<320;a++)
 135   1                              Write_8_Data(0x80,INC_WR);
 136   1      }
 137          /*自定义字符写入CGROM函数*/
 138          void Write_CGORM()
 139          {
 140   1                              int a;
 141   1                              Set_CGRAM();
 142   1                              Set_Addr(0,0x0c);
 143   1                              for(a=0;a<2568;a++)
 144   1                              Write_8_Data(Tab[a],INC_WR);
 145   1      }
 146          //设置点显示在屏幕上的坐标(以位为单位)
 147          //x表示显示的行(0~127),y表示显示的列(0~159),n=1表示打个点,n=0清除一个点
 148          void Point(unsigned char x,unsigned char y,bit n)
 149          {
 150   1                              unsigned char point;
 151   1                              unsigned int temp;
 152   1                              temp=x*20+y/8+320;
 153   1                              point=0xf7-y%8;
 154   1                              if(n)point|=0xf8;
 155   1                              else point&=0xf7;
 156   1                              Write_Data2(temp&0xff,temp>>8,0x24);    //设置写地址
 157   1                              Write_Com(point);
 158   1      }
 159          //画线子程序,x1/y1/x2/y2,分别表示起点和终点的坐标、draw=1表示画直线为0表示清除直线
 160          void Line(unsigned char x1,unsigned char y1,unsigned char x2,unsigned char y2,bit n)
 161          {
 162   1                              unsigned char _x,_y;
 163   1                              unsigned char i,j=0,k=0;
 164   1                              unsigned char shang1,shang2,yu_shu;
 165   1                              if(x1>=x2)_x=x1-x2;
 166   1                              else _x=x2-x1;
 167   1                              if(y1>=y2)_y=y1-y2;
 168   1                              else _y=y2-y1;
 169   1                              if(!_x)
 170   1                                      {
 171   2                                      if(y1>y2)for(i=y2;i<=y1;i++)Point(x1,i,n);
 172   2                                      else     for(i=y1;i<=y2;i++)Point(x1,i,n);
 173   2                                      }
 174   1                              else if(!_y)
 175   1                                      {
 176   2                                      if(x1>x2)for(i=x2;i<=x1;i++)Point(i,y1,n);
 177   2                                      else     for(i=x1;i<=x2;i++)Point(i,y1,n);
 178   2                                      }
 179   1                              else if(_x>=_y)
C51 COMPILER V7.50   DISP160_128                                                           05/21/2009 07:54:16 PAGE 4   

 180   1                              {
 181   2                              shang1=_x/_y;
 182   2                              yu_shu=_x%_y;
 183   2                              shang2=_x/yu_shu;
 184   2                              //if(_x%yu_shu*10/yu_shu>=5)shang2+=shang2;
 185   2                              if((y2>y1)&&(x2>x1))

⌨️ 快捷键说明

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