这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 设计工具 » DAC0832 数控功率放大器程序

共1条 1/1 1 跳转至

DAC0832 数控功率放大器程序

高工
2013-10-25 15:27:48     打赏

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

功能:数控功率放大器

(按相应的按键,数码管显示功率增益)

单片机:AT89S52

数模转换:DAC0832

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

#include

typedef unsigned int uint ;

typedef unsigned char uchar ;

uchar temp,a,GAIN;

sbit P7=P0^7; // 数码管的接口

sbit P6=P0^6;

sbit P5=P0^5;

sbit P4=P0^4;

sbit DAT=P0^3; //数码管的驱动

sbit CLK=P0^2;

void delay(uint); // 延迟程序

void sendbyte(uchar); // 数码管显示

void display(uint); // 增益显示

uchar keyscan();

uchar code tab[]={

0xed,0x09,0xbc,0x9d,0x59,0xd5,

0xf5,0x0d,0xfd,0xdd,0x7d,0xf1,

0xe4,0xb9,0xf4,0x74,0x00} ; //0-F, 全灭

void main (void)

{

sendbyte(0); //初始时数码管无显示

P1=0x01;

while(1)

{

GAIN = keyscan(); //按键扫描

display(GAIN);

if(GAIN == 0)

{

P1=0x01;

}

if(GAIN == 1)

{

P1=0x01; // 10db

}

if(GAIN == 2)

{

P1=0x02; // 20db

}

if(GAIN == 3)

{

P1=0x07; // 30db

}

if(GAIN == 4)

{

P1=0x15; // 40db

}

if(GAIN == 5)

{

P1=0x43; // 50db

}

if(GAIN == 6)

{

P1=0xd5; // 60db

}

}

}

void delay(uint z)

{

uint x,y;

for(x=z;x>0;x--)

for(y=100;y>0;y--);

}

void sendbyte(uchar byte)

{

uchar num,c;

num=tab[byte];

for(c=0;c8;c++)

{

CLK=0;

DAT=num0x01;

CLK=1;

num>>=1; //右移位赋值

}

}

void display(uint Gain) //数码管的动态显示子函数

{

P5=0;

P6=0;

P7=0;

sendbyte(Gain);

P4=1;

delay(1);

P4=0;

P6=0;

P7=0;

sendbyte(0); // 0

P5=1;

delay(1);

P4=0;

P5=0;

P7=0;

sendbyte(13); // d

P6=1;

delay(1);

P4=0;

P5=0;

P6=0;

sendbyte(11); // b

P7=1;

delay(1);

}

uchar keyscan()

{

/*第一行按键的扫描*/

P2=0xfe; //确定第一行的按键有效

temp=P2; //将其赋给一个变量(处理I/O口时,一般先赋值给一个变量,然后通过处理变量来处理I/O口)

temp=temp0xf0; //用于检测第一行的哪个按键按下

while(temp!=0xf0) /*这个部分只要是用来消除按下抖动的*/

{

delay(5);

temp=P2;

temp=temp0xf0;

while(temp!=0xf0) //这个地方,已经消除了按下抖动,P2口的值已经确定

{

temp=P2; //将P2口得值赋给变量

switch(temp) //这个switch语句,用来确定哪一个按键按下时,数码管的显示值

{

case 0x7e:a=1;

break; //这个break很重要,表示如果有匹配的值,就跳出switch语句,防止程序跳不出来。

case 0xbe:a=2;

break;

case 0xde:a=3;

break;

case 0xee:a=4;

break;

default : a=0;

break;

}

while(temp!=0xf0) /*这个部分只要是用来消除释放抖动的*/

{

temp=P2;

temp=temp0xf0;

}

}

}

/*第二行按键的扫描*/

P2=0xfd;

temp=P2;

temp=temp0xf0;

while(temp!=0xf0)

{

delay(5);

temp=P2;

temp=temp0xf0;

while(temp!=0xf0)

{

temp=P2;

switch(temp)

{

case 0x7d:a=5;

break;

case 0xbd:a=6;

break;

case 0xdd:a=0;

break;

case 0xed:a=0;

break;

default : a=0;

break;

}

while(temp!=0xf0)

{

temp=P2;

temp=temp0xf0;

}

}

}

return a;

}




关键词: datasheet中文资料     datasheet p    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]