找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1899|回复: 0
打印 上一主题 下一主题
收起左侧

51单片机渐亮渐暗 跑马灯的实现

[复制链接]
跳转到指定楼层
楼主
ID:341815 发表于 2018-5-30 22:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
单片机源程序如下:
  1.     #include <reg52.h>  
  2.     #include <intrins.h>  
  3.     #include <string.h>  
  4.       
  5.     void liushui();  
  6.     void rjl();    //渐亮  
  7.     void rja();    //渐暗  
  8.     void huaxin();  
  9.     void huaxin2();  
  10.     void huaxin3();  
  11.     void zkb(unsigned char d);  
  12.     void ys1ms(unsigned int s);  //延时声明,修改s的数值,就可以改变时间  
  13.       
  14.     unsigned char code table[11]={0xff,0xff ,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff};  
  15.     unsigned char code table6[11]={0xff,0xff ,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff};  
  16.     unsigned char code table2[8]={0x7f,0x3f ,0x1f,0x0f,0x07,0x03,0x01,0x00};  
  17.     unsigned char code table3[8]={0xfe,0xfc ,0xf8,0xf0,0xe0,0xc0,0x80,0x00};  
  18.     unsigned char code table4[9]={0x00,0x01 ,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff};  
  19.     unsigned char code table5[9]={0x00,0x80 ,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff};  
  20.       
  21.     unsigned char i;   
  22.     unsigned char j;   
  23.     unsigned char k;  
  24.     unsigned char m;  
  25.       
  26.     int main()  
  27.     {  
  28.         EA=1;//打开中断,使用中断方便调试查看模式  
  29.         EX0=1; //允许外部中断0中断  
  30.         EX1=1; //允许外部中断1中断  
  31.         PX0=1; // 外部中断0位高优先级  
  32.         while(1)  //无限循环  
  33.         {     
  34.             liushui();   ////////////////////  
  35.             ys1ms(50);   
  36.             huaxin2();     
  37.             ys1ms(50);  
  38.             rja();  
  39.             ys1ms(100);  
  40.       
  41.             huaxin();    ////////////////////  
  42.             rjl();  
  43.             rja();  
  44.             ys1ms(100);  
  45.       
  46.             huaxin3();   ////////////////////  
  47.             rja();  
  48.             ys1ms(100);  
  49.       
  50.         }  
  51.          return 0;  
  52.     }  
  53.       
  54.     void liushui()  
  55.     {  
  56.          
  57.             for(i = 9; i > 0; i--)  
  58.             {  
  59.                 P1 = table[ i];  
  60.     [ i]            ys1ms(50);  
  61.     [ i]        }  
  62.     [ i]        for(i = 2; i <= 10; i++)  
  63.     [ i]        {  
  64.     [ i]            P0 = table[ i];  
  65.     [ i][ i]             ys1ms(50);  
  66.     [ i][ i]        }  
  67.     [ i][ i]        for(i = 9; i > 0; i--)  
  68.     [ i][ i]        {  
  69.     [ i][ i]            P2 = table[ i];  
  70.                  ys1ms(50);  
  71.             }  
  72.             for(i = 9; i > 0; i--)  
  73.             {  
  74.                 P3 = table[ i];  
  75.                  ys1ms(50);  
  76.             }  
  77.             
  78.     }  
  79.       
  80.      void ys1ms(unsigned int s)    //定时器精确延时1毫秒函数,改变S数值即改变时间  
  81.      {  
  82.         TR0=1;  
  83.         while(s!=0)  
  84.         {  
  85.             TH0=-(7629/256);  
  86.             TL0=-(7629%256);  
  87.             while(TF0!=1);  
  88.             TF0=0;  
  89.             s--;  
  90.         }  
  91.         TR0=0;  
  92.      }  
  93.       
  94.      /****************************************************************************/  
  95.     void rjl()  //渐亮函数   
  96.     {     
  97.         unsigned char a, b;//a控制延时长度 b控制循环周期        
  98.         P0 = 0xff;  
  99.         P1 = 0xff;  
  100.         P2 = 0xff;  
  101.         P3 = 0xff;  
  102.         a = 0;     
  103.             for (b=250; b>0; b--)   //循环周期设置  
  104.             {     
  105.                 a++;     
  106.                 zkb (a);      //延时长度随a而改变      
  107.                 P0 = 0xff;  
  108.                 P1 = 0xff;  
  109.                 P2 = 0xff;  
  110.                 P3 = 0xff;  
  111.                 a = ~a;         //a值取反,决定灯灭时的占空比      
  112.                 zkb (a);     
  113.                 P0 = 0x00;  
  114.                 P1 = 0x00;  
  115.                 P2 = 0x00;  
  116.                 P3 = 0x00;  
  117.                 a = ~a;         //a值取反 使a回到原值继续循环   
  118.              }  
  119.      }  
  120.     /****************************************************************************/  
  121.     void rja()  //渐暗函数  
  122.     {  
  123.         unsigned char a, b;//a控制延时长度 b控制循环周期      
  124.         P0 = 0x00;  
  125.         P1 = 0x00;  
  126.         P2 = 0x00;  
  127.         P3 = 0x00;            //亮起LED   
  128.         a = 0;     
  129.             for (b=250; b>0; b--)     
  130.             {     
  131.                 a++;     
  132.                 zkb (a);     
  133.                 P0 = 0x00;  
  134.                 P1 = 0x00;  
  135.                 P2 = 0x00;  
  136.                 P3 = 0x00;  
  137.                 a = ~a;     
  138.                 zkb (a);     
  139.                 P0 = 0xff;  
  140.                 P1 = 0xff;  
  141.                 P2 = 0xff;  
  142.                 P3 = 0xff;   
  143.                 a = ~a;     
  144.             }  
  145.     }  
  146.     void huaxin()  
  147.     {  
  148.         for(j = 0; j < 2; j++)  
  149.         {  
  150.             for(i = 0; i < 8; i++)  
  151.             {  
  152.                 P1 = table2[ i];  
  153.                 P3 = table3[ i];  
  154.                 ys1ms(50);  
  155.             }  
  156.             for(i = 0; i < 8; i++)  
  157.             {  
  158.                 P0 = table3[ i];  
  159.                 P2 = table3[ i];  
  160.                  ys1ms(50);  
  161.             }  
  162.             for(i = 0; i < 9; i++)   
  163.             {  
  164.                 P2 = table5[ i];  
  165.                 P0 = table5[ i];  
  166.                 ys1ms(50);  
  167.             }  
  168.             for(i = 0; i < 9; i++)  
  169.             {  
  170.                 P3 = table5[ i];  
  171.                 P1 = table4[ i];  
  172.                  ys1ms(50);  
  173.             }  
  174.             ys1ms(100);  
  175.         }  
  176.     }  
  177.     void huaxin2()  
  178.     {  
  179.             for(i = 0; i < 8; i++)  
  180.             {  
  181.                 P1 = table2[ i];  
  182.                 ys1ms(50);  
  183.             }  
  184.             for(i = 0; i < 8; i++)  
  185.             {  
  186.                 P0 = table3[ i];  
  187.                  ys1ms(50);  
  188.             }  
  189.              for(i = 0; i < 8; i++)  
  190.             {  
  191.                 P2 = table2[ i];  
  192.                   
  193.                 ys1ms(50);  
  194.             }  
  195.             for(i = 0; i < 8; i++)  
  196.             {  
  197.                 P3 = table2[ i];  
  198.                   
  199.                  ys1ms(50);  
  200.             }  
  201.     }  
  202.     void huaxin3()  
  203.     {  
  204.         k = 0;  
  205.         for(m = 0; m < 2; m++)  
  206.         {  
  207.             for(j = 0; j < 4; j++)  
  208.             {  
  209.                 for(i = 9; i > 0; i--)  
  210.                 {  
  211.                     P1 = table[ i];  
  212.                     P0 = table6[ i];  
  213.                     P2 = table[ i];  
  214.                     P3 = table[ i];  
  215.                     ys1ms(50);  
  216.                 }  
  217.             }  
  218.       
  219.                 for(i = 0; i < 8; i++)  
  220.                 {  
  221.                     P1 = table2[ i];  
  222.                     P0 = table3[ i];  
  223.                     P2 = table2[ i];  
  224.                     P3 = table2[ i];  
  225.                     ys1ms(50);  
  226.                 }  
  227.             if(k == 0)  
  228.             {  
  229.                 for(i = 0; i < 8; i++)  
  230.                 {  
  231.                     P1 = table5[ i];  
  232.                     P0 = table4[ i];  
  233.                     P2 = table5[ i];  
  234.                     P3 = table5[ i];  
  235.                     ys1ms(50);  
  236.                 }  
  237.             }  
  238.                 ys1ms(100);   
  239.                 k++;  
  240.         }  
  241.     }  
  242.     /****************************************************************************/  
  243.     void zkb(unsigned char d)   //占空比函数,由d决定延时长度      
  244.     {        
  245.         unsigned char i;     
  246.         while( --d != 0)     
  247.         {     
  248.             for(i = 0; i < 1; i++);   //占空比时间设置  
  249.         }                           
  250.     }   
复制代码

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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