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

📄 pm01.c

📁 本代码为一个相位控制器的源程序
💻 C
字号:
#include <reg52.h>
#include <source7279.h>

#define uchar unsigned char
#define uint unsigned int

void dis_phase();
void dis_fre();
void transdata();
void key_process();

uint Afre;

uchar count_time2,count_phase,count_p,key_number;

bit readdata_flag,starttime_flag,cycle_flag,disp_flag,disfre_flag;

bit cycle_signal;
sbit test=P2^1;
sbit trans=P3^0;
sbit control=P3^1;
sbit P00=P3^7;



void Time2_initial()
{

	T2CON=0x00;
        RCAP2H=0x4c;
	RCAP2L=0x00;
        TR2=1;
        TR0=1;
}


main()
{
	TMOD=0x15;
	TF1=0;
        IE=0X00;
        EA=1;
	ET2=1;
	EX0=0;
        trans=0;

        Time2_initial();
	trans=0;
	starttime_flag=0;
        cycle_signal=0;
	initial_7279();

	while(1)
	{
		if(starttime_flag)
                {
		              Time2_initial();
                              starttime_flag=0;
                              EX0=1;
                }
		if(readdata_flag)
                {
			transdata();
                        readdata_flag=0;
                        //P20=~P20;
                }
		if(cycle_signal)
                {
                        if(disp_flag)
			dis_phase();
                        cycle_signal=0;
                }
		if(disfre_flag)
                {
                        if(!disp_flag)
			dis_fre();
                        disfre_flag=0;
                        starttime_flag=1;
                        Afre=0;
                        //EX0=1;
                }
                if(control)
                           EX0=1;

                if (!key) //如果有键按下
                {
                key_number=read7279(CMD_READ);
                key_process();
                while (!key); //等待按键放开
                }

	}
}

void keyprocess()
{
 switch(key_number)
 {
  case 0x20:{disp_flag=1;};break;
  case 0x22:{disp_flag=0;};break;
  default:break;
 }
}

void dis_phase()
{

	uchar phase,data0,data1,data2,data3;
        send_byte(CMD_RESET);
	phase=count_p;
	data0=phase%10;
	phase=phase/10;
	data1=phase%10;
	phase=phase/10;
	data2=phase%10;
	data3=phase/10;
	write7279(DECODE1,data0);
	write7279(DECODE1+1,data1);
	write7279(DECODE1+2,data2);
	write7279(DECODE1+3,data3);
	count_phase=0;

}

void dis_fre()
{
	uchar data_fre0,data_fre1,data_fre2,data_fre3,data_fre4;
	uint data_fre;
        send_byte(CMD_RESET);
	data_fre=Afre;
	data_fre0=data_fre%10;
	data_fre=data_fre/10;
	data_fre1=data_fre%10;
	data_fre=data_fre/10;
	data_fre2=data_fre%10;
	data_fre=data_fre/10;
	data_fre3=data_fre%10;
	data_fre4=data_fre/10;
	write7279(DECODE1,data_fre0);
	write7279(DECODE1+1,data_fre1);
	write7279(DECODE1+2,data_fre2);
	write7279(DECODE1+3,data_fre3);
	write7279(DECODE1+4,data_fre4);
}


void transdata()
{
	P2=TH0;
        short_delay();
	trans=1;
	short_delay();
	trans=0;
	P2=TL0;
        short_delay();
	trans=1;
	short_delay();
	trans=0;
	//T0=0;
        P00=~P00;
}


void Time2() interrupt 5 using 0
{
	TF2=0;
	count_time2++;
	if(count_time2==20)
	{
		TR0=0;
                TR2=0;
		Afre=TH0*256;//TH0;
                //Afre=Afre<<8;//TL0;
                Afre=Afre+TL0;
                //Afre=Afre|14;     */
                TH0=0;
                TL0=0;
                disp_flag=~disp_flag;
		readdata_flag=1;
		disfre_flag=1;
                starttime_flag=0;
                count_time2=0;
	}

}

void Int_ser() interrupt 0 using 0
{
	count_phase++;
        if(!control)
                {
                 EX0=0;
                 cycle_signal=1;
                 count_p=count_phase;
                }


}

⌨️ 快捷键说明

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