|
程序预览:
1.main.c 文件:
2. key.c文件:
- #include "use.h"
- #include "time.h"
- sbit KEY1=P3^4;
- sbit KEY2=P3^5;
- sbit KEY3=P3^6;
- sbit KEY4=P3^7;
- uchar keystr[]={1,1,1,1},backup[]={1,1,1,1};
- void KeyScan() //键盘扫描
- {
- static uchar keybuf[4]={0XFF,0XFF,0XFF,0XFF};
- uchar i;
- keybuf[0]=(keybuf[0]<<1)|KEY1;
- keybuf[1]=(keybuf[1]<<1)|KEY2;
- keybuf[2]=(keybuf[2]<<1)|KEY3;
- keybuf[3]=(keybuf[3]<<1)|KEY4;
- for(i=0;i<4;i++)
- {
- if(keybuf[i]==0X00) keystr[i]=0;
- else if(keybuf[i]==0XFF) keystr[i]=1;
- }
- }
- void KeyAction(uchar key) //键盘执行
- {
- switch(key)
- {
- case 0: SetModel(); break;
- case 1: ADDTime(); break;
- case 2: SUBTime(); break;
- case 3: UrgentModel(); break;
- default:break;
- }
- }
- void KeyDriver() //键盘驱动
- {
- uchar i;
- for(i=0;i<4;i++)
- {
- if(keystr[i]!=backup[i])
- {
- if(keystr[i]==0)
- KeyAction(i);//这里适当修改程序可以实现组合按键的效果
- }
- backup[i]=keystr[i];
- }
- }
复制代码
3. time.c文件:
- #include "use.h"
- #include "main.h"
- uchar code seg_du[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
- uchar code seg_we[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
- uchar BackupGreen,BackupRed,CopyLight;
- void Seg_Display(uchar number,uchar wei) //数码管动态显示程序
- {
- P0=0XFF;
- we=1;
- we=0;
- P0=seg_du[number];
- du=1;
- du=0;
- P0=seg_we[wei];
- we=1;
- we=0;
- }
- void UrgentScan() //紧急情况运行扫描
- {
- Seg_Display(BackupGreen/10,0);
- Seg_Display(BackupGreen%10,1);
- Seg_Display(BackupRed/10,2);
- Seg_Display(BackupRed%10,3);
- }
- void SetModel() //红绿灯设置模式
- {
- if(StaSysterm==NormalRun)
- {
- StaSysterm=ResetGreen; //状态机
- BackupGreen=GreenTime;
- BackupRed=RedTime;
- CopyLight=P2; //对数据进行备份
- P2=0X09;
- }
- else if(StaSysterm==ResetGreen)
- {
- StaSysterm=ResetRed;
- }
- else if(StaSysterm==ResetRed)
- {
- StaSysterm=NormalRun;
- P2=CopyLight; //恢复数据
- }
- }
- void ADDTime() //红绿灯时间加
- {
- if(StaSysterm==ResetGreen)
- {
- BackupGreen++;
- if(BackupGreen>=BackupRed) BackupGreen=BackupRed;
- }
- else if(StaSysterm==ResetRed)
- {
- BackupRed++;
- }
- }
- void SUBTime() //红绿灯时间减
- {
- if(StaSysterm==ResetGreen)
- {
- BackupGreen--;
-
- }
- else if(StaSysterm==ResetRed)
- {
- BackupRed--;
- if(BackupGreen>=BackupRed) BackupRed=BackupGreen;
- }
- }
- /****************
- void Confirm() //备用函数
- {
- if(StaSysterm!=NormalRun && StaSysterm!=UrgentRun)
- {
- GreenTime=BackupGreen;
- RedTime=BackupRed;
- StaSysterm=NormalRun;
- }
- }
- **************/
- void UrgentModel() //紧急模式
- {
- if(StaSysterm==NormalRun)
- {
- StaSysterm=UrgentRun;
- CopyLight=P2; //对数据进行备份
- P0=0XFF;
- we=1;
- we=0;
- }
- else if(StaSysterm==UrgentRun)
- {
- StaSysterm=NormalRun;
- P2=CopyLight; //恢复数据
- }
- else if(StaSysterm==ResetGreen || StaSysterm==ResetRed)
- {
- StaSysterm=NormalRun;
- GreenTime=BackupGreen;
- RedTime=BackupRed; //重新设置红绿灯时间
- }
- }
复制代码
完整程序代码,及其电路图和仿真文件下载:
加强版红绿灯.rar
(70.65 KB, 下载次数: 1710)
|
评分
-
查看全部评分
|