缘由单片机不会搞 原理都清晰合一块成傻杯了 各位爷 用keil Vison5 还有Proteus8仿真图给出一下吧_嵌入式-CSDN问答
- #include
- unsigned char Js=0;
- bit k=0;
- void main()
- {//缘由
- unsigned char ls=0;
- EA=1;//总中断允许
- EX0=1;//允许外部中断0中断
- TH0+=(65536-50000)/256;/*定时器赋初值,定时50ms触发中断,自动补偿方式*/
- TL0+=(65536-50000)%256;
- TMOD=0X01;
- TR0=1;
- ET0=1; //开启定时器
- while(1)
- {
- if(Js==20)//秒
- {
- P1=ls;//赋值
- if(k)if(ls==0)ls=1;else ls*=2;//方向1
- else if(ls==0)ls=128;else ls/=2;//方向2
- Js=0;
- }
- }
- }
- void int0_isr() interrupt 0//外部中断
- {
- k=!k;
- }
- void ZhongDuan() interrupt 1//定时器
- {
- ++Js;
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- }
仿真看鼠标的流水灯和按键,代码有详细注释了。 为了便于学习,把非精准延时8灯+8灯不同方向的代码并列与本文,以便对比,源于多有不会变通延时的提问。
- #include "reg52.h"
- void main()
- {//缘由https://ask.csdn.net/questions/8011067
- unsigned char sy=0,my=0,m=0,mm=0,miao=0;
- while(1)
- {
- if(++sy==0)if(++my==0)if(++miao>4)
- {
- P1=m;
- P2=mm;
- if(m==0)m=1;else m*=2;
- if(mm==0)mm=128;else mm/=2;miao=0;
- }
- }
- }