谁可以给我一个复杂点的C语言例子,要无错的,我刚学编程,很好奇
满意回答
这是我做的课程设计,虽然不是很复杂,挡兔但对初学者来说已经足够做参考瓦耀了。 #include #include sbit speaker=P2^3; sbit RS=P2^4; //P2.4 sbit RW=P2^5; //P2.5 sbit E=P2^6; //P2.6 sbit set=P3^4; //设置键 sbit enter=P3^5; //确认键 sbit add1=P3^6; //加1键 sbit sub1=P3^7; //减1键 bit k=0,f=0,alarmflag1,alarmflag2,xx;//k为0表示运行状态,k为1表示设置状态;f为0表示第一行显示,f为1表示第二行显示,alarmflag表示闹钟设置的标号,xx用来给speaker响 char sec,min,hour,week,day,month,year,n,m,hourn,minn,alarm; unsigned char count,key; unsigned char lcdd[]="0123456789"; bit naozhong; /*声明调用函数*/ void dispd(); //日期显示函数 void dispt(); //时间显示函数 void disalarm(); unsigned char keys();//按键扫描函数 void lcd_w_cmd(unsigned char com); //写命令字函数 void lcd_w_dat(unsigned char dat); //写数据函数 unsigned char lcd_r_start(); //读状态函数 void int1(); //LCD初始化函数 void delay(unsigned char t); //可控延时函数 void delay1(); //软件实现延时函数,5个机器周期 void main() { TMOD=0x01; //设置为定时器模式1 TH0=0x3c; //晶振12MHz,定时时次肿逼间50ms TL0=0xb0; IE=0x82; //开全局中断和定时中断 TR0=1; //启动定时器 sec=0; //秒 min=0; minn=0;//分 hour=0; hourn=0;//时 week=0; //星期 day=13; //日 month=6; //月 year=11; //年 count=0; //中断次数清0 n=-3; //设置键按下次数,第一行日期 m=-3; //设置键按下次数,第二行时间 xx=1; P0=0xff; // 送全1到P0口 int1(); // 初始化LCD delay(255); while(1) { key=keys(); //读取按键 switch(key) { case 0xef: //按下设置键 { TR0=0; k=1; if(f==0) { n=n+3; if(n==9) { n=0; m=0; f=1; } } else { m=m+3; if(alarm==0) { if(m==12) { m=0; n=0; f=0; } } else { if(m==6) m=0; } } if(f==0) { lcd_w_cmd(0x0d); lcd_w_cmd(0x86+n); } else { lcd_w_cmd(0x0d); if(alarm==0) lcd_w_cmd(0xc4+m); else lcd_w_cmd(0xc7+m); } } break; case 0xdf: //按下确认键 { k=0; TR0=1; n=-3; m=-3; f=0; if(alarm==1) { alarm=0; alarmflag1=1; lcd_w_cmd(0x01); } if(alarmflag2==1) { alarmflag1=0; alarmflag2=0; lcd_w_cmd(0x01); } } break; case 0xbf: //按下加1键 { if(k==1) { if(f==0) { if(n==0){year++;if(year==100) year=0;} else if(n==3) {month++;if(month==13) month=1;} else {day++;if(day==32) day=1;} dispd(); //调用第一行显示函数 lcd_w_cmd(0x0d); //光标闪烁 lcd_w_cmd(0x86+n);//返回设置值显示地址 } else { if(alarm==0) { if(m==0){hour++;if(hour==24) hour=0;} else if(m==3) {min++;if(min==60) min=0;} else if(m==6){sec++;if(sec==60) sec=0;} else {week++;if(week==7) week=0;} dispt(); //调用第二行显示函数 lcd_w_cmd(0x0d); //光标闪烁 lcd_w_cmd(0xc4+m);//返回设置值显示地址 } else { if(m==0){hourn++;if(hourn==24) hourn=0;} else if(m==3) {minn++;if(minn==60) minn=0;} disalarm(); //调用第二行显示函数 lcd_w_cmd(0x0d); //光标闪烁 lcd_w_cmd(0xc7+m);//返回设置值显示地址 } } } } break; case 0x7f: //按下减1键 { if(k==1) { if(f==0) { if(n==0){year--;if(year
为您推荐:
其他回答
。。。这也行啊~ 那你起码有本教程吧 教程里不是有很多吗? 一步一步来~