单片机系统课程设计 认真钻研来解决。在程序设计过程中遇到的很多问题,阻碍设计的过程,通过总结,深深体会到程序设计的时候模块化处理的重要性,可以先画好程序流程图,然后对按键模块,显示模块,语音提示模块依次分析。
本次课程设计能够实现基本的智能排队叫号目的,但是由于初步将对单片机运用到实际操作当中,难免有不足之处,比如没有配置系统取号打印机部分等。总体来说,通过本次课程设计,增强了我在专业设计方面的能力,同时也培养了我对单片机的学习的兴趣。我感觉学单片机就是要多实践,老师领我们进入单片机世界,精通它就得靠我们自己,那就需要多实际操作,将自己所学知识灵活运用到实际生活当中。
衷心感谢给我们教课的老师!感谢您这学期以来的辛勤付出,在课程设计期间,您细心的为同学们解答问题提供帮助,使我们对单片机的学习有了进一步的提高,谢谢!
7参考文献
[1] 夏路易 石宗义.Protel 99se电路原理图与电路板设计教程.北京:北京希望电子出版社,2004
[2] 伟福LAB6000系列单片机仿真实验系统使用说明书
[3] 阎石.数字电路技术基础(第五版).北京:高等教育出版社,2006 [4] 薛庆军、张秀娟.单片机原理实验教程.北京.北京航空航天大学出版社,2008
[5] 杨家成.单片机原理与应用及C51程序设计.北京:清华大学出版社,2007
附录1实物图
25
单片机系统课程设计 附录2系统原理图23U212345678910OUTPUTVCCD0Q0D1Q1D2Q2D3Q3D4Q4D5Q5D6Q6D7Q7GNDLATCHSN74HC573ANVCC20191817161514131211VCC51012471134dpgw46P2.7P212345678910LCD_CSLCD_SID11121314151617181920LCD_SCLKLCD_RSTfedcbaLEDw38P2.6w29P2.1VCCw212P2.0VCCDW110KVCCC160.1pfU51SCLK2SS34.7KMOSI4RAC5C3610U78R391010KXTAL21112JNT131415X11617XTAL218XTAL11920XTAL1P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7RSTP3.0(RXD)P3.1(TXD)INT0INT1P3.4(T0)P3.5(T1)P3.6(WR)P3.7(RD)XTAL2XTAL1GNDSTC89C51RCR1U1SSMOSI1234567891011121314SSMOSIMISOVSSDNCNCNCNCNCNCVSSAVSSAOUTCAPISD4004SCLKVDDXCLKINTRACVSSANCNCNCNCVCCAIN+IN-NC28SCLK272625JNT24RAC232221201918171615VCCP0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7EA/VppALE(PROG)PSENP2.7P2.6P2.5P2.4P2.3P2.2P2.1P2.04039383736353433323130292827262524232221KEY1KEY2KEY3LED1LED2P5123456789VCCVCCR1110KR1210KR1310KS1KEY1CON9P2.7P2.6KEY2LCD_CSLCD_SIDLCD_SCLKLCD_RSTC2030pfS2C2130pfS3KEY3VCCVCCVCC-3.3V104ufC1VCC-3.3VR210KR24.7KC2KEY110ufR34.7KR310KS1C3104ufC4104C7104R44.7KS2KEY2P312MICC101ufC111ufR510KU31234GAIN-INPUT+INPUTGNDLM386GAINBYPASSVsVoutC810uf8765C12104VCCC14p412CON2DW210KC15104220uf 23 26
4 单片机系统课程设计 附录3 C51源程序:
#include
//C51程序包含的头文件
#define uchar unsigned char
#define uint unsigned int//以下定义要用到的字符串数组 uchar code t0[]=\ uchar code t1[]=\
//wp意为正在等待的人数
uchar code t2[]=%uchar code t3[]=%uchar code t33[]=%uchar code t4[]=%uchar code t44[]=%uchar code t5[]=%uchar code t55[]=%uchar code t6[]=%uchar code t66[]=%uchar num,waiting,count; 等待的人数
sbit lcden=P2^7; sbit lcdrw=P2^5; sbit lcdrs=P2^6; 令,置1写数据 sbit s0=P3^4; sbit s1=P3^1; sbit s2=P3^2; sbit s3=P3^3; sbit add=P3^5; sbit bee=P1^5; //函数声明 void delay(uint);
27
//num为所领号码,waiting为正在
//液晶使能端
//“读”或“写”选择端,要置低 //写命令或数据选择端:置0写命
//领号键 //窗口1的叫号键 //窗口2的叫号键 //停止领号键
//统计客流量 //语音端口
//延时
单片机系统课程设计 void di(); //语音
//向液晶写入命令 //向液晶写入数据
//移动光标
void write_com(uchar); void write_data(uchar); void go(uchar,uchar); void shownum(uchar);
//显示数字 //显示字符串 void showstr(uchar *); void clear(); void init();
void keyscan();
//函数定义
void delay(uint n) { uint i,j;
for(i=n;i>0;i--)
for(j=110;j>0;j--);
}
void di() { bee=0; delay(100); bee=1; }
void write_com(uchar com) { lcdrs=0; lcdrw=0; P0=com;
lcden=1;
delay(3);
//清空动态显示 //初始化
//键盘扫描
//不够精确地延时1ms
//选择写命令
//“读写”选择写
//液晶输入端接单片机P1口 //产生上升沿
28
单片机系统课程设计 }
lcden=0;
void write_data(uchar dat) { lcdrs=1;
//选择写数据
lcdrw=0; P0=dat; lcden=1; delay(3); lcden=0;
}
void go(uchar x,uchar y) { if(x==1)
write_com(0x80+y);
else
write_com(0x80+0x40+y);
}
void shownum(uchar dat) { uchar code t[]=\ uchar shi,ge; shi=dat/10; ge=dat;
if(shi>0)
write_data(0x30+shi);
else write_data(t[0]);
write_data(0x30+ge);
//从液晶第一行左端开始写入数据//从液晶第二行左端开始写入数据 //分离十位 //分离个位
//显示个位
//显示十位
29