本帖最后由 枫叶1989 于 2010-8-14 10:57 编辑
#include "reg52.h"
#include "intrins.h"
#define uchar unsigned char
sbit cs=P1^0;
sbit inc=P1^1;
sbit u_d=P1^2;
sbit up=P3^2;
sbit down=P3^4;
sbit P24 = P2^4;
sbit P25 = P2^5;
sbit P26 = P2^6;
sbit P27 = P2^7;
uchar kk=0,d[4]; //kk为增益标志,d[4]为显示缓冲区
void delay(void) //延时程序,延时m*0.5毫秒
{
uchar i,j;
for (i=0;i<10;i++)
{
for (j=0;j<50;j++);
}
}
void display(uchar t) //数码管显示
{
uchar i;
uchar code BCD_7[11]={0xC0, //0
0xF9, //1
0xA4, //2
0xB0, //3
0x99, //4
0x92, //5
0x82, //6
0xF8, //7
0x80, //8
0x90, //9
0xFF } ;
for(;t>0;t--)
{
for(i=0;i<4;i++)
{
P0=BCD_7[d];
P2|=0x10<<i;
delay();
P2&=0x0f;
}
}
}
void up_X9313(void) //产生脉冲使X9313增大一个步进单位,返回值kk
{
cs=0;
u_d=1;
inc=1;
inc=0;
_nop_();_nop_();
inc=1;
cs=1;
kk++;
}
void down_X9313(void)//产生脉冲使X9313减小一个步进单位 ,返回值kk
{
cs=0;
u_d=0;
inc=1;
inc=0;
_nop_();_nop_();
inc=1;
cs=1;
kk--;
}
void init_X9313(void) //初始化X9313,返回值kk
{
uchar i;
for(i=31;i>0;i--)
{
up_X9313();
}
}
uchar read_key(void)
{
up=1;
down=1;
if(up&down)return 0xFF;
else if(up==0)return 0;
else return 1 ;
}
void main(void)
{
uchar k;
int amp;
init_X9313();
/*此处为测试点,检查初始化程序是否运行,添加此处
程序时,须注释后面的WHILE循环*/
/*amp=kk*30%960;
d[3]=amp/1000%10;
d[2]=amp/100%10;
d[1]=amp/10%10;
d[0]=amp%10;
display(100);*/
while(1)
{
do
{
k=read_key(); //等待按键,显示增益
amp=kk*30%960;
d[3]=amp/1000%10;
d[2]=amp/100%10;
d[1]=amp/10%10;
d[0]=amp%10;
display(100);
}while(k==0xFF);
if(!k)
{up_X9313();
}
else
{
down_X9313();
}
}
}
调试的时候显示的值不对哎 |