找回密码
 注册
关于网站域名变更的通知
查看: 135|回复: 3
打印 上一主题 下一主题

经典32位单片机流水灯仿真电路+代码

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-6-17 10:37 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
利用函数调用实现流水灯多样控制, 很好的单片机初学实例。
# k- m) U4 G& C+ G' U. |. [仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
  }" |  T2 F% i
8 w2 T; k5 X8 ]' }3 e- Z# T  @
5 i; c: D. Z0 O单片机源程序如下:
! p/ x1 f2 M) T# T3 b
  • /***********************************************************************/
  • #include "reg51.h"
  • #define uchar unsigned char         //定义unsigned char 为 uchar
  • #define uint  unsigned int
  • sbit  F1 = P3^0;
  • sbit  F2 = P3^1;
  • uint  time = 40;        //通过改变TIME的参数可以改变流水灯的变换速度
  • /***************一微秒延时子程序******************/
  • void delayus(uint delay){
  •         while(delay--);
  • }
  • /***************一毫秒延时子程序******************/
  • void delayms(uint delay){
  •         while(delay--)
  •                 delayus(149);
  • }
  • /*******************************变换方式一  子函数 ***********************************/
  • void run_LED_fun1()
  • {
  • uchar a,temp,temp1;
  • temp=0x10;
  • for(a=9;a>0;a--)   //P1口LED灯依次点亮
  • {
  • P1=~temp;
  • delayms(time);
  • temp<<=1;
  • }
  • temp=0x01;
  • for(a=9;a>0;a--)   //P3口LED灯依次点亮
  • {
  • P3=~temp;
  • delayms(time);
  • temp<<=1;
  • }
  • temp=0x01;                  //P2口LED灯依次反向点亮
  • for(a=9;a>0;a--)
  • {
  • P2=~temp;
  • delayms(time);
  • temp<<=1;
  • }
  • temp=0x80;                  //P0口LED灯依次反向点亮
  • for(a=9;a>0;a--)
  • {
  • P0=~temp;
  • delayms(time);
  • temp>>=1;
  • }
  • temp=0x01;
  • for(a=9;a>0;a--)   //P0口LED灯依次点亮
  • {
  • P0=~temp;
  • delayms(time);
  • temp<<=1;
  • }
  • temp=0x80;
  • for(a=9;a>0;a--)   //P2口LED灯依次点亮
  • {
  • P2=~temp;
  • delayms(time);
  • temp>>=1;
  • }
  • temp=0x80;                  //P3口LED灯依次反向点亮
  • for(a=9;a>0;a--)
  • {
  • P3=~temp;
  • delayms(time);
  • temp>>=1;
  • }
  • temp=0x80;                  //P1口LED灯依次反向点亮
  • for(a=9;a>0;a--)
  • {
  • P1=~temp;
  • delayms(time);
  • temp>>=1;
  • }
  • temp=0xfe;
  • for(a=8;a>0;a--)
  • {
  • P1=temp;
  • delayms(time);
  • temp<<=1;
  • }
  • temp=0xfe;
  • for(a=8;a>0;a--)
  • {
  • P3=temp;
  • delayms(time);
  • temp<<=1;
  • }
  • temp=0xfe;
  • for(a=8;a>0;a--)
  • {
  • P0=temp;
  • delayms(time);
  • temp<<=1;
  • }
  • temp=0x7f;
  • for(a=8;a>0;a--)
  • {
  • P2=temp;
  • delayms(time);
  • temp>>=1;
  • }
  • temp=0x01;
  • for(a=8;a>0;a--)
  • {
  • P2=temp;
  • delayms(time);
  • temp1=~temp;
  • temp1<<=1;
  • temp=~temp1;
  • }
  • temp=0x80;
  • for(a=8;a>0;a--)
  • {
  • P0=temp;
  • delayms(time);
  • temp1=~temp;
  • temp1>>=1;
  • temp=~temp1;
  • }
  • temp=0x80;
  • for(a=8;a>0;a--)
  • {
  • P3=temp;
  • delayms(time);
  • temp1=~temp;
  • temp1>>=1;
  • temp=~temp1;
  • }
  • temp=0x80;
  • for(a=8;a>0;a--)
  • {
  • P1=temp;
  • delayms(time);
  • temp1=~temp;
  • temp1>>=1;
  • temp=~temp1;
  • }
  • }
  • /*******************************变换方式二  子函数 ***********************************/
  • void run_LED_fun2()
  • {
  • uchar a,temp,temp1,temp2;
  • temp=0x01;
  • temp1=0x80;
  • for(a=8;a>0;a--)   //P1口LED灯依次点亮
  • {
  • P1=~temp;
  • P0=~temp;
  • P3=~temp1;
  • P2=~temp;
  • delayms(time);
  • temp<<=1;
  • temp1>>=1;
  • }
  • temp=0x80;
  • temp1=0x01;
  • for(a=8;a>0;a--)   //P1口LED灯依次点亮
  • {
  • P1=~temp;
  • P0=~temp;
  • P3=~temp1;
  • P2=~temp;
  • delayms(time);
  • temp>>=1;
  • temp1<<=1;
  • }
  • temp=0xfe;
  • temp1=0x7f;
  • for(a=8;a>0;a--)
  • {
  • P1=temp;
  • P0=temp;
  • P3=temp1;
  • P2=temp;
  • delayms(time);
  • temp<<=1;
  • temp1>>=1;
  • }
  • temp=0x7f;
  • temp1=0xfe;
  • for(a=8;a>0;a--)
  • {
  • P1=~temp;
  • P0=~temp;
  • P3=~temp1;
  • P2=~temp;
  • delayms(time);
  • temp2=~temp;
  • temp>>=1;
  • temp2=~temp;
  • temp1<<=1;
  • }
  • }
  • /*******************************变换方式三 子函数 ***********************************/
  • void run_LED_fun3()
  • {
  • P0=0x00;
  • P1=0xff;
  • P2=0xff;
  • P3=0xff;
  • delayms(5*time);
  • P0=0xff;
  • P1=0x00;
  • P2=0xff;
  • P3=0xff;
  • delayms(5*time);
  • P0=0xff;
  • P1=0xff;
  • P2=0xff;
  • P3=0x00;
  • delayms(5*time);
  • P0=0xff;
  • P1=0xff;
  • P2=0x00;
  • P3=0xff;
  • delayms(5*time);
  • P0=0xff;
  • P1=0x00;
  • P2=0xff;
  • P3=0x00;
  • delayms(5*time);
  • P0=0x00;
  • P1=0xff;
  • P2=0x00;
  • P3=0xff;
  • delayms(5*time);
  • P0=0xff;
  • P1=0xff;
  • P2=0xff;
  • P3=0xff;
  • }
  • /*******************************变换方式四  子函数 ***********************************/
  • void run_LED_fun4()
  • {
  • uchar a,temp,temp1,temp2;
  • P0=0xff;
  • P1=0x00;
  • P2=0xff;
  • P3=0xff;
  • delayms(time);
  • temp=0xfe;
  • temp1=0xfe;
  • for(a=8;a>0;a--)
  • {
  • P1=~temp;
  • P3=temp1;
  • delayms(time);
  • temp2=~temp;
  • temp<<=1;
  • temp2=~temp;
  • temp1<<=1;
  • }
  • temp=0xfe;
  • temp1=0x7f;
  • for(a=8;a>0;a--)
  • {
  • P3=~temp;
  • P2=temp;
  • delayms(time);
  • temp2=~temp;
  • temp<<=1;
  • temp2=~temp;
  • temp1>>=1;
  • }
  • temp=0xfe;
  • temp1=0x7f;
  • for(a=8;a>0;a--)
  • {
  • P2=~temp;
  • P0=temp1;
  • delayms(time);
  • //temp2=~temp1;
  • temp<<=1;
  • //temp2=~temp;
  • temp1>>=1;
  • }
  • temp=0x7f;
  • temp1=0xfe;
  • for(a=8;a>0;a--)
  • {
  • P0=~temp;
  • P1=temp1;
  • delayms(time);
  • temp2=~temp;
  • temp>>=1;
  • temp2=~temp;
  • temp1<<=1;
  • }
  • }
  • /*
  • void  change_speed()
  • {
  • if(F1 == 0)
  • {
  • delayms(10);
  • if(F1 == 0)
  • {
  • while(!F1);
  • time = time +20;
  • }
  • }
  • if(F2 == 0)
  • {
  • delayms(10);
  • if(F2 == 0)
  • {
  • while(!F2);
  • time = time -20;
  • }
  • }
  • }
  • */
  • /*******************************主函数 ***********************************/
  • void main()
  • {
  • while(1)
  • {
  • run_LED_fun1();
  • run_LED_fun2();
  • run_LED_fun3();
  • run_LED_fun4();
  • }
  • }1 J. T' u+ J) B8 R6 c2 |/ z4 o
5 [. e6 P4 F8 M' a

该用户从未签到

2#
发表于 2022-6-17 13:06 | 只看该作者
呵呵,32位片机开头写REG51?

该用户从未签到

3#
发表于 2022-6-17 14:03 | 只看该作者
太详细了,学习学习。

该用户从未签到

4#
发表于 2022-6-17 16:22 | 只看该作者
太详细了,学习,嘿嘿
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-6-19 22:47 , Processed in 0.093750 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表