#include <reg51.h>
sbit wr=P3^6;
sbit rd=P3^2;
sbit key1=P1^1; //定义P1.1脚的按键为方波键key1
sbit key2=P1^2; //定义P1.2脚的按键为三角波键key2
sbit key3=P1^3; //定义P1.2脚的按键为锯齿波键key3
unsigned char flag; //flag为1、2、3时对应方波、三角波、锯齿波
unsigned char keyscan() //键盘扫描函数
{
unsigned char keyscan_num,temp;
P1=0xff; // P1口输入
temp=P1; //从P1口读入键值,存入temp中
if(~(temp&0xff)) //判是否有键按下,即键值不为0xff,则有键按下
{
if(key1==0) //产生方波的按键按下
{
keyscan_num=1; //得到键值为1,表示产生方波
}
else if(key2==0) //产生三角波的按键按下
{
keyscan_num=2; //得到的键值为2,表示产生三角波
}
else if(key3==0) //产生梯形波的按键按下
{
keyscan_num=3; //得到的键值为3,表示产生锯齿波
}
else
{
keyscan_num=0; //没有按键按下,键值为0
}
return(keyscan_num) ; //得到的键值返回
}
}
void delay(unsigned int z)//当z=2时,延时1ms
{ unsigned char a;
unsigned char b;
for(a=z;a>0;a--)
{for(b=100;b>0;b--)
{;;}
}
}
void init_DA0832() //DAC0832初始化函数
{
rd=0;
wr=0;
}
void Square() //方波函数
{
P2=0x00;
delay(50) ;
P2=0xff;
delay(50) ;
}
void Triangle() //三角波
{
P2=0x00;
do{
P2=P2+1;
}while(P2<0xff);
P2=0xff;
do{
P2=P2-1;
}while(P2>0x00);
P2=0x00;
}
void Sawtooth() //锯齿波
{
P2=0x00;
do{
P2=P2+1;
}while(P2<0xff);
}
void main() // 主函数
{
init_DA0832(); // DA0832的初始化函数
while(1)
{
flag=keyscan();
switch(flag)
{
case 1:
do{
flag=keyscan();
Square ();
}while(flag==1);
break;
case 2:
do{
flag=keyscan();
Triangle ();
}while(flag==2);
break;
case 3:
do{
flag=keyscan();
Sawtooth ();
}while(flag==3);
break;
default:
flag=keyscan();
break;
}
}
}
|