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

📄 dac.c

📁 本程序在单片机C8051F020上将直流电动机当前的转速值在七段数码管上显示出来
💻 C
字号:
#include "c8051f020.h"                
#include <intrins.h>


sfr16 DAC0     = 0xd2;                 // DAC0 data
extern unsigned int SaveMotorCount;
extern unsigned int SetSpeed;
extern unsigned char KeyValue;

#define NOSELECT7279  	P5 |= 0x80		//SPICS4(P57)=1
#define SELECT7279  	P5 &= ~(0x80)  	//SPICS4(P57)=0;

void Delay1ms(unsigned char T);
void DispLED(char *DispBuf,char ShowDot);	//ShowDot 显示小数点位 
void FlashLED(unsigned char No);	//关闪烁
void Send7279Byte(unsigned char ch);
char GetKeyValue(void);
void WaitKeyOff(void);
extern unsigned int iDAC0;


void TestMotor(bit LoopFlag)                                 
{
	char KeyValue ; 
	char buf[6];   
	int SD1; 
	SetSpeed=2000/20;   // 设定稳定转速  				
	DAC0=iDAC0;
	Delay1ms(25);		//等待25ms复位时间 
	Send7279Byte(0xA4);	//发复位指令 
	NOSELECT7279;     	//置CS高电平 
	if (LoopFlag==0) return;
  
    while(1)
    {
		FlashLED(8);	//关闪烁
 	    for (;;)
	    {	
		    KeyValue=GetKeyValue();
		    if(KeyValue!=-1) 
		    {
		        NOSELECT7279;     
		        WaitKeyOff();
	            if(KeyValue==0)
		        {                // 设定键'0'按下显示设定转速状态
	                buf[0]='E';
                    buf[1]=' ';
                    buf[2]=' ';
                    buf[3]=' ';
                    buf[4]=' ';
                    buf[5]=' ';
                    DispLED(buf,0);
                    break;
                }
            }
	    	buf[0]='F';       // 无键按下显示转速
	    	buf[1]=' ';
	    	buf[2]=(SaveMotorCount%10000)/1000; //取千位
	    	buf[3]=(SaveMotorCount%1000)/100;   //取百位
	    	buf[4]=(SaveMotorCount%100)/10;     //取十位
	    	buf[5]=(SaveMotorCount%10);         //取个位
	    	DispLED(buf,0);	
        }
	    for (;;)    // 设定千位
	    {	
	    	KeyValue=GetKeyValue();
			if(KeyValue!=-1)
			{
			    NOSELECT7279;     
			    WaitKeyOff();
				if(KeyValue%16<=9)
		        { 
      	            buf[2]=KeyValue%16;
      	            DispLED(buf,0);
                    break;
                }
            }
        }
    	for (;;)    // 设定百位
    	{	
    		KeyValue=GetKeyValue();
    		if(KeyValue!=-1)
    		{
    		    NOSELECT7279;     
    		    WaitKeyOff();
				if(KeyValue%16<=9)
		        { 
      	            buf[3]=KeyValue%16;
      	            DispLED(buf,0);
                    break;
                }
            }
        }
    	for (;;)    // 设定十位
    	{	
    		KeyValue=GetKeyValue();
    		if(KeyValue!=-1)
    		{
    		    NOSELECT7279;     
    		    WaitKeyOff();
				if(KeyValue%16<=9)
		        { 
      	            buf[4]=KeyValue%16;
      	            DispLED(buf,0);
                    break;
                }
            }
        }
    	for (;;)    // 设定个位
    	{	
    		KeyValue=GetKeyValue();
    		if(KeyValue!=-1)
    		{
    		    NOSELECT7279;     
    		    WaitKeyOff();
				if(KeyValue%16<=9)
		        { 
      	            buf[5]=KeyValue%16;
      	            DispLED(buf,0);
                    break;
                }
            }
        }
    	for (;;)    // 按F键确认
    	{	
    		KeyValue=GetKeyValue();
    		if(KeyValue!=-1)
    		{
    		    NOSELECT7279;     
		        WaitKeyOff();
    	        if(KeyValue==0x0f)
    		    { 
    				SD1 = buf[2]*1000+buf[3]*100+buf[4]*10+buf[5];
                    if ((SD1<=2700)&&(SD1>=600))// 运转速度在1200至2700转之间较适合
    			    SetSpeed = SD1/20;    // 更新运转速度
    				break;
                }
            }
        }   
    }
}

⌨️ 快捷键说明

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