单片机控制数字电位器的c语言程序

Python037

单片机控制数字电位器的c语言程序,第1张

数字电位器用的是X9C103

#include<reg51.h>

#include<stdio.h>

#include<intrins.h>

#define uchar unsigned char

#define uint unsigned int

//设定四个按键

sbit X9C102=P2^0

sbit X9C202=P2^1

sbit X9C302=P2^2

sbit X9C402=P2^3

sbit X9C103_CS=P1^0

sbit X9C103_INC=P1^1

sbit X9C103_UD=P1^2

void delay_nus(uint i)

{

while(i--)

}

void delay_nms(uchar i)

{

for(ii>0i++)

{

delay_nus(1000)

}

}

void set_x9c103(uchar num,uchar ud,uchar save)

{

X9C103_CS=0

delay_nus(1)

if(ud==1)

{

X9C103_UD=1

}

else

{

X9C103_UD=0

}

delay_nus(4)

for(numnum>0num--)

{

X9C103_INC=1

delay_nus(2)

X9C103_INC=0

delay_nus(2)

}

delay_nus(2)

if(save==1)

{

X9C103_INC=1

delay_nus(2)

X9C103_CS=1

delay_nms(22)

}

X9C103_CS=1

delay_nus(10)

}

void clear_down()

{

set_x9c103(100,0,1)

}

void main_init()

{

X9C103_CS=0

clear_down()

}

void main()

{

main_init()

set_x9c103(70,1,1)

while(1)//扫描按键,对应不同倍数的输出

{

if (X9C102==0){

clear_down()

set_x9c103(10,1,1)}

if (X9C202==0){

clear_down()

set_x9c103(30,1,1)}

if (X9C302==0){

clear_down()

set_x9c103(60,1,1)}

if (X9C402==0){

clear_down()

set_x9c103(90,1,1)}

}

}

你好:

如果你想直接知道答案,那么我告诉你,12MHz晶振

void delayms(unsigned int t)

{

unsigned int i,j

for(i=ti>0i--)

for(j=123j>0j--)

}

能精确到1ms。

如果是11.0592MHz晶振,只需把上面的“j=123”改为“j=114”,都是调试过的,没问题。

然后你要想知道是怎么调试的,很简单,打开uv2编程软件,在最上边的工具栏里边有个“Debug”,点击后出现下拉菜单,选择第一个“start/stop Debug Session”,然后在最右边有一个Watch栏,有两个项目,一个是“Register”,一个是“value”,然后在“Register”栏下边的“Sys”里边有个“sec”,你只要单击“Step over”运行程序并观察“sec”的值就能调试出你程序的执行时间了。

注意,一定要先选择晶振频率,不然会默认24MHz。

希望我的回答能帮助到你。

声明定义:

void delaynms(int n) //n: millisecond

{

    int i,j

    for(i=0i<ni++)

        for(int j=0j<500)

}

调用:

delaynms(500) //delay 0.5 second