完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
|
|
相关推荐
1个回答
|
|
# include
typedef unsigned char u8; typedef unsigned int u16; void delay(u16 i); void DigDisplay(); void Time01(); ***it LSA=P2^2; ***it LSB=P2^3; ***it LSC=P2^4; #define GPIO_DIG P0 #define GPIO_TRAFFIC P1 ***it Red10=P1^0; ***it Green10=P1^1; ***it Red11=P1^2; ***it Yellow11=P1^3; ***it Green11=P1^4; ***it Red21=P1^5; ***it Yellow21=P1^6; ***it Green21=P1^7; ***it Red30=P3^0; ***it Green30=P3^1; u8 code smgDuan[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//共阴 static u16 i; u8 Second=0; u8 SmgTime[8]; void main() { Second=1; Time01(); while(1) { if(Second==60) { Second=1; } if(Second<25) //路灯为25秒 { SmgTime[0]=0x00; //第一个数码管不亮 SmgTime[1]=0x00; //第二个数码管不亮 SmgTime[2]=smgDuan[(25-Second)%100/10];//取出十位 SmgTime[3]=smgDuan[(25-Second)%10];//取出个位 SmgTime[4]=0x00; //第一个数码管不亮 SmgTime[5]=0x00; //第二个数码管不亮 SmgTime[6]=smgDuan[(25-Second)%100/10];//取出十位 SmgTime[7]=smgDuan[(25-Second)%10];//取出个位 DigDisplay(); GPIO_TRAFFIC=0xff; //熄灭所以LED灯 Red30=1; //D9 Green30=1; //D10 Green11=0; Green10=0; Red21=0; Red30=0; } else if(Second<30) //设置黄灯为4秒 { SmgTime[0]=0x00; //第一个数码管不亮 SmgTime[1]=0x00; //第二个数码管不亮 SmgTime[2]=smgDuan[(30-Second)%100/10];//取出十位 SmgTime[3]=smgDuan[(30-Second)%10];//取出个位 SmgTime[4]=0x00; //第一个数码管不亮 SmgTime[5]=0x00; //第二个数码管不亮 SmgTime[6]=smgDuan[(30-Second)%100/10];//取出十位 SmgTime[7]=smgDuan[(30-Second)%10];//取出个位 DigDisplay(); GPIO_TRAFFIC=0xff; //熄灭所以LED灯 Red30=1; //D9 Green30=1; //D10 Yellow11=0; Red10=0; Yellow21=0; Red30=0; } else if(Second<55) //设置红灯亮的时间为25秒 { SmgTime[0]=0x00; //第一个数码管不亮 SmgTime[1]=0x00; //第二个数码管不亮 SmgTime[2]=smgDuan[(55-Second)%100/10];//取出十位 SmgTime[3]=smgDuan[(55-Second)%10];//取出个位 SmgTime[4]=0x00; //第一个数码管不亮 SmgTime[5]=0x00; //第二个数码管不亮 SmgTime[6]=smgDuan[(55-Second)%100/10];//取出十位 SmgTime[7]=smgDuan[(55-Second)%10];//取出个位 DigDisplay(); GPIO_TRAFFIC=0xff; //熄灭所以LED灯 Red30=1; //D9 Green30=1; //D10 Red11=0; Red10=0; Green21=0; Green30=0; } else //设置黄灯为3秒 { SmgTime[0]=0x00; //第一个数码管不亮 SmgTime[1]=0x00; //第二个数码管不亮 SmgTime[2]=smgDuan[(60-Second)%100/10];//取出十位 SmgTime[3]=smgDuan[(60-Second)%10];//取出个位 SmgTime[4]=0x00; //第一个数码管不亮 SmgTime[5]=0x00; //第二个数码管不亮 SmgTime[6]=smgDuan[(60-Second)%100/10];//取出十位 SmgTime[7]=smgDuan[(60-Second)%10];//取出个位 DigDisplay(); GPIO_TRAFFIC=0xff; //熄灭所以LED灯 Red30=1; //D9 Green30=1; //D10 Yellow11=0; Red10=0; Yellow21=0; Red30=0; } } } void delay(u16 i) { while(i--); } void DigDisplay() { void delay(u16 i); u8 i; for(i=0;i<8;i++) { switch(i) { case 0:LSA=0;LSB=0;LSC=0;break; case 1:LSA=1;LSB=0;LSC=0;break; case 2:LSA=0;LSB=1;LSC=0;break; case 3:LSA=1;LSB=1;LSC=0;break; case 4:LSA=0;LSB=0;LSC=1;break; case 5:LSA=1;LSB=0;LSC=1;break; case 6:LSA=0;LSB=1;LSC=1;break; case 7:LSA=1;LSB=1;LSC=1;break; } GPIO_DIG=SmgTime; delay(100); GPIO_DIG=0x00; } } void Time01() { TMOD|=0x01;//选择为定时器0模式,工作方式1,仅用TR0打开启动 TH0=0xfc; //给定时器赋初值,定时1ms TL0=0x18; ET0=1;//打开定时器0中断允许 EA=1;//开总中断 TR0=1;//打开定时器 } void Time01Int() interrupt 1 { TH0=0xfc; //给定时器赋初值,定时1ms TL0=0x18; i++; if(i==1000) { i=0; Second++; } } |
|
|
|
只有小组成员才能发言,加入小组>>
2190 浏览 0 评论
1176浏览 3评论
661浏览 2评论
[求助]atmega1280与atmega2560在程序上有什么区别?
2257浏览 1评论
336浏览 1评论
1196浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-5-2 04:30 , Processed in 1.163492 second(s), Total 77, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号