#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;
}
}
}
|