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

📄 led.lst

📁 用8051控制DDS信号发生器
💻 LST
字号:
C51 COMPILER V6.10  LED                                                                    09/16/2005 10:13:25 PAGE 1   


C51 COMPILER V6.10, COMPILATION OF MODULE LED
OBJECT MODULE PLACED IN .\led.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE .\led.c DEBUG OBJECTEXTEND

stmt level    source

   1          
   2          #include "led.h"
   3          
   4          bit flag_9833=0;
   5          unsigned char key_timer,count,led_sel,show_sel,key_in,key_hiter,key_undeal,key_buf[4],timer_counter;
   6          unsigned char sel_9833,deal_counter,deal_buf[6],deal_device,point_loc,error_no,preset_ok;
   7          unsigned char show_buf[6],seri_buf[8];
   8          unsigned char step,ask,psk;
   9          
  10          unsigned long f_in,fa,f1;
  11          unsigned int add,f_buf[10];
  12          //unsigned char code para_avl[4]="有效";
  13          
  14          unsigned int code freq_regs[2] ={0x0051,0x3ae1};//100KHz
  15          
  16          
  17          unsigned char code led_code[28][2]={{'0',0x3f},{'1',0x06},{'2',0x5b},{'3',0x4f},{'4',0x66},
  18          									{'5',0x6d},{'6',0x7d},{'7',0x07},{'8',0x7f},{'9',0x6f},
  19          									{'A',0x77},{'B',0x7C},{'C',0x39},{'D',0x5E},{'E',0x79},
  20          									{'F',0x71},{'H',0x76},{'L',0x38},{'O',0x5C},{'P',0x73},
  21          									{'U',0x3E},{'R',0x50},{'Y',0x6E},{'.',0x80},{'-',0x40},
  22          									{'=',0x48},{0X00,0X00},{0Xff,0Xff}};
  23          
  24          extern void Initial9833(void);
  25          /***********************************************************************/
  26          void init_timer()
  27          {
  28   1      
  29   1      	TH0=0xcf;
  30   1      	TL0=0X00;
  31   1      	TR0=1;
  32   1              ET0=1;
  33   1      	timer_counter=0;
  34   1      }
  35          /**********************************************************************/
  36          
  37          void init_8155()
  38          {
  39   1      
  40   1       Order_state=0x03;
  41   1       led_contrl=0;
  42   1       show_sel=0xfe;
  43   1       led_sel=0x00;
  44   1       key_timer=0;
  45   1       key_hiter=0x0f;
  46   1       key_in=0xff;
  47   1       key_undeal=0;
  48   1       key_buf[0]= key_buf[1]= key_buf[2]= key_buf[3]=0;
  49   1      }
  50          /**********************************************************************/
  51          void get_show(unsigned long f)
  52          {
  53   1      unsigned char i;        
  54   1       			if(f<100000){  
  55   2                                           show_buf[5]=0x00;
C51 COMPILER V6.10  LED                                                                    09/16/2005 10:13:25 PAGE 2   

  56   2                                           }
  57   1      			else {	i=f/100000; 
  58   2                              	 show_buf[5]=led_code[i][1];	f=f%100000;}
  59   1      			if(f<10000){	show_buf[4]=f_in<10000?0x0:led_code[0][1];}
  60   1      			else {	i=f/10000;
  61   2                              	show_buf[4]=led_code[i][1];	f=f%10000;}
  62   1      			if(f<1000)
  63   1                              {	show_buf[3]=f_in<1000?0x0:led_code[0][1];}
  64   1      			else {	i=f/1000;	show_buf[3]=led_code[i][1];	f=f%1000;}
  65   1      			if(f<100){		show_buf[2]=f_in<100?0x0:led_code[0][1];}
  66   1      			else {	i=f/100;	show_buf[2]=led_code[i][1];	f=f%100;}
  67   1      			if(f<10){i=f/10;		show_buf[1]=led_code[i][1]|0x80;}
  68   1      			else {	i=f/10;	show_buf[1]=(led_code[i][1]| 0x80);	i=f%10;}
  69   1      			show_buf[0]=led_code[i][1];     
  70   1      }
  71          /*********************************************************************/
  72          
  73          void Initial9833()
  74          {
  75   1              	f_buf[0]=freq_regs[1];        //f0_low
  76   1      	    	f_buf[1]=freq_regs[0];     	//f0_high
  77   1      	    	f_buf[2]=0;     	//f1_low
  78   1      	    	f_buf[3]=0;     	//f1_high
  79   1      	    	f_buf[4]=0;						//p0
  80   1      	    	f_buf[5]=2048;						//p1
  81   1      		    control=0;        b28=1;//fsel=1;
  82   1       			Control_9833();
  83   1      
  84   1      			ask=0;psk=0;step=1;
  85   1      			f_in=1000;
  86   1      			get_show(f_in);
  87   1      
  88   1      }
  89          
  90          
  91          
  92          void time0() interrupt 1
  93          {
  94   1      TH0=0xff;
  95   1      TL0=0xce;                    //定时器0中断十个us     //此处应改为5us,如10KHz应改为50us
  96   1      timer_counter++;
  97   1      if(timer_counter>20)
  98   1      	{                    //此处也许应改为200
  99   2      timer_counter=0;
 100   2      key_timer=1;
 101   2      	}
 102   1      sk_signal=~sk_signal;
 103   1      if(ask){
 104   2      	if(sk_signal)Write9833(control);
 105   2      	else	Write9833(control | 0x0800);
 106   2      	}
 107   1      
 108   1      else if(psk){
 109   2      	if(sk_signal)Write9833(control);
 110   2      	else	Write9833(control | 0x0400);
 111   2      	}
 112   1      
 113   1      
 114   1      }
 115          
 116          
 117          /******************************调整X9C102********************************/
C51 COMPILER V6.10  LED                                                                    09/16/2005 10:13:25 PAGE 3   

 118          
 119          void POT(bit updown)
 120          {
 121   1      	AGC_CTL = 0;
 122   1          UP=updown;
 123   1      	while(step--){
 124   2      		INC=1;_nop_();_nop_();_nop_();_nop_();_nop_();
 125   2      		INC=0;}
 126   1      	INC=1;
 127   1      	AGC_CTL = 1;
 128   1      }
 129          /*********************************************************************/
 130          void main(void)
 131          {
 132   1      	init_8155();
 133   1      	init_timer();
 134   1      	Initial9833();
 135   1      	EA=1;
 136   1                while(1) {
 137   2                        FEED_DOG;
 138   2      		if(key_timer){
 139   3      			key_timer=0;
 140   3      			if(led_sel>0 && led_sel <5 ){
 141   4      				if(key_hiter != 0x0f   && led_sel <5 ){     //有键按下
 142   5      					key_in=(port_c & 0x0f );				//读键
 143   5      					if(key_in != 0x0f ){					//键有效
 144   6      						if( key_in != key_buf[led_sel-1]){	//新键
 145   7      							key_undeal=1;	key_buf[led_sel-1] = key_in;
 146   7                              	switch(key_in){
 147   8      								case 0x0e:
 148   8      									key_in=16-led_sel;
 149   8      									break;
 150   8      								case 0x0d:
 151   8      									key_in=12-led_sel;
 152   8      									break;
 153   8      								case 0x0b:
 154   8      									key_in=8-led_sel;
 155   8      									break;
 156   8      								case 0x07:
 157   8      									key_in=4-led_sel;
 158   8      									break;
 159   8      								default:
 160   8      									key_buf[led_sel-1] = key_in=0x0f; 	key_undeal=0;
 161   8      									break;		}}}
 162   5      
 163   5      					else {key_buf[led_sel-1] =	0x0f;}}		//键无效
 164   4      				else{key_buf[led_sel-1] =	0x0f;	}}	//键释放
 165   3      
 166   3      			port_b=0xff;
 167   3      			port_a=show_buf[led_sel];
 168   3      			port_b=show_sel;
 169   3      			led_sel++;
 170   3      			show_sel=(show_sel<<1)+1;
 171   3      			if(led_sel>5){
 172   4      				led_sel=0;
 173   4      				show_sel=0xfe;}
 174   3      			key_hiter= (port_c & 0x0f);	}           //检测按键
 175   2      			if(key_undeal){
 176   3      					key_undeal=0;
 177   3      					deal_counter=0;
 178   3      					switch(key_in){
 179   4      						case 0x00:		//↑
C51 COMPILER V6.10  LED                                                                    09/16/2005 10:13:25 PAGE 4   

 180   4      						case 0x01:		//↓
 181   4      						case 0x02:		//←
 182   4      						case 0x03:		//→
 183   4      							if(key_in==0x0)	{	f_in=f_in+1000;if(f_in>100000)f_in=100000;}
 184   4      							if(key_in==0x1)	{	f_in=f_in-1000;if(f_in<10)f_in=10;}
 185   4      							if(key_in==0x2)	{	f_in++;if(f_in>100000)f_in=100000;}
 186   4      							if(key_in==0x3)	{	f_in--;if(f_in<10)f_in=10;}
 187   4      
 188   4      							fa=f_in<<12;			//*2**27/10**8
 189   4      							if((fa%25)>12) fa=fa/25+1;
 190   4      							else fa=fa/25;
 191   4      							fa=fa<<5;
 192   4      							if((fa%25)>12) fa=fa/25+1;
 193   4      							else fa=fa/25;
 194   4      							fa=fa<<5;
 195   4      							if((fa%5)>2) fa=fa/5+1;
 196   4      							else fa=fa/5;
 197   4      							f_buf[0]=(unsigned int )(fa & 0x03fff);
 198   4      							f_buf[1]=(unsigned int )(fa >>14);
 199   4      							add = f0write;
 200   4                              	                        Write9833(0x2000);
 201   4      							Write9833(f_buf[0] | add);
 202   4      							Write9833(f_buf[1] | add);
 203   4      							Write9833(control );
 204   4      							get_show(f_in);
 205   4      							break;
 206   4      
 207   4      						case 0x04:		// 
 208   4      						case 0x05:		// 三角波;
 209   4      						case 0x06:		// 方波/2;
 210   4      						case 0x07:		// 方波;
 211   4      							control=0;
 212   4      							if(key_in==0x05){mode=1;	ask=0;	psk=0;}// 三角波
 213   4      							if(key_in==0x06){opb=1;		ask=0;	psk=0;}	// 方波/2;
 214   4      							if(key_in==0x07){opb=1;		div2=1;	ask=0;	psk=0;}// 方波;
 215   4      							Write9833(control);
 216   4      							break;
 217   4      						case 0x08:		// ask;
 218   4      						case 0x09:		// psk;
 219   4      							if(key_in==8){ask=1;	psk=0;}// ask;
 220   4      							else if(key_in==9){psk=1;	ask=0;}// psk
 221   4      							control=0;
 222   4              					f_buf[0]=freq_regs[1];        //f0_low
 223   4      	    					f_buf[1]=freq_regs[0];     	//f0_high
 224   4      							add = f0write;
 225   4                              	Write9833(0x2000);
 226   4      							Write9833(f_buf[0] | add);
 227   4      							Write9833(f_buf[1] | add);
 228   4      							break;
 229   4      						case 0x0e:			//减小
 230   4      							step=1;				
 231   4      							POT(0);
 232   4      							break;
 233   4      						case 0x0f:		//增大
 234   4      							step=1;				
 235   4      							POT(1);
 236   4      							break;
 237   4      
 238   4      						default:
 239   4      							break;}
 240   3      				}
 241   2      
C51 COMPILER V6.10  LED                                                                    09/16/2005 10:13:25 PAGE 5   

 242   2      
 243   2      	}
 244   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1981    ----
   CONSTANT SIZE    =     60    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     75       5
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1       1
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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