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

📄 adc.c

📁 C8051F
💻 C
字号:

//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
//
// 文件名:ADC.c
//
//
// 目标器件: C8051F02x
//
// 编译工具: Silicon Laboratories IDE
//
// 程序说明:	此程序模/数转化通道AIN0.0的输入值,测试前将S6的第一拨码开关拨到ON

//------------------------------------------------------------------------------------
// // 头文件包含
//------------------------------------------------------------------------------------
#include <c8051f020.h>                  

//------------------------------------------------------------------------------------
// 特殊功能寄存器定义
//------------------------------------------------------------------------------------
sfr16 TMR3RL   = 0x92;     
sfr16 TMR3     = 0x94;              
sfr16 ADC0     = 0xbe;        
//------------------------------------------------------------------------------------
// 常量定义
//------------------------------------------------------------------------------------
#define SYSCLK 2000000         

bit LCDBit;
unsigned long x;
//-----------------------------------------------------------------------------------         
// 函数定义
//------------------------------------------------------------------------------------
void PORT_Init (void);
void Timer3_Init (int counts);
void ADC_Init(void);
void ADC_ISR (void);
void LCD_Init(void);
//------------------------------------------------------------------------------------
//主程序
//------------------------------------------------------------------------------------
void main (void) {
	unsigned char data1,i;
	unsigned char *lcdpoint;         		//指向 lcddata数组的指针
	unsigned char ADC0Data[10]={0x0a,0x0d,0x0c,0x00,0x68,0x68};
   WDTCN = 0xde;
   WDTCN = 0xad;   							//禁止看门狗定时器
	LCDBit=0;
   PORT_Init();
   LCD_Init();
   Timer3_Init (SYSCLK / 12 /5 );  
   ADC_Init();                                     
   EA = 1;									

     AMX0SL |=0x00;         				//通道0
     for(x=0;x<=50000;x++); 
	 
	 //AMX0SL |=0x01;         				//通道1
	 //for(i=0;i<=50000;i++); 
	 //AMX0SL |=0x02;         				//通道2
	 //for(i=0;i<=50000;i++); 
	 //AMX0SL |=0x03;         				//通道3
	 //for(i=0;i<=50000;i++); 
     //AMX0SL |=0x04;         				//通道4
	 //for(i=0;i<=50000;i++);  
	 //AMX0SL |=0x05;         				//通道5
	 //for(i=0;i<=50000;i++); 
	 //AMX0SL |=0x06;         				//通道6
	 //for(i=0;i<=50000;i++); 
	 //AMX0SL |=0x07;         				//通道7
	 
   while (1)
    {
	 	if(LCDBit==1){
			TMR3CN &= 0xfb; 				//关定时器3                  
			LCDBit=0;						//清LCD显示位
	   		P7 = 0x02;						//返回初始位置
   			P6 = 0x08;
   			P6 = 0x09; 
			ADC0Data[9]=ADC0&0x0f;			//将A/D转化值存到显示数组
			ADC0Data[8]=(ADC0>>4)&0x0f;
			ADC0Data[7]=(ADC0>>8)&0x0f;
			ADC0Data[6]=(ADC0>>12)&0x0f;
	    	P6  = 0x0d;                   	//准备送数据
	    	for(x=0;x<5000;x++);
	    	lcdpoint = &ADC0Data;
	    	for(i=10;i>0;i--)     			//显示第一行字符
	    	{ 
		    	data1=*lcdpoint;
				if(data1>=0x0a) data1 += 0x37;	//将显示数据转化为液晶的显示字符码
				else data1 += 0x30;
		    	P7 = data1; 
				P6 = 0x0c;
	        	P6 = 0x0d;
	        	lcdpoint++;
				for(x=0;x<100;x++);
			}
		   TMR3CN |= 0x04;					//使能定时器3                   
		}                  
	}

}

//-----------------------------------------------------------------------------
// //函数名称:   LCD_Init ()
//函数功能:      LCD初始化
//入口参数:      无
//出口参数:      无
//全局变量引用:  无
//调用模块:      无  
//-----------------------------------------------------------------------------
void LCD_Init(void)
{
   P6 = 0x09;
   for(x=0;x<50000;x++);
   //P7 = 0x30;				/*一行显示*/
   P7 = 0x38;				/*两行显示*/
   P6 = 0x08;
   P6 = 0x09; 
   for(x=0;x<1000;x++);
   P7 = 0x0e;				//开显示,开光标,字符不闪烁
   P6 = 0x08;
   P6 = 0x09;
   for(x=0;x<1000;x++);		
   P7= 0x06;				//AC自动增1,整体显示不移动
   P6 = 0x08;
   P6 = 0x09;
   for(x=0;x<5000;x++);		
   P7 = 0x01;				//清除DDRAM,置AC=0
   P6 = 0x08;
   P6 = 0x09; 
   for(x=0;x<5000;x++);

}
//------------------------------------------------------------------------------------
//函数名称:      PORT_Init ()
//函数功能:      通用I/O口及交叉开关初始化
//入口参数:      无
//出口参数:      无
//全局变量引用:  无
//调用模块:      无  
//------------------------------------------------------------------------------------
//
void PORT_Init (void)
{
   XBR2    = 0x40;  		//使能交叉开关                   
   P74OUT |= 0x0ff;     	//推挽输出
}

//------------------------------------------------------------------------------------
//函数名称:    Timer3_Init ()
//函数功能:      定时器3初始化
//入口参数:      int counts
//出口参数:      无
//全局变量引用:  无
//调用模块:      无 
//------------------------------------------------------------------------------------
void Timer3_Init (int counts)
{
   TMR3CN = 0x00;                      
                                    
   TMR3RL  = -counts;  		//初始化重载值           
   TMR3    = 0xffff; 		//设置自动重载值                 
   TMR3CN |= 0x04;                   
}
//--------------------------------------------------------------------------
//函数名称:    ADC_Init ()
//函数功能:      ADC0初始化
//入口参数:      int counts
//出口参数:      无
//全局变量引用:  无
//调用模块:      无 
//--------------------------------------------------------------------------
void ADC_Init(void)
{
 ADC0CN  |=0x84;	/*ADC0使能,定时器3溢出使能模/数转换*/
 REF0CN |=0x03;		/*内部电压基准提供从VREF脚输出,ADC0电压基准取自VREF0*/
 ADC0CF |=0x50;		/*转换周期和增益为1*/
 AMX0CF |=0x00;		/*单端输入*/
 EIE2   |=0x02;		/*ADC0转换结束中断*/
}
//------------------------------------------------------------------------------------
//函数名称:       ADC_ISR ()
//函数功能:      定时器3中断服务程序
//入口参数:      无
//出口参数:      无
//全局变量引用:  无
//调用模块:      无 
//------------------------------------------------------------------------------------
void ADC_ISR (void) interrupt 15
{
  AD0INT=0;			//清A/D中断标志
  LCDBit=1;			//置LCD显示位
}

⌨️ 快捷键说明

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