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

📄 all.c

📁 基于单片机的数控开关电源设计
💻 C
字号:
//*************************************************************************************************
//*																								  *
//*			 ******************************头文件及宏定义**************************				  *
//*																								  *
//*************************************************************************************************
#include<reg52.h>
#include"includes.h"
#define uchar unsigned char 
#define uint unsigned int
#define SCANPORT P2		
#define TIME1H 80
#define TIME1L 80	                 //定时器1溢出时间//
sbit wr=P3^1;
sbit rd=P3^0;
sbit P27=P2^7;
unsigned long int shuchu=500;       //默认的开机电压//
uint zhuhuandata;
unsigned  long int ch=0;
uchar i=0;                              //按键标记//
uchar uca_LineScan[3]={0xEF,0xDF,0xBF};
void chuli();                           //函数定义//
uchar getkey();                         //函数定义//
//*************************************************************************************************
//*																								  *
//*			  ********************************将键值累加并送显示******************************	  *
//*																								  *
//*************************************************************************************************
void qiuhe(uchar t)
  {
   if(i==1)
   {
   ch=t; 
   vShowOneChar(6,89,uca[t]);
   }
   if(i==2)
   {
   ch=ch*10+t;
   vShowOneChar(6,103,uca[t]);
   }
   if(i==3)
   {
   ch=ch*10+t;
   vShowOneChar(6,111,uca[t]);
   }
   }
//*************************************************************************************************
//*																								  *
//*			  ********************************按键功能函数******************************	  *
//*																								  *
//*************************************************************************************************
void key_chuli(uchar x)
 {    
        uchar t;
       switch(x)
		{
		case 42: t=0;
	             i++;
                 qiuhe(t);
				 if(i==3)
				  {
				  vShowOneChin(2,49,uca_que);
				  vShowOneChin(2,64,uca_ding);
				  vShowOneChin(4,59,uca_wenhao);
                   }
			     break;						  //'0'
		case 31: t=1;
		         i++;
                 qiuhe(t);
				 if(i==3)
				  {
				  vShowOneChin(2,49,uca_que);
				  vShowOneChin(2,64,uca_ding);
				  vShowOneChin(4,59,uca_wenhao);
                   }
			     break;						 //'1'
		case 32: t=2;
		         i++;
                 qiuhe(t);
				 if(i==3)
				  {
				  vShowOneChin(2,49,uca_que);
				  vShowOneChin(2,64,uca_ding);
				  vShowOneChin(4,59,uca_wenhao);
                   }
			     break;						  //'2'
		case 33: t=3;
	             i++;
                 qiuhe(t);
				 if(i==3)
				  {
				  vShowOneChin(2,49,uca_que);
				  vShowOneChin(2,64,uca_ding);
				  vShowOneChin(4,59,uca_wenhao);
                   }
			     break;						  //'3'
		case 21: t=4;
	             i++;
                 qiuhe(t);
				 if(i==3)
				  {
				  vShowOneChin(2,49,uca_que);
				  vShowOneChin(2,64,uca_ding);
				  vShowOneChin(4,59,uca_wenhao);
                   }
			     break;						  //'4'
		case 22: t=5;
		         i++;
                 qiuhe(t);
				 if(i==3)
				  {
				  vShowOneChin(2,49,uca_que);
				  vShowOneChin(2,64,uca_ding);
				  vShowOneChin(4,59,uca_wenhao);
                   }
			     break;						 //'5'
		case 23: t=6;
		         i++;
                 qiuhe(t);
				 if(i==3)
				  {
				  vShowOneChin(2,49,uca_que);
				  vShowOneChin(2,64,uca_ding);
				  vShowOneChin(4,59,uca_wenhao);
                   }
			     break;						  //'6'
		case 11: t=7;
	             i++;
                 qiuhe(t);
				 if(i==3)
				  {
				  vShowOneChin(2,49,uca_que);
				  vShowOneChin(2,64,uca_ding);
				  vShowOneChin(4,59,uca_wenhao);
                   }
			     break;						  //'7'
		case 12: t=8;
	             i++;
                 qiuhe(t);
				 if(i==3)
				  {
				  vShowOneChin(2,49,uca_que);
				  vShowOneChin(2,64,uca_ding);
				  vShowOneChin(4,59,uca_wenhao);
                   }
			     break;						  //'8'
		case 13: t=9;
		         i++;
                 qiuhe(t);
				 if(i==3)
				  {
				  vShowOneChin(2,49,uca_que);
				  vShowOneChin(2,64,uca_ding);
				  vShowOneChin(4,59,uca_wenhao);
                   }
			     break;						 //'9'
		case 41:  if(i==3)                   //'ok'
				  {
				  ch=ch*256/512;
				  shuchu=ch;
                  ch=0;
                  TH0=65200;
	              TL0=65200;
				  vShowOneChin(2,49,uca_0);
				  vShowOneChin(2,64,uca_0);
				  vShowOneChin(4,48,uca_SHU);
	              vShowOneChin(4,64,uca_CHU);
				  vShowOneChar(6,88,uca_HEN);
	              vShowOneChar(6,104,uca_HEN);
	              vShowOneChar(6,112,uca_HEN);
				  }
				  i=0;
				  break;	
		}			  
}

void vTimer0(void) interrupt 1 using 2
{
    uchar a,d;
	unsigned  long int c=0;
	uchar data tab[3];
	a=(((zhuhuandata&0xf0)>>4)*100/16);
    d=((zhuhuandata&0x0f)*100/256);
    c=(a+d)*5.12;
    tab[0]=c%10;
    tab[1]=c/10%10;
    tab[2]=c/100%10;
	vShowOneChar(2,89,uca[tab[2]]);
	vShowOneChar(2,103,uca[tab[1]]);
	vShowOneChar(2,111,uca[tab[0]]);
    TH0=TIME1H;
	TL0=TIME1L;
	
}

void main(void)
{
    SCANPORT=0x8F;	
	ClearLCD(0x00);
	vShowOneChar(2,89,uca[5]);
	vShowOneChar(2,96,uca_XIAOSHU);
	vShowOneChar(2,103,uca[0]);
	vShowOneChar(2,111,uca[0]);
	vShowOneChar(2,120,uca_V);
    vShowOneChin(0,0,uca_DANG);
	vShowOneChin(0,16,uca_QIAN);
	vShowOneChin(0,32,uca_GONG);
	vShowOneChin(0,48,uca_ZUO);
	vShowOneChin(0,64,uca_DIAN);
	vShowOneChin(0,80,uca_YA);
	vShowOneChin(0,96,uca_MAOHAO);
	vShowOneChin(4,0,uca_QING);
	vShowOneChin(4,16,uca_SHE);
	vShowOneChin(4,32,uca_ZHI);
	vShowOneChin(4,48,uca_SHU);
	vShowOneChin(4,64,uca_CHU);
	vShowOneChin(4,80,uca_DIAN);
	vShowOneChin(4,96,uca_YA);
	vShowOneChin(4,112,uca_MAOHAO);
	vShowOneChar(6,96,uca_XIAOSHU);
	vShowOneChar(6,88,uca_HEN);
	vShowOneChar(6,104,uca_HEN);
	vShowOneChar(6,113,uca_HEN);
	vShowOneChar(6,119,uca_V);
	
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<外部中断0,用于开启键盘扫描及键码处理标志>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
	TMOD=0X01;
    TH0=TIME1H;
	TL0=TIME1L;
	ET0=1;			//T/C0开中断
	TR0=1;		    //开定时器0中断
	IT0=1;			//外中断方式:下降沿。
	EX0=1;			//开启外部中断。
    EA=1;

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<外部中断0,用于开启键盘扫描及键码处理标志>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    
while(1)
 { 
     wr=0;
     wr=1;
     chuli();
   	if(zhuhuandata<=shuchu)P27=0;
	if(zhuhuandata>shuchu)P27=1;
    if(zhuhuandata<=shuchu)P27=0;
  }
 }

void chuli()
{
 rd=0;
 zhuhuandata=P0;
}

//*************************************************************************************************
//*																								  *
//*			  ********************************函数实现******************************			  *
//*																								  *
//*************************************************************************************************
unsigned char getkey()
{   
    uchar ucTemp=0;			  	//扫描状态暂存。
	uchar ucRow=0,ucLine=0;	    //行号,列号。
  
	  for(ucLine=0;ucLine<3;ucLine++)		//列扫描
		{
		   SCANPORT=uca_LineScan[ucLine];			   //输出扫描电位。
			ucTemp=SCANPORT&0x8F;					   //输入扫描电位,并屏蔽高4位。
			if(ucTemp!=0x8F)		 
			  {								  //判断该列是否有按键按下。
				switch(ucTemp)
					{
					case 0x8E: ucRow=10;break;		  //如果有,则判断行号。
					case 0x8D: ucRow=20;break;
					case 0x8B: ucRow=30;break;
					case 0x87: ucRow=40;break;
					default: P2=~P2;  break;
					 }
				 	break;
			   }
		 }  

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<恢复键扫描处理前初始状态>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
	SCANPORT=0x8F;	  					//恢复P2口
   return (ucRow+ucLine+1);//返回按键编码。格式为2位数,高位为行号,低位为列号。
  }
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<恢复键扫描处理前初始状态>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
void vINT0(void) interrupt 0
{ 
  EX0=0;
  key_chuli(getkey());
  while((SCANPORT&0x8F)!=0x8f)   //等待按键松开//
  {
  };
  EX0=1;
 }



⌨️ 快捷键说明

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