找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2000|回復: 0
收起左側(cè)

單片機A/D與D/A轉(zhuǎn)換程序

[復制鏈接]
ID:756245 發(fā)表于 2020-5-20 08:39 | 顯示全部樓層 |閱讀模式
#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()                  //鍵盤掃描函數(shù)
{
unsigned char keyscan_num,temp;
  P1=0xff;                                 // P1口輸入
  temp=P1;                                //從P1口讀入鍵值,存入temp中
  if(~(temp&0xff))      //判是否有鍵按下,即鍵值不為0xff,則有鍵按下
{
   if(key1==0)                         //產(chǎn)生方波的按鍵按下
            {
        keyscan_num=1;                         //得到鍵值為1,表示產(chǎn)生方波
      }
        else if(key2==0)                //產(chǎn)生三角波的按鍵按下
        {
        keyscan_num=2;                         //得到的鍵值為2,表示產(chǎn)生三角波
        }
        else if(key3==0)                 //產(chǎn)生梯形波的按鍵按下
        {
    keyscan_num=3;                         //得到的鍵值為3,表示產(chǎn)生鋸齒波
        }
        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初始化函數(shù)
{
rd=0;
wr=0;
}
void Square()                          //方波函數(shù)
{
    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()                                        // 主函數(shù)
{
        init_DA0832();                // DA0832的初始化函數(shù)            
          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;
            }        
     }
}


回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表