找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1670|回复: 0
打印 上一主题 下一主题
收起左侧

单片机A/D与D/A转换程序

[复制链接]
跳转到指定楼层
楼主
ID:756245 发表于 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()                  //键盘扫描函数
{
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;
            }        
     }
}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表