单片机——6个小例子

简介: 单片机——6个小例子

 目录

1.步进电机控制电路设计

2.车灯控制

3. 0-59倒计时

4.定时器,计数器--弥红灯

5.矩形键盘

6.模数转换


1.步进电机控制电路设计

所需元件:

74ls04,at89c51,cap,cap-elec,crystal,motor-stepper,res,uln2003a,74ls04。

例图:

image.gif编辑

例图代码:

#include<AT89X52.H>
void mdelay(unsigned int delay)
{
  unsigned int i;
  for(;delay>0;delay--)
    for(i=0;i<124;i++);
}
void main()
{
  while(1)
  {
    P1=0x03;   //0运行,0011,取反1100,a,b
    mdelay(50);
    P1=0x06;
    mdelay(50);
    P1=0x0C;
    mdelay(50);
    P1=0x09;
    mdelay(50);
  }
}

image.gif

2.车灯控制

所需元件:

at89c51,cap,cap-elec,27n5771,crysal,led-red,res,respack-8,sw-rot-3

例图:

image.gif编辑

例图代码:

#include<REG52.H>
sbit LEDL1=P2^0;
sbit LEDL2=P2^1;
sbit LEDR1=P2^2;
sbit LEDR2=P2^3;
sbit S1=P1^0;
sbit S2=P1^1;
void delay(unsigned int i)
{
while(i--);
}
void main()
{
 while(1)
 {
  P1=0xff;
  LEDL1=S1;
    LEDL2=S1;
  LEDR1=S2;
  LEDR2=S2;
  delay(20000);
  LEDL1=1;
    LEDL2=1;
  LEDR1=1;
  LEDR2=1;
  delay(20000);
  }
}

image.gif

3. 0-59倒计时

所需元件:

7SEG-MPX2-CC,74LS245,AT89C51-CAP,CAP-ELEC,CRYSTAL,RES,RESPACK-7

例图:

image.gif编辑

例图代码:

#include<AT89X52.h>
  #include<absacc.h>
  unsigned char code
  Tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6D,0x7D,0x07,0x7f,0x6f,0x77,0x7c};
  unsigned char Dat[]={0,0,0,0,0,0};
  unsigned char Second,t;
  void Delay()
  {
  unsigned char i;
  for(i=0;i<250;i++);
  }
  void main()
  {
  EA=1;
  ET0=1;
  TMOD=0x01;
  TH0=(65536-50000)/256;
  TL0=(65536-50000)%256;
  TR0=1;
  while(1)
  {
  Dat[0]=Second/10;
  Dat[1]=Second%10;
  P0=Tab[Dat[0]];
  P1=0xfe;
  Delay();
  P1=0xff;
  P0=Tab[Dat[1]];
  P1=0xfd;
  Delay();
  P1=0xff;
  }
  }
  void intserv1 (void) interrupt 1 using 1
  {
  TH0=(65536-50000)/256;
  TL0=(65536-50000)%256;
  t++;
  if(t==20)
  {
  t=0;
  Second++;
  if(Second>=60) Second=0;
  }
  }

image.gif

4.定时器,计数器--弥红灯

所需元件:

AT89C51,CAP,CAP-ELEC,CRYSTAL,LED-BARGRAPH-RED,LED-BIBY,RES

例图:

image.gif编辑

例图代码:

#include<reg52.h>
unsigned char i10,i8,i6;
unsigned char mod1,mod2;
bit F;
void main(void)
{
i10=10;
i8=8;
i6=6;
mod1=0x01;
mod2=0xAA;
F0=0;
TMOD=0x10;
TH1=0x3C;
TL1=0xB0;
IE=0x88;
TR1=1;
while(1);
}
void timer0(void) interrupt 3 using 1
{
TH1=0x3C;
TL1=0xB0;
i10--;
if(i10==0)
{
i10=10;
if(F==0)
{
P1=~mod1;
mod1=mod1<<1;
i8--;
if(i8==0)
{
i8=8;
F=1;
mod1=0x01;
}
}
else
{
P1=mod2;
mod2=~mod2;
i6--;
if(i6==0)
{
i6=6;
F=0;
}
}
}
}

image.gif

5.矩形键盘

所需元件:

7SEG-COM-CATHODE,74LS21,AT89C51,BUTTIN,CAP,

CAP-ELEC,CRYSTAL,RES,74LS21

例图:

image.gif编辑

例图代码:

/*#include<AT89X52.H>
unsigned char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,
0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delay10ms(void)
{
  unsigned char i,j;
  for(i=20;i>0;i--)
    for(j=248;j>0;j--);
}
unsigned char scan_key(void)
 {
  unsigned char scan,col,rol,tmp;
  bit flag=0;
  scan=0xef;
  for(col=0;col<4;col++)
    {
     P0=scan;
     tmp=~P0;
     tmp=tmp&0x0f;
    for(rol=0;rol<4;rol++)
       {
      if(tmp==(0x01<<rol) )
      {
      flag=1;
      break;
     }
    }
    if(flag==1)
    {
    while(tmp!=0x0f)
    {
     P0=0x0f;
     tmp=P0;
    }
    break;
    } 
     scan=(scan<<1)+1;
    }
    return(rol*4+col);
 }
 /*void  key_led(void) interrupt 0
 {
    unsigned char tmp,key;
      delay10ms();
      P0=0x0f;
      tmp=P0; 
      if(tmp!=0x0f)
      {
       key=scan_key();  
       P1=table[key];
      }
 } */
/*void main()
{
  P1=0x00;
  EA=1;
  EX0=1;
  IT0=1;
  P0=0x0f; 
   while(1){
    scan_key();
   }
 }
  void key_led(void) interrupt 0      
  {
  unsigned char key,tmp;
    delay10ms();
    P0=0x0f;
    tmp=P0; 
    if(tmp!=0x0f)
    {
    key=scan_key();
    P1=table[key];
  }
} */ 
/*#include<AT89X52.H>
unsigned char table[]={0x3f,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};
void delay10ms(void)
{
unsigned char i,j;
for(i=20;i>0;i--)
for(j=248;j>0;j--);
}
void main()
{
unsigned char tmp,key;
P1=0x00;
while(1)
{
while(tmp==0x0f)
{
P0=0x0f;
tmp=P0;
}
delay10ms();
P0=0x0f;
tmp=P0;
if(tmp==0x0f) continue;
key=scan_key();
P1=table[key];
}
}
unsigned char scan_key(void)
{
unsigned char scan,col,rol,tmp;
bit flag=0;
scan=0xef;
for(col=0;col<4;col++)
{
P0=scan;
tmp=P0;
switch(tmp&0x0f)
{
case 0x0e:rol=0;flag=1;break;
case 0x0e:rol=1;flag=1;break;
case 0x0e:rol=2;flag=1;break;
case 0x0e:rol=3;flag=1;break;
}
if(flag==1)break;
scan=(scan<<1)+1;
}
while(tmp!=0x0f)
{
P0=0x0f;
tmp=P0;
}
return(rol*4+col);
}
 #include<AT89X52.H>
unsigned char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,
0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delay10ms(void)
{
  unsigned char i,j;
  for(i=20;i>0;i--)
    for(j=248;j>0;j--);
}
unsigned char   scan_key(void)
 {
  unsigned char scan,col,rol,tmp;
  bit flag=0;
  scan=0xef;
  for(col=0;col<4;col++)
    {
     P0=scan;
     tmp=P0;
     switch(tmp&0x0f)
     {
      case 0x0e: rol=0;flag=1;break;
      case 0x0d: rol=1;flag=1;break;
      case 0x0b: rol=2;flag=1;break;
      case 0x07: rol=3;flag=1;break;
     }
     if( flag==1)break;
     scan=(scan<<1)+1;
    }
    while(tmp!=0x0f)
    {
     P0=0x0f;
     tmp=P0;
    } 
    return(rol*4+col);
 }
void main()
{
  unsigned char tmp,key;
  P1=0x00;
  while(1)
  {
    while(tmp==0x0f)
      {
        P0=0x0f;
        tmp=P0;
        }
    delay10ms();
    P0=0x0f;
    tmp=P0; 
    if(tmp==0x0f)continue;
    key=scan_key();
    P1=table[key];
  } 
}
  */
  #include<AT89X52.H>
unsigned char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,
0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delay10ms(void)
{
  unsigned char i,j;
  for(i=20;i>0;i--)
    for(j=248;j>0;j--);
}
unsigned char   scan_key(void)
 {
  unsigned char scan,col,rol,tmp;
  bit flag=0;
  scan=0xef;
  for(col=0;col<4;col++)
    {
     P0=scan;
     tmp=P0;
     switch(tmp&0x0f)
     {
      case 0x0e: rol=0;flag=1;break;
      case 0x0d: rol=1;flag=1;break;
      case 0x0b: rol=2;flag=1;break;
      case 0x07: rol=3;flag=1;break;
     }
     if( flag==1)break;
     scan=(scan<<1)+1;
    }
    while(tmp!=0x0f)
    {
     P0=0x0f;
     tmp=P0;
    } 
    return(rol*4+col);
 }
void main()
{
  unsigned char tmp,key;
  P1=0x00;
  while(1)
  {
    while(tmp==0x0f)
      {
        P0=0x0f;
        tmp=P0;
        }
    delay10ms();
    P0=0x0f;
    tmp=P0; 
    if(tmp==0x0f)continue;
    key=scan_key();
    P1=table[key];
  } 
}

image.gif

6.模数转换

所需元件:

ADC0809,AT89C51,CAP,CAP-ELEC,CRYSTAL,LED-BARGRAPH-RED,LED-BIBY,

POT-HG,RES

例图:

image.gif编辑

例图代码:

#include<reg52.h>
#include<INTRINS.h>
sbit EOC=P2^4;
sbit START=P2^5;
sbit CLOCK=P2^6;
sbit OE=P2^7;
unsigned char temp;
void main(void)
{
 TMOD=0x02;
 TH0=206;
 TL0=206;
 EA=1;
 ET0=1;
 TR0=1;
 while(1)
 {
  START=0;
  START=1;
  START=0;
  while(EOC==0);
  OE=1;
  temp=P0;
  P1=temp;
  _nop_();
  _nop_();
 }
 }
 void t0(void) interrupt 1 using 0
 {
  CLOCK=~CLOCK;
 }

image.gif


相关文章
|
6月前
|
存储 算法 编译器
如何优化单片机程序里面的C代码方法
如何优化单片机程序里面的C代码方法
55 0
第一章MCS-51单片机结构,单片机原理、接口及应用
第一章MCS-51单片机结构,单片机原理、接口及应用
555 0
第一章MCS-51单片机结构,单片机原理、接口及应用
|
传感器
STM32:红外传感器代码部分(内含实物图+外部信号流程,编写代码思路+代码+解析代码和扩展应用)
STM32:红外传感器代码部分(内含实物图+外部信号流程,编写代码思路+代码+解析代码和扩展应用)
3829 1
STM32:红外传感器代码部分(内含实物图+外部信号流程,编写代码思路+代码+解析代码和扩展应用)
【51单片机】静态数码管显示(设计思路&原理&代码演示)
【51单片机】静态数码管显示(设计思路&原理&代码演示)
【51单片机】一个简单的例子TMOD&TCON带你永远理解【(不)可位寻址】
【51单片机】一个简单的例子TMOD&TCON带你永远理解【(不)可位寻址】
【51单片机】自定义静态数码管显示(设计思路&代码演示)
【51单片机】自定义静态数码管显示(设计思路&代码演示)
【单片机】简易计算器完整代码带电路图
【单片机】简易计算器完整代码带电路图
392 0
【单片机】简易计算器完整代码带电路图
|
6月前
stm32f4外设学习篇(代码集合)(二)
stm32f4外设学习篇(代码集合)
|
6月前
|
芯片
stm32f4外设学习篇(代码集合)(一)
stm32f4外设学习篇(代码集合)
153 0
|
6月前
stm32f4外设学习篇(代码集合)(三)
stm32f4外设学习篇(代码集合)
122 0