好文档 - 专业文书写作范文服务资料分享网站

昆明理工大学单片机实验报告

天下 分享 时间: 加入收藏 我要投稿 点赞

5.5、8个全部闪烁及关闭发光二极管

8个灯全亮

8个灯全灭及关闭发光二极管

六、心得体会

这次实践加深了对课堂所学的理解,让我更加深入学习了单片机对于I/O的控制方法。熟悉了KeilC的使用方法,锻炼了C51程序设计、调试方法。在面对开发板的时候,一开始也会因为定时等等问题不能让八个灯按照要求显示,但是后来在实践中得到老师和同学的帮助,从最简单的流水灯做起,到更复杂的变化,一次次纠错中,自己的信心和能力都有加强,体会到了单片机的设计中的魅力,希望能进一步学习更多更复杂的应用。

七、源代码

#include #include

#define uint unsigned int //给类型unsigned int 取一个别名为:uint #define uchar unsigned char

void delay_ms(uint); //延时子程序的声明

void main() {

uchar table[4] = {0x7e,0xbd,0xdb,0xe7}; //创建一个数组 uchar i,j; uchar k = 3; uchar aa = 0xfe;

uchar bb = 0xbf;

for(i=0;i<=3;i++)//循环3次,每次先奇数灯亮,然后偶数灯亮 { P1 = 0xaa; delay_ms(300);//奇数灯亮300毫秒 P1 = 0x55; delay_ms(300);//偶数灯亮300毫秒 }

while(k) { for(i=0;i<8;i++)//实现第1个灯到第8个灯从上到下的流水灯 { P1 = aa; delay_ms(300); aa =_crol_(aa,1);//循环左移,每次整体移1位 } for(j=0;j<6;j++)//实现从第7到第2个灯的流水灯 { P1 = bb; delay_ms(300); bb =_cror_(bb,1);//循环右移,每次整体移1位 } bb =_cror_(bb,2);//为了回到从下到上的初始状态,需要整体再移2位 k--; }

P1 = 0xfe;//因为从下到上只两亮到第2个灯,所以第一个灯需要另外点亮 delay_ms(300);

for(i=0;i<3;i++) for(j=0;j<4;j++) //从两边向中间流动 { P1 = table[j]; delay_ms(300); }

for(i=0;i<3;i++) { for(j=3;j>0;j--) //从中间向两边流动 { P1 = table[j-1]; delay_ms(300); } if(i!=2)//判断是否是最后一次循环,若是则另外点亮两中间的两个二极管

{ P1 = 0xe7; delay_ms(300); } }

for(i=0;i<3;i++)//8个灯一起闪烁3次 { P1 = 0x00; delay_ms(300); P1 = 0xff; delay_ms(300); }

while(1) P1 = 0xff;//关闭发光二极管 }

void delay_ms(uint x_ms)//延时子程序 {

uint i,j;//定义两个局部变量

for(i = x_ms;i>0;i--)//循环x_ms次,其意义是延时x_ms毫秒 for(j = 110;j>0;j--); //延时一秒的程序 }

昆明理工大学单片机实验报告

5.5、8个全部闪烁及关闭发光二极管8个灯全亮8个灯全灭及关闭发光二极管六、心得体会这次实践加深了对课堂所学的理解,让我更加深入学习了单片机对于I/O的控制方法。熟悉了KeilC的使用方法,锻炼了C51程序设计、调试方法。在面对开发板的时候,一开始也
推荐度:
点击下载文档文档为doc格式
45uke2tv8q3cwgj88zse
领取福利

微信扫码领取福利

微信扫码分享