一个直流电机调速源程序

erica Post at 2006/8/2 14:49:00
#include <AT89X51.h>
#define uchar unsigned char
#define uint unsigned int
uchar zhishi[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; /*显示码*/
uint a,b;
bit mod=1;
uchar i,j;
void jianpan(void)                  /*键盘扫描程序*/
{
if(P2_1==0)              /*P21为加速键*/
    if(a<49900)
        a=a+100;
                  
if(P2_5==0)              /*P25为减速键*/
    if(a>100)
        a=a-100;
           
}
void waite(void)             /*显示用延时程序*/
{
  for(i=0;i<3;i++)
    for(j=0;j<10;j++);
}
void xianshiqi(void)       /*显示程序*/
{
if(a>=45000)
    P0=zhishi[9];
    waite();
if(a>=40000&&a<45000)
    P0=zhishi[8];
    waite();
if(a>=35000&&a<40000)
    P0=zhishi[7];
    waite();
if(a>=30000&&a<35000)
    P0=zhishi[6];
    waite();
if(a>=25000&&a<30000)
    P0=zhishi[5];
    waite();
if(a>=20000&&a<25000)
    P0=zhishi[4];
    waite();
if(a>=15000&&a<20000)
    P0=zhishi[3];
    waite();
if(a>=10000&&a<15000)
    P0=zhishi[2];
    waite();
if(a>=5000&&a<10000)
    P0=zhishi[1];
    waite();
if(a<5000)
    P0=zhishi[0];
    waite();
}
void intie0(void) interrupt 0       /*用于测试停止开关*/
{
mod=0;
}
void intt0(void) interrupt 1        /*T0中断服务,用于输出占空比可调的脉冲*/
{
b=50000-a;
if(P1_0==1)
    {
      TH0=(65536-a)/256;
      TL0=(65536-a)%256;
      P1_0=0; P1_3=0;
                      }
else
    {
      TH0=(65536-b)/256;
      TL0=(65536-b)%256;
      P1_0=1; P1_3=1;
                      }
}
void intie1(void) interrupt 2    /*用于可控硅关断*/
{
  P3_1=0;
  waite();
  for(i=0;i<150;i++)
     for(j=0;j<3;j++);
  P3_1=1;
}
void main(void)
{
        TMOD=0x01;
        TH0=0xff;
        TL0=0xff;
        TCON=0x05;
        IE=0x87;
     cx:while(P2_6);
        while(P2_6==0);
        a=100;
        TR0=1;
        while(mod)
           {
             jianpan();
             xianshiqi();
            }
        TR0=0;
        P1_0=1;
        P1_3=1;
        P3_1=0;
        waite();
        P3_1=1;
                P0=0xff;
        if(mod==0)mod=1;
                goto cx;
}
已有 0 位网友发表了看法