完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
那位老师能给详细讲一讲下面这个程序的执行过程,包括各函数及函数值的意义,不只是在“/”/后面注释。
有劳各位了。 pwm控制的流水灯(没有写头文件) #include #include #define LED_PORT P1 #define tiMER_BEGIN 0xe333; //4ms const int inc_timer_count=0x001d; unsigned char code game[16]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x18,0x24,0x42,0x81,0x03,0x0c,0x30,0xc0}; volatile unsigned int pre_time_set=0; void init_timer0(); void modi_timer0(); void main() { init_timer0(); while (1); } void init_timer0() { TR0=0; EA=0; TMOD=0x01; TL0=0x33; TH0=0XE3; ET0=1; EA=1; TR0=1; } void modi_timer0() { static bit c_state=0;//当前状态 static unsigned int proc_count=0; //处理次数 static unsigned int timer0_high=0; static unsigned int timer0_low=0; static unsigned char cur_proc_led=0; TR0=0; if (!proc_count) { timer0_high=TIMER_BEGIN; timer0_low=0x0ffff; } if (c_state) //高电平 { timer0_high=timer0_high+inc_timer_count; TH0=(timer0_high )>>8; TL0=(timer0_high)&0x00ff; LED_PORT=0xff; } else { timer0_low=timer0_low-inc_timer_count; TH0=(timer0_low )>>8; TL0=(timer0_low)&0x00ff; LED_PORT=game[cur_proc_led]; } TR0=1; c_state=~c_state; if (++proc_count==500) { proc_count=0; if (++cur_proc_led==16) cur_proc_led=0; } } void time0(void ) interrupt 1 using 1//定时器T0中断。 { modi_timer0(); } |
|
相关推荐
9 个讨论
|
|
流水灯的程序太多了,1楼的程序是另外一种控制方式的流水灯。不知道版主说的简单的流水灯是怎么简单法,比如下面这个程序是简单的吗?(应该还可以优化),请问,理解了这个程序后应该如何继续学习哪?void delay(void)
{ int i; int j; for(i=0;i<150;i++) for(j=0;j<200;j++); } void main(void) { int i; while(1) { P1 = 0xFF; delay(); for(i=0;i<8;i++) { P1 = 0xFE; delay(); P1 = 0xFD; delay(); P1 = 0xFB; delay(); P1 = 0xF7; delay(); P1 = 0xEF; delay(); P1 = 0xDF; delay(); P1 = 0xBF; delay(); P1 = 0x7F; delay(); } } } |
|
|
|
|
|
只有小组成员才能发言,加入小组>>
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 15:33 , Processed in 0.747124 second(s), Total 66, Slave 53 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号