视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
51单片机基本程序
2025-10-02 23:20:40 责编:小OO
文档
1第一位隔一秒闪烁一次

#include

#define uint unsigned int

sbit led1=P1^0;

uint i;

uint j;

void main()

{

     while(1)

     {

          led1=0;

     for(i=1000;i>0;i--)

     for(j=110;j>0;j--);

          led1=1;

     for(i=1000;i>0;i--)

     for(j=110;j>0;j--);

     }

}

2复杂广告灯

#include

#define uint unsigned int

#define uchar unsigned char

uchar discode[]={      0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,//正向流水灯

                       0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,0xFF,//反向流水灯

                       0xAA,0x55,0xAA,0x55,0xAA,0x55,0xFF,//隔灯闪烁3次

                       0xF0,0x0F,0xF0,0x0F,0xFF,//高四盏。低四盏闪烁2次

                       0x33,0xCC,0x33,0xCC,0x33,0xCC,0xFF//隔两盏闪烁3次

                       };

void delayms(uint ms)

   {

      uint i;

      while(ms--)

      {

for(i=0;i<120;i++);

      }

   }

void main(void)

  {  

     uchar i;

     P0=0xFF;

     while(1)

        {

     for(i=0;i<35;i++)

              {

                 P0=discode[i];

                 delayms(250);

              }

        }

}

   

3拉幕式与闭幕式广告灯

#include

#define uint unsigned int

#define uchar unsigned char

uchar discode1[4]={0x18,0x24,0x42,0x81};

uchar discode2[4]={0x7E,0x3C,0x18,0x00};

void delayms(uint ms)

    {

       uint i;

           while(ms--)

             {

         for(i=0;i<120;i++);

             }

    }

void main(void)

    {

       uchar i,j;

       P0=0xFF;

       while(1)

           {

     for(i=0;i<4;i++)

                 {

                     j=discode1[i];

                     P0=~j;

                     delayms(500);

                  }

               j=0xFF;

               P0=~j;

                   delayms(500);

         for(i=0;i<4;i++)

                   {

                     j=discode2[i];

                     P0=~j;

                     delayms(500);

                  }

           }

  }

4流水灯跑马灯左移右移

#include

#define uint unsigned int

#define uchar unsigned char

void delay(uint s)

  {

    uint i;

      while(s--)

      {

for(i=0;i<120;i++);

      }

   }

void main(void)

   {

     uchar i,j;

     P0=0xFF;

     while(1)

       {

          j=0x01;

     for(i=0;i<8;i++)

             {

               P0=~j;

               delay(500);

         j=j<<1;

             }

          P0=0xFF;

          delay(1000);

          j=0x80;

for(i=0;i<8;i++)

             {

               P0=~j;

               delay(500);

         j=j>>1;

             }

         }

    }

5千位静态显示数字

#include

sbit SMG_q = P1^0;    //定义数码管阳级控制脚(千位)

sbit SMG_b = P1^1;    //定义数码管阳级控制脚(百位)

sbit SMG_s = P1^2;    //定义数码管阳级控制脚(十位)

sbit SMG_g = P1^3;    //定义数码管阳级控制脚(个位)

void main()

{

   SMG_q=0;

   P0=0xF8;

   while(1);

 }

6,4位数码管同时静态显示

#include

#define unchar unsigned char

#define uint unsigned int

sbit SMG_q = P1^0;    //定义数码管阳级控制脚(千位)

sbit SMG_b = P1^1;    //定义数码管阳级控制脚(百位)

sbit SMG_s = P1^2;    //定义数码管阳级控制脚(十位)

sbit SMG_g = P1^3;    //定义数码管阳级控制脚(个位)

unchar mun;

uchar; code table[]={

0xc0,0xf9,0xa4,0xb0,

0x99,0x92,0x82,0xf8,

0x80,0x90,0x88,0x83,

0xc6,0xa1,0x86,0x8e};

void delay(uint);

void main(void)

{

   SMG_q=0; SMG_b=0; SMG_s=0; SMG_g=0;

//P1=0xf0;两种都可以实现。。

    while(1)

    {   

for(mun=0;mun<16;mun++)

       {

           P0=table[mun];

           delay(500);

       }

    }

}

void delay(uint s)

 {

    uint i;

    while(s--)

for(i=120;i>0;i--);

 }

7.数码管动态显示

#include

#define uchar unsigned char

#define uint unsigned int

sbit q = P1^0;    //定义数码管阳级控制脚(千位)

sbit b = P1^1;    //定义数码管阳级控制脚(百位)

sbit s = P1^2;    //定义数码管阳级控制脚(十位)

sbit g = P1^3;    //定义数码管阳级控制脚(个位)

//unchar mun;

uchar; code table[]={

0xc0,0xf9,0xa4,0xb0,

0x99,0x92,0x82,0xf8,

0x80,0x90,0x88,0x83,

0xc6,0xa1,0x86,0x8e};

void delay(uint);

void main(void)

{

   while(1)

   { 

     q=0;

     P0=table[1];

     delay(500);

     q=1;

     b=0;

     P0=table[2];

     delay(500);

     b=1;

     s=0;

     P0=table[3];

     delay(500);

     s=1;

     g=0;

     P0=table[4];

     delay(500);

     g=1;

   }

 }

void delay(uint s)

 {

    uint i;

    while(s--)

for(i=120;i>0;i--);

 }

8.1中断定时器0工作1LED 1s闪烁

#include

#define uint unsigned int

#define uchar unsigned char

sbit led1=P1^0;

     uchar num;

void main()

{

   TMOD=0x01;

   TH0=(65536-45872)/256;

   TL0=(65536-45872)%256;

   EA=1;

   ET0=1;

   TR0=1;

   while(1);

}

void T0_time() interrupt 1

{

   TH0=(65536-45872)/256;

   TL0=(65536-45872)%256;

   num++;

   if(num==50)

   {

     num=0;

     led1=~led1;

    }

}

8.2中断定时器LED,前两位数码管59s循环计数

#include

#define uchar unsigned char

#define uint unsigned int

sbit led1=P0^0;

uchar code table[]={

0xc0,0xf9,0xa4,0xb0,

0x99,0x92,0x82,0xf8,

0x80,0x90,0x88,0x83,

0xc6,0xa1,0x86,0x8e};

void delay(uint);

void display(uchar,uchar);

uchar num,num1,num2,shi,ge;

void main(void)

{

   TMOD=0x11;

   TH0=(65536-45872)/256;

   TL0=(65536-45872)%256;    

   TH1=(65536-45872)/256;

   TL1=(65536-45872)%256;

   EA=1;

   ET0=1;

   ET1=1;

   TR0=1;

   TR1=1;

   while(1)

   {

      display(shi,ge);

   }

}

void display(uchar shi,uchar ge)

{      P1=0xff;

   P1=0xfd;

   P0=table[shi];

   delay(10);

   P1=0x00;

   

  P1=0xff;

  P1=0xfe;

   P0=table[ge];

   delay(10);

  P1=0x00;

}

void delay(uint s)

   {

     uint i,j;

for(i=s;i>0;i--)

for(j=110;j>0;j--);

    }

void T0_time()interrupt 1

{

   TH0=(65536-45872)/256;

   TL0=(65536-45872)%256;

 

   num1++;

   if(num1==50)

   {

     num1=0;

     led1=~led1;

    }

}

void T1_time()interrupt 3

{

   TH1=(65536-45872)/256;

   TL1=(65536-45872)%256;

   num2++;

   if(num2==20)

   {

     num2=0;

     num++;

     if(num==60)

     num=0;

     shi=num/10;

     ge=num%10;

     

 

   }

}    

//灯的亮灭。。

9.1键盘使用

#include

#define uchar unsigned char

#define uint unsigned int

sbit k1=P3^4;      //键盘,k1 k2 k3 k4分别接,p34.p35 p36 p37.

sbit k2=P3^5;

sbit k3=P3^6;

sbit k4=P3^7;

sbit d=P1^2;

sbit c=P1^3;

uchar code table[]={

0xc0,0xf9,0xa4,0xb0,

0x99,0x92,0x82,0xf8,

0x80,0x90,0x88,0x83,

0xc6,0xa1,0x86,0x8e};

void delayms(uint);

uchar numt0,num;

void display(uchar numdis)  //显示59s的常用方式

{ uchar shi,ge;

  shi=numdis/10;

  ge=numdis%10;

  

   P1=0xff;    //控制十位数字

   P1=0xfd;

   P0=table[shi];

   delayms(10);

   P1=0x00;

   P1=0xff;   //控制个位数字

   P1=0xfe;

   P0=table[ge];

   delayms(10);

   P1=0x00;

}

void delayms(uint xms)  //简单的延时程序

{

  uint i,j;  

for(i=xms;i>0;i--)

for(j=110;j>0;j--);

}

void init()    //初始化函数

{

   TMOD=0x01;

   TH0=(65536-45872)/256;

   TL0=(65536-45872)%256;

   EA=1;

   ET0=1;

}

void keyscan()       //控制键盘的程序

{

  if(k1==0)

  {

    delayms(10);   //去抖动延时

    if(k1==0)

    {

      num++;

      if(num==60)

        num=0;

        while(!k1);   //等待按键释放

     }

  }

    if(k2==0)

  {

    delayms(10);

    if(k2==0)

    {

      

      if(num==0)

        num=60;

        num--;

        while(!k2);

     }

  }

  

if(k3==0)

  {

    delayms(10);

    if(k3==0)

    {

     

        num=0;

        while(!k3);

     }

  }

if(k4==0)

  {

    delayms(10);

    if(k4==0)

    {

      

        while(!k4);

        TR0=~TR0;

     }

  }

}

void main()     //主函数

 {

   init();    //1,先初始化数据init()

   while(1)

   {

     keyscan();   //键盘选择?

     display(num);  //显示两位数字函数

   }

 }

 void T0_time()interrupt 1    //中断服务程序

 {

   TH0=(65536-45872)/256;

   TL0=(65536-45872)%256;

   numt0++;

   if(numt0==20)    //1s的判断

   {

      numt0=0;

      num++;

      if(num==60)

        num=0;

    }

  }

9.2矩阵键盘使用

#include

#define uchar unsigned char

#define uint unsigned int

uchar code table[]={

0xc0,0xf9,0xa4,0xb0,

0x99,0x92,0x82,0xf8,

0x80,0x90,0x88,0x83,

0xc6,0xa1,0x86,0x8e};

void delayms(uint xms)

{

   uint i,j;

for(i=xms;i>0;i--)

for(j=110;j>0;j--);

}

void display(uchar num)

{

   P0=table[num];    

   P1=0xf0;

}

void jianpan()

{

   uchar temp,key;

   P3=0xfe;

   temp=P3;

   temp=temp&0xf0;

   if(temp!=0xfe)  //11111高位没有零,(没有键按下)

   {

      delayms(10);

      temp=P3;   //随时可能有键按下

      temp=temp&0xf0;

       if(temp!=0xfe)

       {

          temp=P3;    

          switch(temp)

          {

          case 0xee:

               key=0;

               break;

          case 0xde:

               key=1;

               break;

          case 0xbe:

               key=2;

               break;

          case 0x7e:

               key=3;

               break;

          }

          while(temp!=0xf0)    //等待键盘释放

          {

             temp=P3;

             temp=temp&0xf0;

          }

          display(key);

     }

}

 P3=0xfd;

   temp=P3;

   temp=temp&0xf0;

   if(temp!=0xfe)  //222222高位没有零,(没有键按下)

   {

      delayms(10);

      temp=P3;

      temp=temp&0xf0;

       if(temp!=0xfe)

       {

          temp=P3;

          switch(temp)

          {

          case 0xed:

               key=4;

               break;

          case 0xdd:

               key=5;

               break;

          case 0xbd:

               key=6;

               break;

          case 0x7d:

               key=7;

               break;

          }

          while(temp!=0xf0)

          {

             temp=P3;

             temp=temp&0xf0;

          }

          display(key);

     }

}

 P3=0xfb;

   temp=P3;

   temp=temp&0xf0;

   if(temp!=0xfe)  //333333高位没有零,(没有键按下)

   {

      delayms(10);

      temp=P3;

      temp=temp&0xf0;

       if(temp!=0xfe)

       {

          temp=P3;

          switch(temp)

          {

          case 0xeb:

               key=8;

               break;

          case 0xdb:

               key=9;

               break;

          case 0xbb:

               key=10;

               break;

          case 0x7b:

               key=11;

               break;

          }

          while(temp!=0xf0)

          {

             temp=P3;

             temp=temp&0xf0;

          }

          display(key);

     }

}

 P3=0xf7;

   temp=P3;

   temp=temp&0xf0;

   if(temp!=0xfe)  //44444高位没有零,(没有键按下)

   {

      delayms(10);

      temp=P3;

      temp=temp&0xf0;

       if(temp!=0xfe)

       {

          temp=P3;

          switch(temp)

          {

          case 0xe7:

               key=12;

               break;

          case 0xd7:

               key=13;

               break;

          case 0xb7:

               key=14;

               break;

          case 0x77:

               key=15;

               break;

          }

          while(temp!=0xf0)

          {

             temp=P3;

             temp=temp&0xf0;

          }

          display(key);

     }

  }

}

void main(void)

{

    P1=0x0f;    //打开数码管选通开关

    

    while(1)

    {

    jianpan();  //扫描键盘程序

    }

}

              下载本文

显示全文
专题