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

📄 lamp1.lst

📁 驱动显示屏硬件的栅和段的位数
💻 LST
字号:
C51 COMPILER V7.50   LAMP1                                                                 04/06/2009 00:03:06 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE LAMP1
OBJECT MODULE PLACED IN lamp1.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE lamp1.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include<reg52.h>
   2          #include<stdio.h>
   3          #include<string.h>
   4          #include<math.h>
   5          #include<absacc.h>
   6          #define uchar unsigned char
   7          #define uint  unsigned int
   8          #define ulong unsigned long
   9          #define cm1 co1.co1
  10          #define cm2 co2.co2
  11          #define cm3 co3.co3
  12          #define cm4 co4.co4
  13          #include <reg52.h>
  14          #define cmdd 0
  15          #define datt 1
  16          sbit dat=P1^3;
  17          sbit clk=P1^2;
  18          sbit stb=P1^1;
  19          union
  20          {
  21            uchar dat;
  22            struct
  23           {
  24             uchar dms: 3; //选择显示屏硬件的栅和段的位数
  25             uchar dnc: 3; //数据空位
  26             uchar ad1: 2; //此命令的地址值固定为0X00
  27           }co1;
  28          }co1;
  29          union 
  30          {
  31            uchar dat;
  32            struct
  33           {
  34            uchar fru: 2; //功能选择:00:WRITE DATA TO DISRAM 01:WRITE DATA TO LED 02:READ DATA FROM KEY 03:READ
             - DATA FROM SW
  35            uchar mad: 1; //0递增 1指定地址
  36            uchar mst: 1; //0正常 1测试模式
  37            uchar dnc: 2; //数据空位
  38            uchar ad2: 2; //此命令的地址值固定为0X01
  39           }co2;
  40          }co2;
  41          union
  42          {
  43            uchar dat;
  44            struct
  45           {
  46            uchar add: 5; //16312内部DISRAM地址选择
  47            uchar dnc: 1; //数据空位
  48            uchar ad3: 2; //此命令的地址值固定为0X03
  49           }co3;
  50          }co3;
  51          union
  52          {
  53            uchar dat;
  54            struct
C51 COMPILER V7.50   LAMP1                                                                 04/06/2009 00:03:06 PAGE 2   

  55           {
  56             uchar pwm: 3; //输出点亮时间选择(可以调节亮度)
  57             uchar dis: 1; //0显示关闭
  58             uchar dnc: 2; //数据空位
  59             uchar ad4: 2; //此命令的地址值固定为0X02
  60           }co4;
  61          }co4;
  62          
  63          void wrd(uchar disno,bit lei)  //写一个字节的命令或者数据(由LEI控制是写数据还是写命令)
  64          {
  65   1        uchar a;
  66   1        if(lei)
  67   1        goto s;
  68   1        stb=1;
  69   1        stb=1;
  70   1        stb=0;
  71   1       s:  for(a=0;a<8;a++)
  72   1          {
  73   2           clk=1;
  74   2           clk=1;
  75   2               clk=0;
  76   2           clk=0;
  77   2            if(disno&0x01)
  78   2              dat=1;
  79   2            else
  80   2              dat=0;
  81   2              disno=disno>>1;
  82   2              clk=1;
  83   2              clk=1;
  84   2                      clk=1;
  85   2              clk=1;
  86   2           }
  87   1      }
  88          void inivfd(void)
  89           {
  90   1        cm1.dms=0x01;//设置为5区 16段
  91   1        cm1.ad1=0x00;
  92   1        cm2.mad=0x01;//地址模式为指定地址
  93   1        cm2.mst=0x00;//取消测试
  94   1        cm2.ad2=0x01;
  95   1        cm3.ad3=0x03;
  96   1        cm4.pwm=0x07;//亮度为最亮
  97   1        cm4.dis=0x01;//打开显示
  98   1        cm4.ad4=0x02;
  99   1       }
 100           /////////////////////////////************以下为主程序*************************//////////////////////
 101          void wrvfd(uchar addr,uchar dat) //向VFD指定地址写数据
 102            {
 103   1        inivfd();
 104   1        wrd(co1.dat,cmdd);
 105   1        stb=1;
 106   1        cm2.fru=0x00;
 107   1        wrd(co2.dat,cmdd);
 108   1        stb=1;
 109   1        cm3.add=addr;
 110   1        wrd(co3.dat,cmdd);
 111   1        wrd(dat,datt);
 112   1        stb=1;
 113   1        wrd(co4.dat,cmdd);
 114   1        stb=1;
 115   1        }
 116          void wrled(uchar leddata) //控制16312的四个输出口数据存放在LEDDATA的低四位
C51 COMPILER V7.50   LAMP1                                                                 04/06/2009 00:03:06 PAGE 3   

 117          {
 118   1        inivfd();
 119   1        cm2.fru=0x01;
 120   1        wrd(co2.dat,cmdd);
 121   1        wrd(leddata,datt);
 122   1        stb=1;
 123   1      }                                                
 124          ulong rdkey()                   //读键盘
 125          { ulong key=0;
 126   1        uchar i;
 127   1        inivfd();
 128   1        cm2.fru=0x02;
 129   1        wrd(co2.dat,cmdd);
 130   1        for(i=0;i<24;i++)
 131   1        {
 132   2         clk=1;
 133   2         clk=1;
 134   2         clk=0;
 135   2         clk=0;
 136   2         clk=0;
 137   2         clk=1;
 138   2         dat=1;
 139   2         if(dat==1)
 140   2         key=(key<<1)+1;
 141   2         else
 142   2         key=(key<<1);
 143   2        }
 144   1        return(key);
 145   1      }
 146          
 147          main()//                         测试程序
 148          {
 149   1      uchar i;
 150   1      ulong k;
 151   1      for(i=0;i<16;i++)
 152   1      wrvfd(i,0xff);     //点亮VFD荧光屏上所有的数据段
 153   1      wrled(0x0f);       //使16312上的输出口置高电平
 154   1      while(1)
 155   1      k=rdkey();                 //读键盘实验,实际应用中应参照数据手册取值(如按下某一个按键应读读几次,其中只有一次是正确

⌨️ 快捷键说明

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