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

📄 m128._c

📁 ewts avr驱动程序 角速度传感器 104为秒
💻 _C
字号:
#include <iom128v.h>
#define uchar unsigned char
#define uint unsigned int
#define LcdBus PORTA
#define BIT(i) (1<<i)
#define rs 2 //LCD端口定义
#define rw 3
#define en 4 

const char DisV[]={"V:"} ;//灵敏度
const char DisP[]={"P:"} ;//精确度
 
void LcdIni(void) ;
void WrOp(uchar dat) ;
void WrDat(uchar dat) ;
void ChkBusy(void) ;
void DisText(uchar addr,uchar *text) ;
void DisTextConst(uchar addr,uchar const *text) ;
void ShowNum(uchar addr,uint num) ;   //在addr处显示数字num
int AdcVal(uchar n) ;
void delayms(uint n) ;
int AdcValPro(uchar n) ;
char BCD[6] ;   //十位二进制的显示码分别是千百十个位的显示
int Adc[3] ;    //存放Adc转换后的值






/*          传送ASCII字母到LCD            */
/*          x:0x00~0x0f y:0~64            */	
void asc_tran1(unsigned char x,unsigned char y,unsigned char *asc_p)
    {
	 x+=4;
	 //while((*asc_p)!=0)
	    {
		 ocmj_write(0xf1);
		 ocmj_write(x);
		 ocmj_write(y);
		 ocmj_write(*asc_p);
		 asc_p++;
		 if (x<0x13) 
		    x++;
		 else
		   {
		    x=0x04;
			y+=8;		    
		   }	
		}	
	}
void main(void)
{int x=0,a=0,i=0;
char code[]={'0','1','2','3','4','5','6','7','8','9',};
ocmj_init();//初始化	
ocmj_write(0xf4);//清屏
hz_tran(3,0,"数模转换");//传送内部汉字
  while(1)
  {
  
  		x=(int )AdcVal(1);
		for(i=0;i<7;i++)
		{a=x%10;
		 asc_tran1(10-i,50,& code[a]);
		 x=x/10;
		}
		x=0;
/* ADCSRA = 0x00; //disable adc
 ADMUX = 0x00; //select adc input 0
 ACSR  = 0x80;
 ADCSRA = 0x86;*/
  }
}

int AdcVal(uchar n)
{//软件滤波
 uchar i,k ;
 uint tmp=0 ;
 for(i=0 ;i<20 ;i++)
  tmp=(tmp+AdcValPro(n))/2 ;
 k=tmp>Adc[n] ? (tmp-Adc[n]):(Adc[n]-tmp) ;
 Adc[n]=k>5 ? tmp:Adc[n] ;
 return Adc[n] ;
}

int AdcValPro(uchar n)
{//返回第N个ADC的值从0到7
 uchar dat1,dat0 ;
 int val ;
 DDRA &=~BIT(n) ;  //设置对应的ADC口为输入
 PORTA &=~BIT(n) ;
 ADMUX=0x40+n ;  //选择AVCC,选择第N个ADC
 ADCSRA=0xc0 ;  //允许转换ADEN,ADSC
 while(ADCSRA & BIT(ADSC)) ;   //
 dat1=ADCH ;
 dat0=ADCL ;
 val=ADCH*256+ADCL ;
 ADCSRA=0x00 ;
return val ;
}

void ShowNum(uchar addr,uint num)   //在addr处显示数字num
{//将num转化成五个BCD码存放在全局数组BCD[5]中
 uchar i ;
 for(i=5 ;i>0 ;i--)       //将NUM数据转化成ASCII码,如521会转化为00521
 {
          BCD[i-1]=(uchar)(num%10+0x30) ;     //取出最低位
          num/=10 ;                           //去掉最低位
    }
    i=0 ;
// while(BCD ==0x30 && i<4) BCD[i++]=' ' ;    //NUM转换成数组存放,但还没有加上小数点
 BCD[5]='\0' ;
 DisText(addr,BCD+1) ;
}

void DisText(uchar addr,uchar *p)
{
 WrOp(addr) ;
 while(*p !='\0')WrDat(*(p++)) ;
}

void DisTextConst(uchar addr,uchar const *p)
{
 WrOp(addr) ;
 while(*p !='\0')WrDat(*(p++)) ;
}

void LcdIni()
{
    uint i ;
 DDRD=0XFF ;   //设置PA输出
 PORTD=0XFF ;   //全部加上上拉电阻
 DDRC=0XFF ;   //设置PC为输出
 PORTC=0XFF ;   //全部加上上拉电阻
 WrOp(0x38) ;   
 WrOp(0x06) ;   //光标加1
 WrOp(0x0c) ;   //开显示
 WrOp(0x01) ;
 for(i=0 ;i<5000 ;i++) ;
}

void WrOp(uchar dat)
{
 uchar i ;
 ChkBusy() ;
 PORTD &=~BIT(rs) ; //RS=0
 PORTD &=~BIT(rw) ; //RW=0
 PORTD &=~BIT(en) ; //EN=0
 PORTC =dat ;   //送数据
 PORTD |=BIT(en) ; //EN=1
 for(i=1 ;i ;i++) ;  //延时
 PORTD &=~BIT(en) ; //EN=0
}

void WrDat(uchar dat)
{
 uchar i ;
 ChkBusy() ;
 PORTD |=BIT(rs) ; //rs=1
 PORTD &=~BIT(rw) ; //rw=0
 PORTD &=~BIT(en) ; //en=0
 PORTC=dat ;   //送数据
 PORTD |=BIT(en) ; //en=1
 for(i=1 ;i ;i++) ;  //延时
 PORTD &=~BIT(en) ; //en=0
}

void ChkBusy()
{
 DDRC=0X00 ;   //设置为输入
 PORTC=0X00 ;   //不设置上拉电阻
 PORTD &=~BIT(rs) ; //RS=0
 PORTD |=BIT(rw) ; //RW=1
 PORTD |=BIT(en) ; //EN=1
 while(PINC & 0x80) ; //送数据
 PORTD &=~BIT(en) ; //en=0
 DDRC=0xff ;   //设置为输出
}

void delayms(uint n)
{
  uchar j ;
 uint i ;
  for(i=0 ;i<n ;i++)
  for(j=0 ;j<250 ;j++) ;
}

⌨️ 快捷键说明

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