x9015数字电位器应用

 /***********************************************************************

   名称:main()
   功能:主函数,将x9015设置为中间档位(16),则测量出来的值约为实际的电压信号的一半。
***********************************************************************/
 1 int main(void)
 2 {   uint32   data;
 3     x9015_Init();
 4     NumbTube_Init();    //数码管初始化
 5     AD_Init();
 6     x9015_Step(0,31);    //先将数字电位器x9015的档数设为0
 7     x9015_Step(1,16);    //再将数字电位器x9015的档数设为16
 8     while(1)
 9     {    
10       data = AD_Read(AIN4);          //AD转换(AIN4)
11       NumbTube_Display(data*2,1);    //数码管显示
12     }
13     return(0);
14 }

 单击全速运行按钮(快捷键F5),程序会运行并停留在main()主函数处;继续全速运行,测量到的电压信号在数码管上进行显示。

 
 1 //-----------引脚定义----------------
 2 #define    x9015_INC          (1<<29)        //P2.29
 3 #define    x9015_UpDown       (1<<28)        //P2.28
 4 #define    x9015_CS           (1<<18)        //P1.18
 5 /********************************************************************
 6 * 名称:x9015_Init()
 7 * 功能:初始化x9015的引脚配置
 8 ********************************************************************/
 9 void x9015_Init(void)
10 {    
11                 // 设置引脚连接 x9015_CS(P1.18)为GPIO
12     PINSEL2 =  PINSEL2 & 0xfffffff7;    
13     IO2DIR = IO2DIR | x9015_INC | x9015_UpDown;
14     IO1DIR = IO1DIR | x9015_CS;
15 }
16 /****************************************************************************
17 * 名称:x9015_Step(uint8 UpDown, uint8 level)
18 * 功能:改变x9015数字电位器的内部档数
19 * 入口参数:UpDown    增加档数或减少档数, level  变化的档数值
20 ****************************************************************************/
21 void x9015_Step(uint8 UpDown, uint8 level)
22 { 
23     uint8  i;
24     IO1CLR = x9015_CS;
25     if(UpDown == 1)    IO2SET = x9015_UpDown;        //内部挡数增加
26     else               IO2CLR = x9015_UpDown;        //内部挡数减少
27     for(i=0;i<10;i++)  ;                             //小段延时
28     for(;level>0;level--)
29     {     IO2SET = x9015_INC;
30            for(i=0;i<200;i++)  ;            
31            IO2CLR = x9015_INC;
32            for(i=0;i<200;i++)  ;             
33     }
34     IO1SET = x9015_CS;
35 }

 

  1 /*************************************/
  2 /*           X9313W驱动程序            */
  3 /*            版本号:V1.0             */
  4 /*************************************/
  5 
  6 /*************************************/
  7 /*          文件包含                  */
  8 /*************************************/
  9 #include <REG51.h>
 10 #include <INTRINS.h>
 11 
 12 /*************************************/
 13 /*           IO口地址定义              */
 14 /*************************************/
 15 sbit X9313W_INC   = P3^0;               //计数脉冲输入端,下降沿触发
 16 sbit X9313W_UPDN = P3^1;               //方向,高电平加、低电平减
 17 sbit X9313W_CS    = P3^2;               //片选,低电平有效
 18 
 19 
 20 /*************************************/
 21 /*   调整电阻到第RNumber阶阻值        */
 22 /*入口:RNumber:阶阻值0~31          */
 23 /*出口:无                            */
 24 /*************************************/
 25 void X9313W_SetVol(unsigned char RNumber)
 26 { 
 27      unsigned char i;
 28 
 29      X9313W_INC = 1;                   
 30      _nop_();
 31      _nop_();
 32      X9313W_CS = 0;
 33      _nop_();
 34      _nop_();
 35      X9313W_UPDN = 0;                    //先调到0
 36      for(i=0;i<32;i++){
 37         X9313W_INC = 1;
 38         _nop_();
 39         _nop_();
 40         X9313W_INC = 0;
 41         _nop_();
 42         _nop_();
 43       }
 44 
 45      X9313W_UPDN = 1;                   //调到指定值
 46      for(i=0;i<RNumber;i++){
 47          X9313W_INC=1;
 48          _nop_();
 49          _nop_();
 50          X9313W_INC=0;
 51          _nop_();
 52          _nop_();
 53      }
 54      
 55      X9313W_INC = 1;                    //电阻值保存
 56      _nop_();
 57      _nop_();
 58      X9313W_CS = 1;
 59      _nop_();
 60      _nop_();
 61      X9313W_UPDN = 1;
 62      _nop_();
 63      _nop_();
 64      X9313W_INC = 1;
 65 }
 66 
 67 /*************************************/
 68 /*     调整电阻增加RNumber阶阻值      */
 69 /*入口:RNumber:阶阻值0~31          */
 70 /*出口:无                            */
 71 /*************************************/
 72 /*
 73 void X9313W_IncVol(unsigned char RNumber)
 74 { 
 75      unsigned char i;
 76      
 77      X9313W_INC = 1;                   
 78      _nop_();
 79      _nop_();
 80      X9313W_CS = 0;
 81      _nop_();
 82      _nop_();
 83      X9313W_UPDN = 1;                   //加RNumber个指定值
 84      for(i=0;i<RNumber;i++){
 85         X9313W_INC=1;
 86         _nop_();
 87   _nop_();
 88         X9313W_INC=0;
 89         _nop_();
 90         _nop_();
 91      }
 92      
 93      X9313W_INC = 1;                    //电阻值保存
 94      _nop_();
 95      _nop_();
 96      X9313W_CS = 1;
 97      _nop_();
 98      _nop_();
 99      X9313W_UPDN = 1;
100      _nop_();
101      _nop_();
102      X9313W_INC = 1;
103 }
104 /*************************************/
105 /*     调整电阻减少RNumber阶阻值      */
106 /*入口:RNumber:阶阻值0~31          */
107 /*出口:无                            */
108 /*************************************/
109 /*
110 void X9313W_DecVol(unsigned char RNumber)
111 {
112      unsigned char i;
113     
114      X9313W_INC = 1;                   
115      _nop_();
116      _nop_();
117      X9313W_CS = 0;
118      _nop_();
119      _nop_();
120      X9313W_UPDN = 0;                    //减RNumber个指定值
121      for(i=0;i<RNumber;i++){
122          X9313W_INC=1;
123          _nop_();
124          _nop_();
125          X9313W_INC=0;
126          _nop_();
127          _nop_();
128      }
129      
130      X9313W_INC = 1;                    //电阻值保存
131 _nop_();
132      _nop_();
133      X9313W_CS = 1;
134      _nop_();
135      _nop_();
136      X9313W_UPDN = 1;
137      _nop_();
138      _nop_();
139      X9313W_INC = 1;
140 }

 

posted @ 2013-08-10 13:13  奔流聚海  阅读(618)  评论(0编辑  收藏  举报