};
uchar code tablewe[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf}; uchar code table[]={0x3f,0x06,0x5b,0x4f, //主功能数组定义
0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e, 0x79,0x71};
void w1(); //子函数声明 void w2(); void w3(); void w4();
void delayms(uint xms); void timer0();
void delay(uint z); //主功能子函数声明 void init();
void display(uchar hour,uchar min,uchar sec); void keyscan(); void alarm(); void time1();
/*--------------------------------------
主函数
----------------------------------------*/
void main() {
key1=1; key2=1; key3=1; key4=1;
while(1) {
while(!key1)w1(); while(!key2)w2(); while(!key3)w3(); while(!key4)w4();
} }
/*-------------------------------------- 按键控制蜂鸣器过程
----------------------------------------*/ void w1() {
if(!key1) {
delayms(300); //延时防抖,松手检测
if(key1) {
fm=!fm; } } }
/*-------------------------------------- 按键控制流水灯过程
----------------------------------------*/ void w2() {
loop 1:P1=0xff; if(!key2) {
delayms(300); if(key2) {
aa=0xfe; //赋初值 while(1) //大循环 {
P1=aa;
delayms(100); //延时500毫秒
aa=_crol_(aa,1); //将aa循环左移1位后再赋给aa //相应的cror是循环右移一位 if(!key2) {
delayms(300); if(key2) goto loop1; } }
} } }
/*-------------------------------------- 按键控制数码管过程
----------------------------------------*/ void w3() {
loop 2:wela=1; P0=0xff; if(!key3) {
delayms(300); if(key3) {
numdu=0; numwe=0;
while(1) {
numdu++; if(numdu==7) numdu=1;
dula=1; //开段锁存器
P0=tablew[numdu]; //送段码
dula=0; //锁存段码
wela=1; //开位锁存器
P0=tablewe[numwe]; //送位码
wela=0; //锁存位码
numwe++; if(numwe==6) numwe=0; delayms(5);
if(!key3) {
delayms(300); if(key3)
goto loop2; } } }
} }
/*-------------------------------------- 按键控制作息时间过程
----------------------------------------*/ void w4() {
if(!key4) {
delayms(300); if(key4) {
init(); //主功能主程序 while(1) {
keyscan();
alarm(); } } } }
/*------------------------------------------ 延时函数(用于按键,蜂鸣器,流水灯等的延时) ------------------------------------------*/ void delayms(uint xms) {
uint i,j;
for(i=xms;i>0;i--) //i=xms即延时约xms毫秒 for(j=110;j>0;j--); }
/*-------------------------------------- 主功能相关所有子程序
----------------------------------------*/
void delay(uint z) //
延时程序// {
uint x,y;
for(x=0;x void init() //赋初值程序// { TMOD=0X02; //选择模式2,可自动重装载的八位计数器 TH0=6; //给TH0赋初值 最大256-250=6 ;250与后面的3886相乘约为1s TL0=6; //给TH0赋初值 自动装入初值TL=TH=6 EA=1; //开总中断 ET0=1; //开T0中断 TR0=1; hour1=15; min1=20; sec1=57; year1=11; mon1=12; day1=24; } void display(uchar hour,uchar min,uchar sec) //显示程序// { uchar s1,s2,m1,m2,h1,h2; //该段用于数码管显示要赋的值 s2=sec/10; //显示秒的第二位,即个位 s1=sec; //显示秒的第一位,即十位 ; “%” 两边为整型,表示取余; m2=min/10; //下四句同 m1=min; h2=hour/10; h1=hour;
单片机课程作息时间控制设计报告



