最新文章专题视频专题问答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
当前位置: 首页 - 正文

单片机实验及proteus仿真_C语言篇

来源:动视网 责编:小OO 时间:2025-10-02 07:35:43
文档

单片机实验及proteus仿真_C语言篇

单片机实验:说明,以下是我整理了一些在学习单片机的过程中所做的一些典型的实验,所有程序均用C语言编写,为了方便,在仿真时电路能省的都被省掉了(比如省去晶振用了外部时钟)。程序不一定很优化,也不一定完全没有错误,仅供大家参考。希望大家一块学习!!!!第一:I/O操作篇实验一.闪烁的灯图:程序:#include"ATX51.H"voiddelay02s();voidmain(void){while(1)点亮delay02s();//延时0.2s熄灭delay02s();//延时0.2s}}v延
推荐度:
导读单片机实验:说明,以下是我整理了一些在学习单片机的过程中所做的一些典型的实验,所有程序均用C语言编写,为了方便,在仿真时电路能省的都被省掉了(比如省去晶振用了外部时钟)。程序不一定很优化,也不一定完全没有错误,仅供大家参考。希望大家一块学习!!!!第一:I/O操作篇实验一.闪烁的灯图:程序:#include"ATX51.H"voiddelay02s();voidmain(void){while(1)点亮delay02s();//延时0.2s熄灭delay02s();//延时0.2s}}v延
单片机实验:

说明,以下是我整理了一些在学习单片机的过程中所做的一些典型的实验,所有程序均用C语言编写,为了方便,在仿真时电路能省的都被省掉了(比如省去晶振用了外部时钟)。程序不一定很优化,也不一定完全没有错误,仅供大家参考。

希望大家一块学习!!!!

第一:I/O操作篇

实验一.闪烁的灯

图:

程序:

#include "ATX51.H"

void delay02s();

void main(void)

{while(1)

 点亮

  delay02s(); //延时0.2s

 熄灭

  delay02s(); //延时0.2s

  }

}

v延时0.2s的函数

{unsigned char i,j,k;

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

  for(i=20;i=0;i--)

  for(k=248;k=0;k--);

 }

实验二:模拟开关

程序:

#include "ATX51.H"

void main()

  while(1)

 按下P1_7=0,led点亮

 弹起P1_7=1,led熄灭

}

实验三: 多路开关

程序:

#include "ATX51.H"

void main()

{while(1)

 {P1_0 = P1_7;

  P1_1 = P1_6;

  P1_2 = P1_5;

  P1_3 = P1_4;

 }

}

实验四:跑马灯(一)

图:

程序:

//单一灯的左移右移

//八个发光二极管L1-L8分别接在单片机的P1.0-P1.7接口上

//输出“0”时,发光二极管亮,开始时P1.0→P1.1→P1.2→P1.3→┅→P1.7→P1.6→┅→P1.0亮,重复循环。

#include "ATX51.H"

void delay02s();

void main()

{unsigned int a;

 while (1)

 {P1=0xfe;

  delay02s();

for(a=7;a>0;a--)//右移

{P1=(P1<<1)+1;

  }

for(a=6;a>0;a--)//左移

{P1=(P1>>1)+0x80;

  }

 }

}

 

void delay02s()

{unsigned int i,j,k;

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

for(j=0;j<20;j++)

for(k=0;k<248;k++);

}

实验五:跑马灯(二、查表方式)

图:

程序:

#include "ATX51.H"

void delay02s();

 

void main()

{第一次,右移一行

 第二次,右移一行

 第一次,左移一行

 第二次,左移一行

 闪烁两次

 unsigned char a;

 while(1)

{ for (a=0;a<35;a++)

 }

 

void delay02s()

{unsigned char i,j,k;

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

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

}

实验六:led计数

程序:

#include

void delay02s();  

void main() 

{unsigned char code table[]={0x40,0xf9,0x24,0x30,0x19,0x12,0x03,0xf8,0x00,0x18};  

 unsigned char disp;  

 while(1) 

 

void delay02s() 

{ unsigned char i,j,k; 

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

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

for(k=248;k>0;k--);

}

实验七:二进制计数

程序:

//用四个发光二极管模拟计数点击开关次数.

#include "ATX51.H"

void delay10ms();

void main()

{P0=0xff;

 while(1)

  {

/*

   if(P0_7==1)       //按键按下

      if(P0_7==0)   //按键弹起,此时灯亮.

//////////////////////////////////////////////

*/

//////////////////////////////////////////////  

   if(P0_7==0)       //按键弹起

      if(P0_7==1)   //按键按下,此时灯亮.

//////////////////////////////////////////////

  }

void delay10ms() 

{ unsigned char i,j; 

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

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

验八:一键多用

程序:

#include "ATX51.H"

void delay10ms();

void delay02s();

void main()

{unsigned char id=0;

 while(1)

 按键弹起

 

 

switch(id) 

 

}

}

void delay10ms()

{unsigned char i,k;

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

for(k=248;k>0;k--);

}

void delay02s()

{unsigned char j;

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

 delay10ms();

}

实验九:00~99计数

程序:

//00~99计数器

#include "ATX51.H"

void delay1s();

void main()

{unsigned char code table[]={0xf9,0x24,0x30,0x19,0x12,0x03,0xf8,0x00,0x18,0x40};  

 unsigned int high=9;

 unsigned int light=9;

 P0=table[light];

 P2=table[high];

 delay1s();

 while(1)

{for(light=0;light<10;light++)

 

  }

}

void delay1s()

{unsigned char i,j,k;

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

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

for(k=248;k>0;k--);

}

实验十:可预置数加减计数器

程序:

//K1(P3_7)加计数.K2(P3_6)头减计数.

#include "ATX51.H"

void delay02s();

void delay10ms();

void main()

{P0=P2;

 while(1)

  {if(P3_6==0)

        {P0--;                               

 

 

}

void delay02s()

{unsigned char j;

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

  delay10ms();

}

void delay10ms()

{unsigned char i,k;

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

for(k=248;k>0;k--);

 }

实验十一:

图:共阴LED

程序:

//开关按下时显示"12345开关弹起时显示"HELLO".

#include

void delay01ms();

void main(void) 

{unsigned char code table1[]={0xf9,0x24,0x30,0x19,0x12,0xff,0xff,0xff};

 unsigned char code table2[]={0x09,0x06,0xc7,0xc7,0x40,0xff,0xff,0xff}; 

 unsigned char i;  

 while(1) 

 

 

 

 

 

 

 

 

 

  

 

}

void delay01ms()

for(a=4;a>0;a--)

for(b=248;b>0;b--);

 }

实验十二、4*4键盘

图:

程序:

#include "ATX51.H"

 

void delay10ms();

void main()

{unsigned char key;

 unsigned char table[]={0x40,0xf9,0x24,0x30,

0x19,0x12,0x03,0xf8,

0x00,0x18,0x08,0x00,

0x46,0x40,0x06,0x0e, 0xff}; 

 while(1)

 {P0=0xff;

  

  P3=0xff;

  P3_4=0;

  key=P3&0x0f;

  if(key!=0x0f)

  P3=0xff;

  P3_5=0;

  key=P3&0x0f;

  if(key!=0x0f)

  P0=table[key]; 

  while(key!=0x0f) 

  }

  P3=0xff;

  P3_6=0;

  key=P3&0x0f;

  if(key!=0x0f)

  P0=table[key]; 

  while(key!=0x0f) 

  }

  P3=0xff;

  P3_7=0;

  key=P3&0x0f;

  if(key!=0x0f)

  P0=table[key]; 

  while(key!=0x0f) 

  }

}

}

void delay10ms()

 {unsigned int i,k;

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

for(k=20;k>0;k--);

 }

实验十三 lcd

原理图:

程序:

#include "ATX52.H"

#define  lcd_rs  P3_2

#define  lcd_rw  P3_1

#define  lcd_en  P3_0

#define  lcd_data P1

void writecmd(int a)  //写控制字

{int i;

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

  lcd_rs=0;

  lcd_rw=0;

  lcd_en=1;

  lcd_data=a;

  lcd_en=0;

}

void writedata(char lcddata)  //显示字符

{int i;

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

 lcd_rs=1;

 lcd_rw=0;

 lcd_en=1;

 lcd_data=lcddata;

 lcd_en=0;

}

void writestring(char addr,char *str) //显示字符串

{writecmd(addr);

 do{ writedata(*str);

 while(*str!='\\0');

 }

//=====lcd初始化================================

 {writecmd(0x38);//8位,两行,5X7字型 (控制字"001 d1 d2 d3 x x" , 其中 d1:数据长度选择(8位或4位),d2:单双列选择,d3:5X10或5X7字型选择)

  writecmd(0x08);  //关闭显示屏

  writecmd(0x01);  //清除显示屏

  writecmd(0x0c);  //开启显示屏,游标,与闪烁 (控制字"00001 d1 d2 d3其中 d1:屏幕开/关, d2:光标开/关, d3:闪烁开/关) 

  writecmd(0x06);  //地址递增(AC+1)

 }

//==============================================

 void main()

 {char disp1[]={"My QQ:3402384"};

  char disp2[]={"  Hello Lameck !"};

  lcdinit();

  while(1)

  {writestring(0xc0,disp1);

  }

 }

目前只完成了这些,剩下的还没来的及写出来,先跟大家共享一下吧。

文档

单片机实验及proteus仿真_C语言篇

单片机实验:说明,以下是我整理了一些在学习单片机的过程中所做的一些典型的实验,所有程序均用C语言编写,为了方便,在仿真时电路能省的都被省掉了(比如省去晶振用了外部时钟)。程序不一定很优化,也不一定完全没有错误,仅供大家参考。希望大家一块学习!!!!第一:I/O操作篇实验一.闪烁的灯图:程序:#include"ATX51.H"voiddelay02s();voidmain(void){while(1)点亮delay02s();//延时0.2s熄灭delay02s();//延时0.2s}}v延
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top