OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 10340|回复: 1

我的AVR资料[程序篇]MAX176驱动源码(源码28)

[复制链接]

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2011-1-9 11:17:55 | 显示全部楼层 |阅读模式

MAX176的驱动源码:
#include <mega16.h>
#include <delay.h>  
#define STAT PORTB.0//开始控制位
#define CLK PORTB.1 //时钟位
#define DATA PINB.2 //数据位

#define KEY1 PINC.0
#define KEY2 PINC.1
#define KEY3 PINC.2
#define KEY4 PINC.3 
 
/*----------------ad转换程序-------------------
    参数:无
  返回值:得到的AD值
计算公式:Vin=(D_return/4096)*5
     Vin:输入的模拟量(范围:-4096~4096)
D_return:返回的数字量
-----------------------------------------------*/
int Get_Max176_Adc(void)
{
    uchar t;
    int result;
    uchar ADCH=0,ADCL=0;
    bit jud=0;
    STAT=1;     //上升沿开始转换
    delay_us(4);//确保转换结束
    STAT=0;     //下降沿准备数据传输
    CLK=1;CLK=0;//除去前导位
    CLK=1;CLK=0;
    jud=DATA;//获得符号值
    for(t=0;t<4;t++)//获得高四位值
    {
        CLK=1;CLK=0;
        ADCH<<=1;
        ADCH+=DATA;
    }
    for(t=0;t<8;t++)//获得低八位值
    {
        CLK=1;CLK=0;
        ADCL<<=1;
        ADCL+=DATA;
    }
    result=(int)ADCH*256+ADCL;
    if(jud)return -result;
    else return result;
}

void display(unsigned char number,unsigned char position)//digtial show function
{  
    DDRA=0Xff;//set PORTA output
 ORTA=0XFF;//set PORTA output in high level
    switch(position)//choice the position
 {
  case 1:{PORTA&=0xf8;break;}
  case 2:{PORTA&=0xf9;break;}
  case 3:{PORTA&=0Xfa;break;}
  case 4:{PORTA&=0Xfb;break;}
  case 5:{PORTA&=0Xfc;break;}
  case 6:{PORTA&=0Xfd;break;}
  case 7:{PORTA&=0Xfe;break;}
  case 8:{PORTA&=0Xff;break;}
  } 
    switch(number)//show number
 {
  case 0:{PORTA&=0x87;break;}    //0
  case 1:{PORTA&=0x8f;break;}    //1
  case 2:{PORTA&=0x97;break;}    //2
  case 3:{PORTA&=0x9f;break;}    //3
  case 4:{PORTA&=0xa7;break;}    //4
     case 5:{PORTA&=0xaf;break;}    //5
  case 6:{PORTA&=0xb7;break;}    //6
  case 7:{PORTA&=0xbf;break;}    //7
  case 8:{PORTA&=0xc7;break;}    //8
     case 9:{PORTA&=0xcf;break;}    //9
  default:{PORTA=0xff;break;}    //null
 }       
}  
 
void main(void)
{          
    uchar t=0;   
    int res1=0;
    PORTB=0XFF;
    DDRB=0XFB;  
    PORTD=0XFF;
    DDRD=0XFF;
    PORTB=0X00;
    while(1)
    {
        for(t=0;t<5;t++)
        {
            res1+=Get_Max176_Adc(); 
        }
        res1=res1/5;  
        if(res1<0){res1=-res1ORTD=0X00;} //负值
        display(res1%10,8);delay_us(1000);
        display((res1/10)%10,7);delay_us(1000);  
        display((res1/100)%10,6);delay_us(1000);  
        display((res1/1000)%10,5);delay_us(1000);
        res1=0;
        PORTD=0XFF;           
    }
}     

 

 

 



 

我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

12

主题

216

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
313
金钱
313
注册时间
2011-4-7
在线时间
3 小时
发表于 2011-7-21 15:10:46 | 显示全部楼层
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-24 19:13

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表