⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 数模转换DAC0832的应用(C51单片机,C文件源代码)
💻 C
字号:
#include <AT89X51.H>  
unsigned char keycnt=0;   
unsigned char tcnt=0;        //键值判断
bit sjz=0;     //产生三角波时用到的标志
/*void Delay(unsigned int tc)     //延时程序
{
	while( tc != 0 )			
	{
		unsigned int i;			
		for(i=0; i<100; i++);	
		tc--;					
	}
}*/
void delayl()    //延时子程序
{   
    unsigned char i,j;
    for(i=20;i>0;i--)   
    for(j=248;j>0;j--); 
}
void KEY()          //按键扫描程序
{
 
if(P3_2==0) 
  { 
   delayl();    //延时跳过按下时的抖动
    if(P3_2==0) 
      { //P0=0XFF;
        keycnt=0;  //定时器产生锯齿波标志
		TR0=0;    //暂时停止波形输出
        TH0=0x256-40; //对TH0 TL0赋值
        TL0=0x256-40; 
        TR0=1;       //开始定时,产生锯齿波
        while(P3_2==0);  //如果一直按着键,则等待松键开
		delayl();    //延时跳过松开后的抖动
      }   }  
if(P3_3==0) 
  { 
    delayl();    //延时跳过按下时的抖动
    if(P3_3==0) 
      { //P0=0X00;
        keycnt=1; //定时器产生三角波标志
		TR0=0;    //暂时停止波形输出
        TH0=0x256-40; //对TH0 TL0赋值
        TL0=0x256-40; 
        TR0=1;    //开始定时 产生三角波
       } 
     while(P3_2==0);  //如果一直按着键,则等待松键开
	 delayl();    //延时跳过松开后的抖动 
      } 
	  }   //请注意写程序时的格式规范,此处是为了节省纸张
void t0(void) interrupt 1 using 0  //定时中断服务函数
{ 

 if(keycnt==0)  //产生锯齿波
    {
	 P0=tcnt; 
	 tcnt=+0x0a; //步进0.2V/一次中断 
     if(tcnt==0xfb) 
     {tcnt=0;}
	}
 if(keycnt==1)  //产生三角波
     { 
	   if(sjz==0)
	     {
	      P0=tcnt;
		  tcnt=+0x0a;//步进0.2V/一次中断 
	      if(tcnt==0xfa)
             {sjz=1;} 
          } 
	    if(sjz==1)
		  {
		   P0=tcnt;
		   tcnt=-0x0a;
		   if(tcnt==0)
		     {sjz=0;}
		   }
      } 
}
void main(void) 
{ 
TMOD=0x02;  //定时器工作在方式2
ET0=1; 
EA=1; 
while(1) 
  {
    KEY(); 
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -