找回密码
 立即注册

QQ登录

只需一步,快速开始

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

中断部分求解释如何进如主函数的?

[复制链接]
跳转到指定楼层
楼主
ID:72008 发表于 2015-1-12 16:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. /*********** 2015.7 JQ--V0.1 宏晶公司STC单片机开发板 ************

  2. $ 程序作用:手动可调变速的流水灯的效果

  3. $ 程序作者: Jh

  4. $ 程序版本: JQ--V0.1

  5. $ 编制日期: 2011-07-01

  6. $ 编译器:Keil C uVision2

  7. $ 所用芯片:STC89C52,11.0592M晶振

  8. $ 程序开发板:JQ--V0.1版本

  9. $ 程序通俗易懂  注释详细  结构化模块是51单片机初学爱好者的理想选择

  10. ******************** JQ--V0.1 宏晶公司STC单片机开发板 **********************/

  11. #include<reg52.h>      //52单片机头文件定义

  12. #define uchar unsigned char    //数据类型uchar的宏定义
  13. #define uint  unsigned int   //数据类型uint的宏定义

  14. #define led P0          //P0口宏定义
  15. void init();
  16. uchar count,speed,num;  //全局变量定义

  17. sbit key =P3^2;

  18. void delay(uint k);

  19. uchar code huayang[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,};//0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0x00,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0x55,0x55,0x00};   //花样跑马灯数组定义  随便改变数组里面的值就可以改变花样(该数组有27个数值)
  20. void main(void)   //主函数
  21. {
  22. uchar i;
  23. init();
  24. while(1)         //while死循环
  25. {
  26.   for(i=0;i<8;i++)     //0-26共27次循环依次取出数组中的数(i小于多少由数组中的数决定)
  27.   {
  28.    led=huayang[i];   //把取出的数以总线的方式赋给led即P0口
  29.   }
  30. }
  31. }



  32. void init()   //初始化
  33. {
  34. speed=0;
  35. TMOD=0x01;   //定时器T0的应用   后面会详细讲
  36. TH0=(65536-speed)/256;
  37. TL0=(65536-speed)%256;
  38. EA=1;
  39. ET0=1;
  40. TR0=1;
  41. }


  42. void timer0() interrupt 1   //定时器T0中断   后面会详细讲
  43. {
  44.   TH0=(65536-speed)/256;
  45.   TL0=(65536-speed)%256;
  46.   count++;
  47.   if(count==5000)
  48.   {
  49.    count=0;

  50.    if(key==0)      //按键消抖
  51.    { delay(5);
  52.     if(key==0)
  53.      num++;
  54.      while(!key);   //松手检测  只要当key==1时才会退出这个while循环!

  55.      if(num==1)
  56.      {
  57.       speed=50;  //速度调节(也就是改变定时器的初值!)
  58.      }

  59.      if(num==2)
  60.      {
  61.       speed=100;
  62.      }

  63.      if(num==3)
  64.      {
  65.       speed=150;
  66.      }
  67.      

  68.      if(num==4)
  69.      {
  70.       speed=200;
  71.      }
  72.    }
  73.   }
  74. if(num==5)  num=0;
  75.   
  76. }


  77. void delay(uint k)   //延时子函数
  78. {
  79.    while(--k);
  80. }


  81. //这过程序用到了定时器  后面会跟大家详细讲解的! 谢谢大家!!!
  82. //对于调速函数可以进行修改,使其变得更加的简洁,speed=num*50;if(num==6)  num=0;//防止程序出错,所以进行了限制!
复制代码



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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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