/***********************************************************************
名称: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 }