单片机系统课程设计 DataPort = dat; RS_SET; RW_CLR; EN_SET; //下降沿有效 EN_CLR; }
/***************************************************** 函数功能:写命令 入口参数:unint8 cmd
************************************************** */ void w_cmd(uint8 cmd) { wait(); //忙则等待 EN_CLR ; DataPort = cmd; RS_CLR; RW_CLR; EN_SET; EN_CLR; }
int keyscan() //独立按键扫描函数 {
if(k1==0) { DelayMs(150); if(k1==0) return 1; } else if(k2==0) { DelayMs(150); if(k2==0) return 2; } else if(k3==0) { DelayMs(150); if(k3==0) return 3; }
20
单片机系统课程设计 else if(k4==0) { DelayMs(150); if(k4==0) return 4; } else if(k5==0) { DelayMs(150); if(k5==0) return 5; } else if(k6==0) { DelayMs(150); if(k6==0) return 6; } else if(k7==0) { DelayMs(150); if(k7==0) return 7; } else if(k8==0) { DelayMs(150); if(k8==0) return 8; } }
int a,b,c=0,e,n=0,m=0,p=0,i,q=0,r=0,d=0;
void SJXS(uint x,uint y,uint z) //版面显示函数 { LCD_Write_String(0,0,\ LCD_Write_String(2,1,\ LCD_Write_String(5,1,\ w_cmd(0Xc0);
21
单片机系统课程设计 w_dat(0x30+x/10); w_dat(0x30+x); w_cmd(0Xc3); w_dat(0x30+y/10); w_dat(0x30+y); w_cmd(0Xc6); w_dat(0x30+z/10); w_dat(0x30+z); }
void BS(uint x,uint y,uint z) {
if(m==x&&n==y&&z) { FM=0; DelayMs(200); FM=1; } }
void KZ(uint x) {
switch(x) { case 1: if(c==1) { m++; if(m==24) m=0; } else { a++; if(a==24) a=0; } break; case 2: if(c==1) { if(m==0)
//报时 //按键控制函数 22
单片机系统课程设计 m=23; else m--; } else { if(a==0) a=23; else a--; } break; case 3:
if(c==1) { n++; if(n==60) n=0; } else { b++; if(b==60) b=0; } break; case 4:
if(c==1) { if(n==0) n=59; else n--; } else { if(b==0) b=59; else b--; } break; case 5:
23
单片机系统课程设计 d++; c=d%2; if(c==1) DS=0; //定时L6提醒 else DS=1; break; case 6: DS=0; //定时L6提醒 c=1; m=0; n=0; break; /* case 7: DS=1; //回零L6提醒 c=0; break; */ case 8: q++; r=q%2; KQ=~KQ; //定时铃控制L7提醒 break; } } void CSH() //初始化函数 { KQ=1;
TMOD=0x01; //模式设置,00000001,可见采用的是定时器0,工作与模式1(M1=0,M0=1)。 TR0=1; //打开定时器 TH0=0X3c; //定时器设置,每隔100微秒发起一次中断。 TL0=0Xaf; ET0=1; //开定时器0中断 EA=1; //开总中断 cmg88();//关数码管,点阵函数 LCD_Init(); LCD_Clear();//清屏 }
void main(void) //主函数 { CSH(); //初始化
24