x9c103测试程序

编程实验

72人已加入

描述

100级调节电路和单片机源程序

1、基础部分

数字电位器X9c103模块是一款宽电压(3V-5V)供电,10K满量程电位器。

电位器中间抽头在0-10k间滑动共100级(电位器滑动端典型阻抗40欧)数字电位器VL和VH端口分别对应滑动变阻器的低端和高端,允许输入电压范围-5V到+5V。数字电位器模块附带测试程序,程序代码为C语言代码,分模块编写。代码包括:主函数、显示子函数、按键子函数以及各模块的头文件,可以采用KEIL4打开源代码经行测试和学习。

数字电位器

2、测试部分

如只需测试模块使用可不研究源代码,将测试程序中.HEX文件下载到目标板。

1、按键子函数共涉及两个按键检测和控制,分别对应P3^2和P3^3.两个按键每次按下分别实现10K数字电位器中间滑动端往上端和往下端滑动1k数值。数字电位器接口说明:INC接P2^0,U_D接P2^1,CS接P2^2。

2、显示器接口:电源端口VCC(2脚)GND(1脚)接5V电源。数据端口D0-D7(7脚到14脚)接P0口(P0^0-P0^7)。对比度调节端口VL(3脚)为液晶显示器对比度调整端用电位器分压得到0V-5V中间某一电压使液晶清晰显示。控制端口RS(4脚)为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。控制端口RW(5脚)为读写信号线,高电平(1)时进行读操作控制端口EN(6脚)端为使能(enable)端,高电平(1)时读取信息,负跳变时执行指令。

三、程序设计

单片机源程序如下(key部分):

/*

* 按键子函数子函数

* 按键子函数共涉及两个按键检测和控制,分别对应P3^2和P3^3.两个按键每次按下分别实现10K数字

* 电位器中间滑动端往上端和往下端滑动1k数值。

* 数字电位器接口说明:INC接P2^0,U_D接P2^1,CS接P2^2。

*/

#include“HEADER.h”

#include“LCD1602.h”

#include“BUTTON.h”

volatile unsigned char FLAG_BUTTON = 0;//按键检测标志位

volatile unsigned char BUTTON_DAT = 0;//按键键值变量

volatile unsigned int TIME_10MS = 0;//时间变量

volatile unsigned char VOLUME = 0;//电位器值

void T0_Timer() interrupt 1//定时器0中断服务程序

{

TR0 = 0;

// WDT_CONTR = 0X31; //喂狗

TH0 =55536/256; //重装初值

TL0 =55536%256; //重装初值

TR0 = 1;

TIME_10MS ++; //time_10ms变量累加

if(TIME_10MS == 1000)TIME_10MS = 0;//time_10ms变量清零

ButtonTest();//按键检测;

}

void ButtonTest(void)

{

static uchar Count_ButtonDown;//静态按键按下计数

static uchar Count_ButtonUp;//静态按键松开计数

if((SW_1 == 0)||(SW_2 == 0))

{

Count_ButtonDown++;

Count_ButtonUp = 0;

if(Count_ButtonDown==2)

{

if(SW_1 == 0)BUTTON_DAT = 1;

else if(SW_2 == 0)BUTTON_DAT = 2;

if(BUTTON_DAT != 0)FLAG_BUTTON = 1;

}

if(Count_ButtonDown》=50)

{

Count_ButtonDown = 0;

if(SW_1 == 0)BUTTON_DAT = 1;

else if(SW_2 == 0)BUTTON_DAT = 2;

if(BUTTON_DAT != 0)FLAG_BUTTON = 1;

}

}

else

{

if(Count_ButtonDown》2) //如果按键已经确认按下,则开始判断松开

{

Count_ButtonUp++;

if(Count_ButtonUp》=2)

{

Count_ButtonUp = 0;

Count_ButtonDown = 0;}}}}

void ButtonService(unsigned char dat)

{switch(dat)

{case 1: //电位器值增加

{unsigned char n = 0;

CS = 0;

U_D = 1;

_nop_();

for(n=10;n》0;n--)

{INC = 0;

_nop_();

_nop_();

INC = 1;}

CS = 1;

VOLUME++;

if(VOLUME 》 10)VOLUME = 10;

DISPLAY[0] = VOLUME%100/10+0x30;

DISPLAY[1] = VOLUME%10+0x30;

Lcd_Set_xy(2,7);

Lcd_Wdat(DISPLAY[0]);

Lcd_Wdat(DISPLAY[1]);}

break;

case 2: //电位器值减小

{unsigned char n = 0;

CS = 0;

U_D = 0;

_nop_();

for(n=10;n》0;n--)

{

INC = 0;

_nop_();

_nop_();

INC = 1;

}

CS = 1;

if(VOLUME == 0)VOLUME = 1;

VOLUME--;

DISPLAY[0] = VOLUME%100/10+0x30;

DISPLAY[1] = VOLUME%10+0x30;

Lcd_Set_xy(2,7);

Lcd_Wdat(DISPLAY[0]);

Lcd_Wdat(DISPLAY[1]);

/*

* LCD1602显示器并行驱动子函数

* 显示器接口:电源端口VCC(2脚) GND(1脚)接5V电源。

数据端口D0-D7(7脚到14脚)接P0口(P0^0 - P0^7)。

对比度调节端口VL(3脚)为液晶显示器对比度调整端用电位器分压得到0V-5V中间某一电压使液晶清晰显示。

控制端口RS(4脚)为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。

控制端口RW(5脚)为读写信号线,高电平(1)时进行读操作

控制端口EN(6脚)端为使能(enable)端,高电平(1)时读取信息,负跳变时执行指令。

*/

单片机源程序如下(主程序):

#include“HEADER.h”

#include“LCD1602.h”

#include“BUTTON.h”

volatile unsigned char DISPLAY[4];//全局显示数组

/*****************************初始化函数*****************************/

void Init()//初始化函数

{

TMOD = 0X01;//定时器0设置工作方式1

TH0 =55536/256;//定时器初值

TL0 =55536%256;//定时器初值

EA = 1;//打开总中断

ET0 = 1;//定时器0打开

TR0 = 1;//定时器0运行

// WDT_CONTR = 0X31;//看门狗定时器在12M晶振时131ms复位

}

/****************************主函数******************************/

void main(void)

{

unsigned char m = 0;

Init();

Lcd_Init ();

Lcd_Clear();

Delayms(20);

Lcd_Set_xy(1,3);

Lcd_String(“Aether Test”);

Lcd_Set_xy(2,1);

Lcd_String(“Value:00 K”);

//数字电位器初始化

INC = 1;

CS = 0;

U_D = 0;

_nop_();

for(m=100;m》0;m--)//电位器强制向下滑动100级到最底端

{

INC = 0;

_nop_();

_nop_();

INC = 1;

}

CS = 1;

示例:X9C103数字电位器C程序

数字电位器
数字电位器
数字电位器
数字电位器
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分