四川师范大学成都学院本科毕业设计
while(!key3); flag=1; }}
if(0==key1) {
delay(20); if(0==key1) {
while(!key1); time++; fen=time; writtime(); }}
if(0==key2) {
delay(20); if(0==key2) {
while(!key2); time--; fen=time; writtime(); }}}}
4 Proteus仿真实验效果
16
四川师范大学成都学院本科毕业设计
图4-1 Proteus仿真效果图
5 总结
在本次课程设计中,对典型的单片机AT89S52单片机的作品和功能的设计和应用的基础上有了更深刻的认识,进一步了解单片机的编程语言设计。
在设计过程中,我发现了很多的问题入手,给我的感觉是很难不舒服,看似很简单的电路,并把它的设计是一件很难的事情。主要的原因是我们不经常动手设计电路。似懂非懂的另外的单片机系统的知识,和很多的知识是想通了,当你想使用你却不记得,现在,我花了很多时间来访问各种数据和程序命令,所以整个过程的时间是不合理的。设计计划没安排好,设计的时候是极短时间内在硬件调试过程中,尤其是大问题。查找的信息也是一个重要的问题,这需要学习,应该指出的是,更重要的是,我们要学习学到的知识,从书本和实际的电路连接这两者的就业或学习,将起到极大的促进和帮助。
6 致 谢
这篇论文是在孙活老师的指导和帮助下完成的,在此衷心的感谢孙老师对我的细心
17
四川师范大学成都学院本科毕业设计
指导。在论文的设计过程中我遇到了很多困难,很多时候感觉自己都要坚持不下去了,经过孙老师耐心的指导和鼓励,我最终坚持了下来。孙老师那诲人不倦、为人师表的品格很令我敬佩。整个论文设计下来,我从中学会了很多。论文设计过程中遇到很多不会的东西,孙老师都耐心的指点我,鼓励让我自己去分析并解决问题,我最大的收获就是从中学会了如何去正确的面对困难并学会去解决问题。从这里看,孙老师教会我的不仅仅是如何去做一篇毕业设计,而且教会了我最重要的解决问题的方法。再次衷心的感谢孙老师的指导,孙老师教会我的方法将使我受益终生。
另外感谢我的母校四川师范大学成都学院,感谢所有教过我的老师,所有人和所有这些事都是我最珍惜的。也谢谢帮助我的各位同学,希望所有的我要感谢的人都身体健康,事事顺心。
18
四川师范大学成都学院本科毕业设计
附录:源程序
/****************************************************************** 篮球比赛计时计分器 mcu : AT89s52 12MHZ晶振频率
EDITED BY LIUJUNJIE 2010-04-19
*******************************************************************/ #include
void writdata(unsigned char );//写液晶数据 void writcom(unsigned char );//写液晶命令 void init(void);//初始化
void writsfm(unsigned char,unsigned char);//写分数刷新 void writtime(void);//写时间刷新 void settime(void);//设置比赛时间 sbit rs=P2^4;//液晶控制位定义 sbit rw=P2^5; sbit en=P2^6;
sbit key0=P1^0;//独立键盘位定义 sbit key1=P1^1; sbit key2=P1^2; sbit key3=P1^3;
unsigned char time,fen,miao,aa,bb,f,numa,numb,flag; void delay(unsigned char c)//延时子数 {
unsigned char x,y; for(x=c;x>0;x--) for(y=80;y>0;y--); }
void main()//主函数入口 { init();
19
四川师范大学成都学院本科毕业设计
settime(); while(1) {
unsigned char gb,i;//定义光标闪烁位置变量 writcom(0x80);
//显示当前比赛节数
writdata(f+0x31);
if(2==f&&0==i)//换场地后刷新分数显示 { i=1;
writcom(0x80+2); writdata('B'); writcom(0x80+9); writdata('A'); writsfm(0,numa); writsfm(1,numb); }
writtime();//液晶工作方式是写指令与写数据分时工作, //所以在中断中写时间会影响其他显示 if(0==key0)//key0控制时间启停 { delay(20); if(0==key0) {
while(!key0); P2_0=1; flag++;
if(2==flag)flag=0; if(1==flag)TR0=1; if(0==flag) TR0=0; TR1=0; }
20