单片机(AT89C51)的仿真实验 |
您所在的位置:网站首页 › 单片机流水灯工作原理 › 单片机(AT89C51)的仿真实验 |
单片机的仿真实验——流水灯和逐一闪烁灯(输入与输出)
在进行仿真实验前必须先装了软件,一个是单片机仿真软件(ISIS 7 Professional)和单片机写程序的软件(Keil uVision4),一个写程序一个烧程序。如果没装的可以私聊我。 流水灯的实现(正向的流水灯): 原理:P1初始值是:1111 1111和temp(0000 0001)异或等于以后 P1=1111 1110使得第一个灯亮着, 进入循环0000 0001左移一位得到0000 0010,然后再和P1(1111 1110)异或等于以后 P1=1111 1100使得第一个灯和第二个灯都亮着,下面也是如此往复的循环,一盏一盏的连着点亮就实现了流水灯,然后一盏接着一盏的灭掉。 #include void delay02s(void) //延时函数的定义申明 { unsigned char i,j,k; for(i=20;i>0;i--) for(j=20;j>0;j--) for(k=248;k>0;k--); } void main(void) { char temp; char i; while(1) { temp=0x01; for(i=0;i0;k--); } void main(void) { while(1) { if(i0;i--) for(j=20;j>0;j--) for(k=248;k>0;k--); } void main(void) { char temp; char i; while(1) { temp=0x80; for(i=0;i>1; //右移实现 } } } 逐一闪烁灯(1.暴力代码) 原理:直接把八个灯的接口全部定义一遍,然后在循环中写入各个接口的关闭和打开的代码,再在中间加入延时函数。比较的暴力,容易理解,容量大。 #include sbit P1_0=P1^0; sbit P1_1=P1^1; sbit P1_2=P1^2; sbit P1_3=P1^3; sbit P1_4=P1^4; sbit P1_5=P1^5; sbit P1_6=P1^6; sbit P1_7=P1^7; void delay02s(void) //延时函数的定义申明 { unsigned char i,j,k; for(i=20;i>0;i--) for(j=20;j>0;j--) for(k=248;k>0;k--); } void main(void) { int i=0; while(1) { P1_0=0; //第一盏灯的开启 delay02s(); //延时函数 P1_0=1; //第一盏灯的关闭 delay02s(); P1_1=0; delay02s(); P1_1=1; delay02s(); P1_2=0; delay02s(); P1_2=1; delay02s(); P1_3=0; delay02s(); P1_3=1; delay02s(); P1_4=0; delay02s(); P1_4=1; delay02s(); P1_5=0; delay02s(); P1_5=1; delay02s(); P1_6=0; delay02s(); P1_6=1; delay02s(); P1_7=0; delay02s(); P1_7=1; delay02s(); } }逐一闪烁灯(2.借鉴流水灯的做法) 原理: 在循环中P1被赋值,temp=0x01(0000 0001)进行了取反的操作使得P1=1111 1110,就可以点亮第一个灯了 temp左移一位得到(temp=0000 0010)进行取反的操作使得P1=1111 1101,就可以点亮第二个灯了 下面就是循环的操作不难理解。 #include void delay02s(void) { unsigned char i,j,k; for(i=20;i>0;i--) for(j=20;j>0;j--) for(k=248;k>0;k--); } void main(void) { char temp; char i; while(1) { temp=0x01; for(i=0;i |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |