最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

51单片机基本程序

来源:动视网 责编:小OO 时间:2025-10-02 23:20:40
文档

51单片机基本程序

1第一位隔一秒闪烁一次#include#defineuintunsignedintsbitled1=P1^0;uinti;uintj;voidmain(){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#defineuintunsignedint#defineucharunsignedcharuchardisco
推荐度:
导读1第一位隔一秒闪烁一次#include#defineuintunsignedintsbitled1=P1^0;uinti;uintj;voidmain(){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#defineuintunsignedint#defineucharunsignedcharuchardisco
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();  //扫描键盘程序

    }

}

              

文档

51单片机基本程序

1第一位隔一秒闪烁一次#include#defineuintunsignedintsbitled1=P1^0;uinti;uintj;voidmain(){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#defineuintunsignedint#defineucharunsignedcharuchardisco
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top