标题: 单片机定时器方式0控制流水灯循环点亮程序与仿真 [打印本页]

作者: 范总    时间: 2018-9-27 23:58
标题: 单片机定时器方式0控制流水灯循环点亮程序与仿真
c源码:注释很详细,我就不解释了,如果延时不合适,可以修改参数

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源码:
  1. #include<reg51.h>   //包含51单片机寄存器定义的头文件

  2. #include<intrins.h> //包含函数_nop_()定义的头文件
  3. unsigned char code Tab[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};//流水灯控制码,该数组被定义为全局变量
  4. sbit P17=P1^7;
  5. /**************************************************************
  6. 函数功能:延时约150ms
  7. **************************************************************/
  8. void delay(void)   
  9. {
  10.    unsigned char m,n;
  11.   for(m=0;m<200;m++)
  12.    for(n=0;n<250;n++)   
  13.            ;
  14. }
  15. /**************************************************************
  16. 函数功能:发送一个字节的数据
  17. **************************************************************/
  18. void Send(unsigned char dat)
  19. {
  20.   P17=0;     //P1.7引脚输出清0信号,对74LS164清0
  21.   _nop_();   //延时一个机器周期
  22.   _nop_();  //延时一个机器周期,保证清0完成
  23.   P17=1;    //结束对74LS164的清0
  24.   SBUF=dat;  //将数据写入发送缓冲器,启动发送
  25.   while(TI==0)  //若没有发送完毕,等待
  26.      ;
  27.   TI=0;   //发送完毕,TI被置“1”,需将其清0
  28. }
  29. /*******************************************
  30. 函数功能:主函数
  31. ******************************************/
  32. void main(void)
  33.   {
  34.    unsigned char i;
  35.    SCON=0x00;  //SCON=0000 0000B,使串行口工作于方式0   
  36. while(1)  
  37.     {
  38.     for(i=0;i<8;i++)
  39.      {
  40.        Send(Tab[i]);  //发送数据
  41.      delay();       //延时
  42.       }
  43.    }
  44. }
复制代码


附件有仿真文件和c源码,需要的可以下载
321-方式0控制流水灯循环点亮.zip (28.74 KB, 下载次数: 13)


作者: 快乐眼泪    时间: 2018-9-28 06:50
可惜我还是看不懂啊!
作者: 一片到    时间: 2018-9-28 11:31
有位老师说尽量不用延时实现
作者: 范总    时间: 2018-9-29 16:47
快乐眼泪 发表于 2018-9-28 06:50
可惜我还是看不懂啊!

跟着main函数的思路走,其实就是先确定串口方式,在执行一个死循环就ok,死循环里是按照某个延时时间发送数据,其他函数都是为main函数做铺垫
作者: 范总    时间: 2018-9-29 16:49
一片到 发表于 2018-9-28 11:31
有位老师说尽量不用延时实现

确实,但要懂得这种方法




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1