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

📄 main.lst

📁 信号发生器界面菜单程序,有串和并口两种源程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.01   MAIN                                                                  12/07/2007 20:43:05 PAGE 1   


C51 COMPILER V8.01, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include<reg51.h>
   2          #include <stdlib.h>
   3          #include <intrins.h>
   4          #define uchar unsigned char
   5          #define uint unsigned int
   6          #define ulong unsigned long
   7          sbit key_port0=P1^0;
   8          sbit key_port1=P1^1;
   9          sbit key_port2=P1^2;
  10          sbit key_port3=P1^3;
  11          sbit key_port4=P1^4;
  12          sbit lcd_da=P1^5;
  13          sbit lcd_clk=P1^6;
  14          sbit data_in=P2^3;
  15          sbit data_clk=P2^4;
  16          sbit control_oe=P2^5;
  17          sbit control_in=P2^6;
  18          sbit control_clk=P2^7;
  19          sbit dds_da=P3^3;
  20          sbit dds_clk=P3^4;
  21          sbit dds_ag=P3^5;
  22          bit have_data=0;
  23          uchar data line[9];
  24          uchar p;
  25          uchar up_down=1;
  26          uchar data word[5]={0x22,0x22,0x22,0x02,0x01};
  27          uchar code fre[]={"1.频率调节"};
  28          uchar code am[]={"2.AM幅度调制"};
  29          uchar code pa_sk[]={"3.产生psk,ask"};
  30          uchar code fm[]={"4.FM频率调制"};
  31          uchar code fre_mode_tab1[]={"请输入频率后按确"};
  32          uchar code fre_mode_tab2[]={"定输出或按返回重"};
  33          uchar code fre_mode_tab3[]={"新输入!"};
  34          uchar code fre_mode_tab4[]={"        (Hz)"};
  35          uchar code am_mode_tab1[]={"请选择调制度Ma"};
  36          uchar code am_mode_tab2[]={"10%"};
  37          uchar code pa_sk_mode_tab1[]={"选择ASK/PSK.模式"};
  38          uchar code pa_sk_mode_tab2[]={"  ASK  PSK  "};
  39          uchar code pa_sk_mode_tab3[]={"输入基带序列编码"};
  40          uchar code fm_mode_tab1[]={"按左右键选择频偏"};
  41          uchar code fm_mode_tab2[]={" 5K  10K"};
  42          uchar code fm_mode_tab3[]={"请输入载波频率"};
  43          /******************************送FPGA控制数据*************************************/
  44          //---------------------------------------------------送控制指令
  45          void send_control(uchar x){
  46   1      uchar i;  CY=0;
  47   1       for(i=0;i<8;i++)
  48   1       {
  49   2        x<<=1;
  50   2       control_in=CY;
  51   2       control_clk=0;
  52   2       control_clk=1;
  53   2       control_clk=0;
  54   2       }
  55   1      control_oe=1;
C51 COMPILER V8.01   MAIN                                                                  12/07/2007 20:43:05 PAGE 2   

  56   1      control_oe=0;
  57   1      control_oe=1;
  58   1       }
  59          //-----------------------------------------------送数据
  60          void send_data(uchar x){
  61   1      uchar i; CY=0;
  62   1      for(i=0;i<8;i++){
  63   2       x<<=1;
  64   2       data_in=CY;
  65   2       data_clk=0;
  66   2       data_clk=1;
  67   2       data_clk=0;
  68   2       }
  69   1       }
  70          //------------------------------------
  71          void send_dds_bit(uchar num)
  72          {
  73   1       uchar i;
  74   1       CY=0;
  75   1       for(i=0;i<8;i++)
  76   1       {
  77   2        num=num>>1;
  78   2        dds_da=CY;
  79   2        dds_clk=1;
  80   2        dds_clk=0;
  81   2       }
  82   1      }
  83          //-------------------------------------------------数据转化
  84          void send_dds_data(void)
  85          {
  86   1       uchar i;
  87   1       uchar x0,x1,x2,x3;
  88   1       float y;
  89   1       ulong z;
  90   1       y=atof(line);
  91   1       z=y*35.7913941;
  92   1       x0=z/16777216;word[3]=x0;
  93   1       x1=(z%16777216)/65536;word[2]=x1;
  94   1       x2=((z%16777216)%65536)/256;word[1]=x2;
  95   1       x3=(((z%16777216)%65536)%256)/1;word[0]=x3;
  96   1       for(i=0;i<5;i++)
  97   1       {
  98   2        send_dds_bit(word[i]);
  99   2       }
 100   1        dds_ag=1;
 101   1        dds_ag=0;
 102   1      }
 103          /**************************以下为液晶显示子程序***********************/
 104          void lcd_delay(void)                       //显示延时1MS
 105          {
 106   1       uint i;
 107   1       for(i=0;i<50;i++);
 108   1       _nop_();
 109   1      }
 110          //------------------------------------发数据
 111          void lcd_send_data(uchar mun)
 112          {
 113   1       uchar i;
 114   1       for(i=0;i<8;i++)
 115   1       {
 116   2          lcd_clk=0;
 117   2        if((mun&0x80)!=0)lcd_da=1;
C51 COMPILER V8.01   MAIN                                                                  12/07/2007 20:43:05 PAGE 3   

 118   2          else lcd_da=0;
 119   2          lcd_clk=1;
 120   2        mun=mun<<1;
 121   2       }
 122   1      }
 123          //-----------------------------------------------写指令
 124          void lcd_write_ins(uchar num)
 125          {
 126   1       uchar hdata,ldata;
 127   1       hdata=num&0xf0;
 128   1       ldata=((num<<4)&0xf0);                                 
 129   1       lcd_send_data(0xf8);
 130   1       lcd_delay();
 131   1       lcd_send_data(hdata);
 132   1       lcd_delay();
 133   1       lcd_send_data(ldata);
 134   1       lcd_delay();
 135   1      }
 136          //-----------------------------------写数据
 137          void lcd_write_da(uchar num)
 138          {
 139   1       uchar hdata,ldata;
 140   1       hdata=num&0xf0;
 141   1       ldata=((num<<4)&0xf0);
 142   1       lcd_send_data(0xfa);
 143   1       lcd_delay();
 144   1       lcd_send_data(hdata);
 145   1       lcd_delay();
 146   1       lcd_send_data(ldata);
 147   1       lcd_delay();
 148   1      }
 149          //-------------------------------------X表示第几个字,Y表示第几行,Z表示字符;
 150          void lcd_show(uchar x,uchar y,uchar *z)
 151          {
 152   1        switch (y)
 153   1        {
 154   2          case 1:lcd_write_ins(0x80+x-1);break;
 155   2          case 2:lcd_write_ins(0x90+x-1);break;
 156   2          case 3:lcd_write_ins(0x88+x-1);break;
 157   2          case 4:lcd_write_ins(0x98+x-1);break;
 158   2              default:break;
 159   2        }
 160   1        while(*z)
 161   1        {
 162   2        lcd_write_da(*z++);
 163   2        }
 164   1       }
 165          //--------------------------------------------
 166          //12864液晶反白子程序
 167          //X第几个字(1~8),Y第几行(1~4行),width反白的宽度(1~16)(单位:字符)
 168          //若width==0则上次反白的位置变为正常显示,若width!=0,上次反白的位
 169          //置变为正常显示,则这次反白的位置反白。
 170          void fan(uchar lcd_x,uchar lcd_y,uchar width)
 171          {
 172   1       uchar xx,yy,i,j;
 173   1       yy=0x80;xx=0x80;       //下半屏绘图区X,y轴地址
 174   1       lcd_write_ins(0x36);        //扩展指令模式,形图开关开
 175   1       for (i=0;i<32;i++)     //上半屏处理显示空白
 176   1       {
 177   2         lcd_write_ins(yy++);lcd_write_ins(xx);
 178   2         for (j=0;j<16;j++)
 179   2         { lcd_write_da(0x00);}
C51 COMPILER V8.01   MAIN                                                                  12/07/2007 20:43:05 PAGE 4   

 180   2       }
 181   1       yy=0x80;xx=0x88;         //下半屏绘图区X,轴地址
 182   1       for (i=0;i<32;i++)     //下半屏处理显示空白
 183   1       {
 184   2         lcd_write_ins(yy++);  lcd_write_ins(xx);
 185   2         for (j=0;j<16;j++)
 186   2         { lcd_write_da(0x00); }
 187   2       }
 188   1       lcd_write_ins(0x30);       //基本指令模式
 189   1      
 190   1      //-------------------------------------------
 191   1       if(width!=0)                  //如果width不等0,则反白选中区域并存此次的参数
 192   1       {
 193   2        if(lcd_y>2)
 194   2        {
 195   3         xx=lcd_x+0x87;
 196   3         yy=((lcd_y-3)<<4)+0x80;
 197   3        }
 198   2        else
 199   2        {
 200   3         xx=lcd_x+0x7f;
 201   3         yy=((lcd_y-1)<<4)+0x80;
 202   3        }
 203   2       //--------------------反白选中区域----------------------------
 204   2        lcd_write_ins(0x36);              //扩展指令模式,形图开关开
 205   2        for (i=0;i<16;i++)           //一行处理显示
 206   2        {
 207   3        lcd_write_ins(yy++);lcd_write_ins(xx);
 208   3         for (j=0;j<width;j++)
 209   3         { lcd_write_da(0xff);}
 210   3        }
 211   2        lcd_write_ins(0x30);              //基本指令模式
 212   2       }
 213   1      }
 214          //----------------------------------------------lcd初始化
 215          void lcd_begin(void)
 216          {
 217   1      lcd_delay();
 218   1      lcd_write_ins(0x30);
 219   1      lcd_write_ins(0x08);
 220   1      lcd_write_ins(0x0e);
 221   1      lcd_write_ins(0x01);
 222   1      lcd_write_ins(0x06);

⌨️ 快捷键说明

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