51单片机 普中V2 DAC PCF8591 模拟电压输出 数码管 仿真

2个按键修改DAC输出
在这里插入图片描述


#include <reg52.h>
#include <I2C.H>

sbit	LS138A	= P2 ^ 2;
sbit	LS138B	= P2 ^ 3;
sbit	LS138C	= P2 ^ 4;

const unsigned char  Disp_Tab[10] ={
    
     0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f };

unsigned char	AD_CHANNEL;
unsigned char	LedOut[8];

sbit	key_01	= P3 ^ 0;
sbit	key_02	= P3 ^ 1;
sbit	key_03	= P3 ^ 2;
sbit	key_04	= P3 ^ 3;

/* 延时函数 */
void delay_ms_key( unsigned char t ) /* 延时xms */
{
    
    
	unsigned char ttt;
	while ( t-- )
	{
    
    
		for ( ttt = 0; ttt < 125; ttt++ )
			;
	}
}


/*
 * 四个按键的检测函数
 * 按键则返回1 2 3 4
 * 无按键则返回0xff
 */
unsigned char KeySscan( void )
{
    
    
	unsigned char keyvaluee = 0xff;
	if ( key_01 == 0 )
	{
    
    
		delay_ms_key( 10 );
		if ( key_01 == 0 )
		{
    
    
			while ( key_01 == 0 )
				;
			return(1);
		}
	}

	if ( key_02 == 0 )
	{
    
    
		delay_ms_key( 10 );
		if ( key_02 == 0 )
		{
    
    
			while ( key_02 == 0 )
				;
			return(2);
		}
	}

	if ( key_03 == 0 )
	{
    
    
		delay_ms_key( 10 );
		if ( key_03 == 0 )
		{
    
    
			while ( key_03 == 0 )
				;
			return(3);
		}
	}

	if ( key_04 == 0 )
	{
    
    
		delay_ms_key( 10 );
		if ( key_04 == 0 )
		{
    
    
			while ( key_04 == 0 )
				;
			return(4);
		}
	}
	return(0xff);
}




/* ****************************************************************** / */
void main()
{
    
    
	int		adadadad	= 0;    /* 电压值 占位数 */
	unsigned char	ad_value	= 32;   /* 电压值   扩大十倍 按键修改 */
	unsigned char	anjianzhi	= 0xff;

	TMOD = 0x11;
	EA = 1;
	TH0	= (65536 - 3000) / 256;
	TL0	= (65536 - 3000) % 256;
	ET0	= 1;
	TR0	= 1;
	
	LedOut[1]	= Disp_Tab[ad_value % 100 / 10] | 0x80;
	LedOut[0]	= Disp_Tab[ad_value % 10];
	adadadad = (int) (ad_value * 5.1);              /* 用于发给DA数据 */
	DACconversion( PCF8591, 0x40, adadadad );       /* DAC	  数模转换 */

	while ( 1 )
	{
    
    
		anjianzhi = KeySscan();

		if ( anjianzhi != 0xff )
		{
    
    
			if ( anjianzhi == 1 )
			{
    
    
				ad_value++;
				adadadad = (int) (ad_value * 5.1);              /* 用于发给DA数据 */
				DACconversion( PCF8591, 0x40, adadadad );       /* DAC	  数模转换 */
			} else if ( anjianzhi == 2 )
			{
    
    
				ad_value--;
				adadadad = (int) (ad_value * 5.1);              /* 用于发给DA数据 */
				DACconversion( PCF8591, 0x40, adadadad );       /* DAC	  数模转换 */
			}

			LedOut[1]	= Disp_Tab[ad_value % 100 / 10] | 0x80;
			LedOut[0]	= Disp_Tab[ad_value % 10];
		}
	}
}


unsigned char jishuaa = 0;
void T0time()
interrupt 1
{
    
    
	TH0	= (65536 - 3000) / 256;
	TL0	= (65536 - 3000) % 256;

	/* 显示 */
	jishuaa = (jishuaa + 1) % 2 ;
	P0 = 0;
	switch ( jishuaa ) /* 使用switch 语句控制138译码器  也可以是用查表的方式 学员可以试着自己修改 */
	{
    
    
	case 0: LS138A	= 0; LS138B = 0; LS138C = 0; break;
	case 1: LS138A	= 1; LS138B = 0; LS138C = 0; break;
	case 2: LS138A	= 1; LS138B = 1; LS138C = 0; break;
	case 3: LS138A	= 0; LS138B = 1; LS138C = 0; break;
	case 4: LS138A	= 0; LS138B = 0; LS138C = 1; break;
	case 5: LS138A	= 1; LS138B = 0; LS138C = 1; break;
	case 6: LS138A	= 0; LS138B = 1; LS138C = 1; break;
	case 7: LS138A	= 1; LS138B = 1; LS138C = 1; break;
	}
	P0 = LedOut[jishuaa];
}



猜你喜欢

转载自blog.csdn.net/x1131230123/article/details/108552828