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

📄 wavegen.lst

📁 12 bits DAC TLV5618 program
💻 LST
字号:
C51 COMPILER V6.12  WAVEGEN                                                                04/04/2009 15:07:09 PAGE 1   


C51 COMPILER V6.12, COMPILATION OF MODULE WAVEGEN
OBJECT MODULE PLACED IN .\WaveGen.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE .\WaveGen.c DEBUG OBJECTEXTEND

stmt level    source

   1          /***************************PROGRAM FUNCTION*******************************/
   2          //        TLV5618产生从0-5V变化的电压(锯齿波),DA数据每次变化1位,即电压增量=1.22mV  //
   3          //        数码管显示预期电压值															//
   4          //        预期电压值和万用表测得的电压值有出入									   //
   5          //        待改进:小数显示时的四舍五入问题,尝试其它小数显示的算法			   //
   6          //        模式设置:R1=1,SPD=1,PWR=0,R0=0--使用OUTPUT A进行输出             // 
   7          #include<reg52.h>	  
   8          #define uCHAR unsigned char 
   9          #define uint unsigned int	 
  10          sbit DACS1 = P2^5;     //5618/5617 CHIP SELECT
  11          sbit DASDA = P1^1;
  12          sbit DASCL = P1^0;
  13          sbit seg_latch=P2^6;
  14          sbit bit_latch=P2^7;
  15          
  16          uCHAR code table[]={0x3f,0x03,0x6D,0x67,
  17                0x53,0x76,0x7E,0x23, 
  18                0x7F,0x77,0x7B,0x5E,	 
  19                0x3C,0x4F,0x7C,0x78};//my code
  20          void SendDA(uCHAR data0,uCHAR data1,bit data2); //发送待进行DA转换的数据
  21          void delay(uint z);
  22          void SendDA(uCHAR data0,uCHAR data1,bit data2)	//bit变量只取0或1
  23          {
  24   1      	unsigned char i;    
  25   1      	DASDA=1;
  26   1      	DASCL=1; 
  27   1      	DACS1 = 0; 
  28   1      	if(data2) 
  29   1      	{
  30   2      		data0|=0x40;	//SPD=1:fast mode
  31   2      	}//data2决定工作模式
  32   1      	else 
  33   1      	{
  34   2      		data0|=0xc0;	 //R1=1,SPD=1
  35   2      	}
  36   1      	//data0中高四位为模式设置位,低四位为数据位
  37   1      	for (i=0;i<8;i++)
  38   1      	{         
  39   2      		DASDA=(bit)(data0&0x80);//给一位数据
  40   2      		DASCL=1; 
  41   2      		DASCL=0;  //给一个脉冲
  42   2      		data0<<=1;//移到下一位
  43   2      	}
  44   1      	//data1为12位数据的低8位
  45   1      	for (i=0;i<8;i++)
  46   1      	{           
  47   2      		DASDA=(bit)(data1&0x80);
  48   2      		DASCL=1;
  49   2      	   DASCL=0; 
  50   2      		data1<<=1;
  51   2      	}
  52   1      	DASDA= 1;   //为下次作准备	   
  53   1      	DACS1= 1;   //为下次作准备
  54   1      }
  55          void DA(uint outputa)
C51 COMPILER V6.12  WAVEGEN                                                                04/04/2009 15:07:09 PAGE 2   

  56          {
  57   1      	SendDA(outputa/256,outputa%256,0);//输出a
  58   1      	//sendda(outputb/256,outputb%256,1);//输出b
  59   1      }
  60          void display(unsigned int num)			//显示程序	 1024->1.25V
  61          {  
  62   1         float temp; 
  63   1      	uCHAR qianwei,baiwei,shiwei,gewei;
  64   1      	temp=(5.0/4096)*1000;//放大1000倍,基本量1.22mV
  65   1      	temp*=num;
  66   1      	num=(uint)(temp); //强制类型转换
  67   1         
  68   1      	qianwei=num/1000;
  69   1      	baiwei=num%1000/100;
  70   1         shiwei=num%100/10;
  71   1         gewei=num%10;		
  72   1         
  73   1         P0=table[qianwei]|0x80;	 //添加小数点
  74   1         seg_latch=1;
  75   1         seg_latch=0;
  76   1      	P0=0xfe;	 //led1有效,显示千位
  77   1         bit_latch=1;
  78   1         bit_latch=0;
  79   1         delay(5);
  80   1      
  81   1         P0=table[baiwei];
  82   1         seg_latch=1;
  83   1         seg_latch=0;
  84   1         P0=0xfd;	 //led2有效,显示百位
  85   1         bit_latch=1;
  86   1         bit_latch=0;
  87   1         delay(5);
  88   1      
  89   1         P0=table[shiwei];
  90   1         seg_latch=1;
  91   1         seg_latch=0;
  92   1         P0=0xfb;	//led3有效,显示十位
  93   1         bit_latch=1;
  94   1         bit_latch=0;
  95   1         delay(5);
  96   1      
  97   1         P0=table[gewei];		
  98   1         seg_latch=1;
  99   1         seg_latch=0;
 100   1         P0=0xf7;	//led4有效,显示个位
 101   1         bit_latch=1;
 102   1         bit_latch=0;
 103   1         delay(5);
 104   1      }
 105          
 106          void delay(uint z)
 107          {
 108   1      	uint x,y;
 109   1      	for(x=z;x>0;x--)
 110   1      	   for(y=113;y>0;y--);
 111   1      }
 112          void main()
 113          {
 114   1      	while(1)
 115   1      	{
 116   2      		unsigned int i;
 117   2      		uCHAR k;
C51 COMPILER V6.12  WAVEGEN                                                                04/04/2009 15:07:09 PAGE 3   

 118   2      		for(i=0;i<4096;i++)
 119   2      		{
 120   3      			DA(i);//12位的,范围0-4096
 121   3      			for(k=0;k<20;k++)
 122   3      			{
 123   4      				display(i);  //显示预期电压值
 124   4      			}
 125   3      		}
 126   2      		//delay(10);  //这儿不用延时,不然会造成显示闪烁
 127   2      	}
 128   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    370    ----
   CONSTANT SIZE    =     16    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      12
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       1
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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