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

📄 w79e825.c

📁 功能:arm7平台的I2c驱动程序
💻 C
字号:

#include <w79e825.h>

#include <intrins.h>

#define uint8 unsigned char
#define uint16 unsigned int
#define uchar unsigned char
#define uint unsigned int

uint8 led[2];
//led code 共阳极       0    1   2    3    4    5    6    7    8     9   a     b   c     d    e   f    灭  高位先出  bit顺序 h,g,f,e,d,c,b,a : Q1--a.....Q8--h
uint8 code tab[17] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0x0a,0x86,0x8e,0xff};


sbit LED_CLK = P1^6;			//LED串行显示时钟
sbit LED_DATA = P1^7;			//LED串行显示数据
uchar tx_buff[8];


#define nop() _nop_();_nop_();_nop_();_nop_();

void Disptime(void);
void init_cpu(void);
uint8 HexBcd(uint8 h);
void Dispv(v);
void Display(void);
void Adc_test(void);
uchar key_scan(void);
void delay(unsigned char i);
void myputchar(uchar c);
void trace(uchar *str,uchar len);
void ADC_Select(ADC_C);
void ADC_EN(void);
void ADC_DIS(void);

void main(void)
{
	uint i;
	uchar aa;
	init_cpu();
	aa = 0x08;
	Dispv(aa);
	for(;;)
	{		
		P0=0x00;
		
		for(i=0;i<0xfffe;i++);
		P0=0xff;
		
		for(i=0;i<0xfffe;i++);
		Adc_test();
	}
}

void init_cpu(void)
{	
	TMOD = 0x21;	
	SCON  = 0x50;			/* SCON: mode 1, 8-bit UART, enable rcvr      */	
	TH1   = 0xfd;            /* TH1:  reload value for 9600 baud @ 11.0592MHz   */
    TL1   = 0xfd;			
    TR1   = 1;  			//T1 timer run
    ES    = 1;				//uart interrupt enable	
	EA = 1;					//all interrupt enable
	P1 = 0xff;
}


void Dispv(v)
{
	uint8 temp1;	
	temp1 = HexBcd(v);	
	led[0] = (temp1&0x0f);
	led[1] = (temp1&0xf0)>>4;
	
	Display();

}


void Display(void)
{
	uint8 i,j;
	uint8 temp;

	
		temp = led[0];
		temp = tab[temp];
		for(j=0;j<8;j++)
		{		
			LED_DATA = (temp&0x80);	
			nop();		
			LED_CLK = 0;
			nop();
			temp = temp << 1;
			LED_CLK = 1;
			nop();
		}
		temp = led[1];
		temp = tab[temp]&0x7f;
		for(j=0;j<8;j++)
		{		
			LED_DATA = (temp&0x80);	
			nop();		
			LED_CLK = 0;
			nop();
			temp = temp << 1;
			LED_CLK = 1;
			nop();
		}
		
}




uint8 HexBcd(uint8 h)
{
	uint8 b;
	if(h > 99)	return 0x99;
	b=h/10*0x10 + h%10;
	return b;
}

//delay 1002*i instruction period
void delay(unsigned char i)
{
	unsigned char  j;
	i=i*2;
	for(;i>0;i--)
	{
	   j = 246;
		while(--j);
	}
}



void trace(uchar *str,uchar len)
{
	uint i;
	for(i=0;i<len;i++)
	{
		myputchar(*str);
		str++;
	}
}

void myputchar(uchar c)
{	
	ES = 0;
	SBUF = c;
	while (TI == 0);
	TI = 0;
	ES = 1;
}

void Adc_test(void)
{
	uchar adc_h,adc_l;
	uint adc_data;
	ADC_Select(0);	//select channel
	ADC_EN();		//enable adc
	ADCCON = ADCCON | 0x08;	//start adc
	while(!(ADCCON & 0x10));//wait adc finish
	adc_h = ADCH;
	ADCCON = ADCCON & 0xF7;	//DISABLE adc
	adc_l = ADCCON;
	adc_l = adc_l>>6;
	adc_data = adc_h;
	adc_data = adc_data<<2;
	adc_data = adc_data | adc_l;
	adc_h = adc_data*50/1024;
	Dispv(adc_h);
}

uchar key_scan(void)
{
	return 1;
}

void ADC_Select(ADC_C)
{
	ADCCON = 0x00;
	ADCCON = ADC_C;
}

void ADC_EN(void)
{
	ADCCEN = 0;
}

void ADC_DIS(void)
{
	ADCCEN = 1;
}

⌨️ 快捷键说明

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