单片机万年历_stc89s52_
一(实习目的与要求
1.掌握微处理器、微型机和单片机的基本概念
2.了解微机系统的组成
3.弄清单片机的内部结构和工作原理
4.了解单片机的分类和发展趋势
5.了解单片机的应用
6(学会用汇编语言和C语言编写单片机程序
如果要学好单片机要掌握以下知识:电路分析基础,模拟电路,数字电路,C语言或其他编程语言。
12345二(单片机开发板原理及各部分功能说明 67891011121314151(单片机开发板原理图如下: 1617PVCC118GND19PVCC2GND20EN12345678
P1P2J3128641602EN_1602P1PORT2P103PVCC2GND4P125P10P00PVCC1P00GNDEN6P01P01DDP117PR3PR4P02P021K8GNDPR1P03P03P1110K4K7910P04P0411MC1P05P05DDIGI12DVCCVCCGNDP06P0613P07P0714MR1104P131531VCCDQ1DQ2DQ3DQ4DQ5DQ6DQ7DQ8MU1AT89S52P14P12CE116855085508550855085508550855085502P10139P00P152BP1.0(T2)(AD0)P0.0P11238P013P1.1(T2EX)(AD1)P0.1DR1DR2DR3DR4DR5DR6DR7DR8P12337P024P1.2(AD2)P0.24K74K74K74K74K74K74K74K7P13436P035P1.3(AD3)P0.3IP1ID1P14535P046P1.4(AD4)P0.4P15MOSI12VCCP15634P05P137P1.5(MOSI)(AD5)P0.534P16733P06W18P1.6(MISO)(AD6)P0.6RST561N4148P17832P079P1.7(SCK)(AD7)P0.7P17SCK78DS2DS14K7x8P16MISO910GNDP331321P20D1W8D111W4121112P3.3(INT1)(A8)P2.0aA1aA1P321222P21D2W7D27W3979DIG1DIG2DIG3DIG4DIG1DIG2DIG3DIG4P3.2(INT0)(A9)P2.1bA2bA223P22D3W6D34W28ISP48P14DP3DP3(A10)P2.2cA3cA3P351524P23D4W5D42W16W226P3.5(T1)(A11)P2.3dA4dA4P341425P24D5D51VCC1P3.4(T0)(A12)P2.4ee26P25D6D61010DP2DP2(A13)P2.5fSSerialf31VCC27P26D7D755EA/VPP(A14)P2.6ggSC3SC528P27D8D833(A15)P2.7DPDP10410419OSC_INP15XTAL1SCON11840VCCHDSP-B04EHDSP-B04EOSC_OUTW3XTAL2VCCCCSC420GND5SU1P10GND13104RST910P30VCC912P11R1 INRST(RXD)P3.0R1 OUTLDR9LED811P3149P30LVCCD1P00JP1R2 IN(TXD)P3.1R2 OUTDR1011P371730814LQ1LVCCD2P01VCCT1 INP3.7(RD)ALE/PROGT1 OUT1K12DR1110T2OUTP3616293P3178550D3P02DVCCVCCP16T2 INP3.6(WR)PSEN1KT2 OUT34DR12714LED1LED2LED3LED4LED5LED6LED7LED8D4P03PVCC2VCCW4C1+C2+1K56DR13LR0T2OUT235VCCD5P04PVCC1C1 -C2 -1K78GNDDR1415SC1SC24K7P276D6P05V+1K2DR151041041MAX232D7P06HEADER 4X2V-1KVCC6DR1616D8P07MP1MP4D11KP07P37VCCRS232P17LVCC1K88P06P36W577P05P35D266KP04P34EC155EKEYP03P33EVCCGNDEVCC1MK144P02P32P30P31P32P332D3RESET33EEPROMP01P31MC4104322P00P3010U/16VK11K12K13K14EU1W6P1211ER1ER2RST18D4A0VDD4K74K727P0P3A1WPSW-PB4SW-PB4SW-PB4SW-PB4MR2P2536A2SCL64K7P26P3445MP2MP3D5VSSSDAP17P27K21K22K23K24PCON1885P16P26GND424C08W7GND377P15P25GND3D6D+266SW-PB4SW-PB4SW-PB4SW-PB4P14P24VCC22D-155P13P231P35VCC1TX1VBUS44TRTCP12P22OSC32 OUTOSC32 INK31K32K33K34POWERD7B33BP11P21UCON1USBTC122P10P20VCCTVCCGNDW832K11SW-PB4SW-PB4SW-PB4SW-PB46D8R1SW1P365P1P2104K41K42K43K441K4TU1OSC_INTVCC18BATVCC2VCC1OSC32 INC1P22VCC1271X1C2X1SCLKSW-PB4SW-PB4SW-PB4SW-PB4OSC32 OUTPWRJP2P23P37362104X2I/O220U/16VP21BEEPP24VCC23GND4512GNDRST12MP20DS1P32P33P34P35POWER-KEY34MC3MC2K1K2K3K4TVCCVCCDS13025630P30PEVCCVCC78OSC_OUTBSW-PB4SW-PB4SW-PB4SW-PB4GNDHEADER 4X2VCCDSBEEPDS18B20VCCBQ18550VCCDSR1BR1BU1DSU14K74K73IR1JP3BEEPDS12100IU1P3211IR38K32BEEPDS18B202IR38KCON21IR 38KAA
TitleSizeNumberRevisionA3Date:12-Jul-2010Sheet of 实习制作电路板\syb51制版.ddbDrawn By:File:H:\12345678
1
2(各个部分功能说明如下:
KEY:分为独立键盘和矩阵键盘,均为外部输入设备。
IR38K:红外接收设备。
DS18B20:温度测量仪器。
SERIAL:串行口,与计算机之间实现数据的发送和接收。 BEEP:蜂鸣器,用于播放音乐或实现报警功能。
DS1302:是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟芯片,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V,5.5V。
LED,DIGI,1602,12864:均为显示器。其中1602和12864为液晶显示器件。
POWER-KEY:电源控制开关。
RESET:复位开关。单片机在启动时都需要复位,以使CPU及系统各部件处于确定的初始状态,并从初态开始工作。89系列单片机的复位信号是从RST引脚输入到芯片内的施密特触发器中的。当系统处于正常工作状态时,且振荡器稳定后,如果RST引脚上有一个高电平并维持2个机器周期(24个振荡周期)以上,则CPU就可以响应并将系统复位。
MAX232:Max232是一款兼容RS232标准的芯片。该器件包含2个驱动器、2个接收器和1个电压发生器电路提供TIA/EIA-232-F电平。Max232芯片起电平转换的功能,使单片机的TTL电平与PC的RS232电平达到匹配。 EEPROM:EEPROM是电可擦除可编程只读存储器,其突出优点是能够在线擦除和改写,较新的EEPROM产品在写入时能自动完成擦除,且不需要专用的
2
编程电源,可直接使用单片机系统的+5V电源。它既可以扩展为片外EPROM,又可以扩展为片外RAM。既具有ROM的非易失忆性,又能像RAM一样随机的读/写,每个单元的信息保留时间长达20年,但与RAM相比,EEPROM写操作速度慢。
AT89C52:AT89C52是一个低电压,高性能CMOS 8位单片机,片内含8k字节的可反复擦写的Flash只读程序存储器和256字节的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,功能强大的AT89C52单片机可提供许多较复杂系统控制应用场合。 三(硬件调试
1(焊接
原理图依次将按功能划分的器件焊接。依次是LED功能模块,键盘模块,数码管显示模块,1602和12864模块,然后是电源,串口线,USB口等外围设备,当所有元器件都焊接完,不要急于接通电源。首先检查焊接是否与原理图要求一致,如果没有问
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
,用万用表检查是否有虚焊,引脚短路现象。再逐一排除元器件,直到没有问题为止。
四(软件开发
完成了基本的硬件调试,接下来是软件开发。本次实习我要完成的是用1602实现的电子时钟。下面先介绍一下有关1602的基本知识。
1602 液晶显示器(LCD)具有功耗低、体积小、重量轻、超薄等许多其它显示器无法比拟的优点,近几年来被广泛用于单片机控制的智能仪器、仪表和低功耗电子产品中。LCD 可分为段位式LCD、字符式LCD 和点阵
3
式LCD。其中,段位式LCD 和字符式LCD 只能用于字符和数字的简单显示,不能满足图形曲线和汉字显示的要求;而点阵式LCD 不仅可以显示字符、数字,还可以显示各种图形、曲线及汉字,并且可以实现屏幕上下左右滚动,动画功能,分区开窗口,反转,闪烁等功能,用途十分广泛。
1602采用标准的16脚接口,其中:
第1脚:VSS为电源地
第2脚:VDD接5V电源正极
第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。
第4脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。
第5脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。
第6脚:E(或EN)端为使能(enable)端。
第7,14脚:D0,D7为8位双向数据端。
第15,16脚:空脚或背灯电源。15脚背光正极,16脚背光负极。 1.
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
的主要思路:
1602第一行显示2010-7-28,第二行显示00-00-00,通过矩阵键盘调整时间。其中K42和K11分别为第一行和第二行的光标移位建,K21和K31为调节时,分,秒的加减。K43和K44为调节年,月,日的加减。只有K11或K42被按下后,K21,K31,K43,K44才工作。
4
2(设计步骤:
液晶初始化后送入数据,开定时器0,时钟开始工作,接下来检测键盘
上的按键是否被按下,若K11被按下一次,时钟停止工作,光标在秒位闪
烁,此时按K21,K31可调整时间,若K11第二次被按下,光标向前移位到
分,按K21,K31调整分,若K11第三次被按下,光标向前移位到时,按
K21,K31调整时,若再一次按下K11,时钟恢复工作。K42,,43,,44 工
作方式相同。可以调节年,月,日。
3.调试程序如下:
#include
sbit rh=P3^7;
#define uchar unsigned char uchar count,s1num,s4num; #define uint unsigned int uint nian;
sbit rs=P1^0; char miao,shi,fen,ri,yue; sbit rw=P1^1; uchar code table[]=" sbit lcden=P1^2; 2010-07-28 "; sbit lb=P2^1; uchar code table1[]=" sbit s1=P3^4; 00:00:00";
sbit s2=P3^5; void delay(uint z) sbit s3=P3^6; {uint x,y;
sbit rd=P3^0; for(x=z;x>0;x--) sbit s4=P3^1; for(y=110;y>0;y--); sbit s5=P3^2; }
sbit s6=P3^3; void write_com(uchar com)
5
{rs=0; rw=0;
lcden=0; lcden=0;
P0=com; write_com(0x38); delay(5); write_com(0x0c); lcden=1; write_com(0x06); delay(5); write_com(0x01); lcden=0; write_com(0x80); } for(num=0;num<15;num++) void write_date(uchar date) {
{rs=1; write_date(table[num]); lcden=0; delay(5);
P0=date; }
delay(5); write_com(0x80+0x40); lcden=1; for(num=0;num<12;num++) delay(5); {write_date(table1[num]); lcden=0; delay(5);}
} TMOD=0x01;
void init() TH0=(65536-50000)/256; {uchar num; TL0=(65536-50000)%256; nian=2010; EA=1;
yue=7; ET0=1;
ri=28; TR0=1;
6
} uchar bai,shi2,ge2; void write_sfm(uchar add,uchar int qian;
date) shi2=date2%100/10; {uchar shi,ge; ge2=date2%10; shi=date/10; write_com(0x80+add2); ge=date%10; write_date(0x30+shi2); write_com(0x80+0x40+add); write_date(0x30+ge2); write_date(0x30+shi); }
write_date(0x30+ge); void keyscan() } {
void write_sfm1(uchar rd=0;rh=0;
add1,uchar date1) if(s1==0)
{uchar shi1,ge1; {delay(5);
shi1=date1/10; if(s1==0)
ge1=date1%10; {s1num++;
write_com(0x80+add1); while(!s1);
write_date(0x30+shi1); if(s1num==1)
write_date(0x30+ge1); {TR0=0;
} write_com(0x80+0x40+10);wrivoid write_sfm2(uchar te_com(0x0f); add2,uchar date2) }
{ }
7
if(s1num==2) write_sfm(7,fen); {write_com(0x80+0x40+7);} write_com(0x80+0x40+7); if(s1num==3) }
{write_com(0x80+0x40+4); if(s1num==3) } {
if(s1num==4) shi++;
{s1num=0;write_com(0x0c);TR0=1if(shi==24) ; shi=0;
} write_sfm(4,shi); }if(s1num!=0) write_com(0x80+0x40+4); {if(s2==0) }
{delay(5);if(s2==0) }
{while(!s2); }
if(s1num==1) if(s3==0)
miao++; {delay(5);
if(miao==60)miao=0; if(s3==0)
write_sfm(10,miao); {while(!s3); write_com(0x80+0x40+10); if(s1num==1) } { miao--;
if(s1num==2) if(miao==-1) {fen++; miao=59;
if(fen==60)fen=0; write_sfm(10,miao);
8
write_com(0x80+0x40+10); if(s4==0)
} {s4num++;
if(s1num==2) while(!s4); { if(s4num==1) fen--; {TR0=0;
if(fen==-1) write_com(0x80+11); fen=59; write_com(0x0f); write_sfm(7,fen); }
write_com(0x80+0x40+7); }
} if(s4num==2) if(s1num==3) {write_com(0x80+8); {shi--; }
if(shi==-1) if(s4num==3) shi=23; {
write_sfm(4,shi); write_com(0x80+5); write_com(0x80+0x40+4); }
} if(s4num==4) } {
} s4num=0;
} write_com(0x0c); if(s4==0) TR0=1;
{delay(5); }
9
} case 3: if(s4num!=0) if(ri==32) {if(s5==0) ri=1;break; {delay(5); case 4: if(s5==0) if(ri==31) {while(!s5); ri=1;break; if(s4num==1) case 5: {ri++; if(ri==32) switch(yue) ri=1;break; { case 6: case 1: if(ri==31) if(ri==32) ri=1;break; ri=1;break; case 7: case 2: if(ri==32) if(nian%4==0) ri=1;break; { case 8: if(ri==29) if(ri==32) ri=1; ri=1;break; } case 9: else if(ri==31) if(ri==30) ri=1;break; ri=1;break; case 10:
10
if(ri==32) {nian++; ri=1;break; write_sfm2(5,nian);
case 11: write_com(0x80+5);
if(ri==31) }
ri=1;break; }
case 12: }
if(ri==32) if(s6==0) ri=1;break; {delay(5); default : break; if(s6==0) } {while(!s6); write_sfm1(11,ri); if(s4num==1) write_com(0x80+11); { ri--; } if(ri==0) if(s4num==2) switch(yue) { {
yue++; case 1: if(yue==13) ri=31;break; yue=0; case 2: write_sfm1(8,yue); if(nian%4==0) write_com(0x80+8); ri=28;
} else
if(s4num==3) ri=29;break;
11
case 3: write_sfm1(11,ri); ri=31;break; write_com(0x80+11); case 4: }
ri=30;break; if(s4num==2) case 5: {yue--;
ri=31;break; if(yue==0)
case 6: yue=12;
ri=30;break; write_sfm1(8,yue); case 7: write_com(0x80+7) ri=31;break; }
case 8: if(s4num==3) ri=31;break; {
case 9: nian--;
ri=30;break; if(nian==-1) case 10: nian=2010;
ri=31;break; write_sfm2(5,nian); case 11: write_com(0x80+5); ri=30;break; }
case 12: }
ri=31;break; }
default : break; }
} }
12
void main() lb=0; { delay(20); init(); if(shi==24) while(1) {shi=0; { ri++; keyscan(); switch(yue) } {case 1: } if(ri==32) void timer0() interrupt 1 {ri=1; {TH0=(65536-50000)/256; yue++; TL0=(65536-50000)%256; }break; count++; case 2: if(count==20) if(nian%4==0) { {if(ri==29) count=0; {ri=1; miao++; yue++; if(miao==60) }
{miao=0; }
fen++; if(ri==30) if(fen==60) {ri=1; {fen=0; yue++; shi++; }break;
13
case 3: if(ri==32) if(ri==32) {ri=1; {ri=1; yue++; yue++; }break; }break; case 8: case 4: if(ri==32) if(ri==31) {ri=1; {ri=1; yue++; yue++; }break; }break; case 9: case 5: if(ri==31) if(ri==32) {ri=1; { yue++; ri=1; }break; yue++; case 10: }break; if(ri==32) case 6: {ri=1; if(ri==31) yue++; {ri=1; }break yue++; case 11: }break; if(ri==31) case 7: {ri=1;
14
yue++;
}break;
case 12:
if(ri==32)
{ri=1;
yue=1;
nian++;
{nian=1;
}
write_sfm2(5,nian); }break;
default : break; }
write_sfm1(8,yue); }
write_sfm1(11,ri); }
write_sfm(4,shi); }
15
五(心得
体会
针灸治疗溃疡性结肠炎昆山之路icu常用仪器的管理名人广告失败案例两会精神体会
首先,在实习之前,我们要对所用单片机的内部结构有一个系统的了解,知道该单片机内有哪些资源;要有一个清晰的思路和一个完整的的软件流程图;在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路。
其次,在这次课程设计中,我们运用到了以前所学的专业课知识,如:C语言、模拟和数字电路知识等。虽然过去从未独立应用过它们,但在学习的过程中带着问题去学我发现效率很高,这是我做这次课程设计的又一收获。
最后,在做本次实习的过程中,我感触最深的当属查阅大量的设计资料了。为了让自己的设计更加完善,查阅这方面的设计资料是十分必要的,同时也是必不可少的。我们是在做单片机实习,但我们不是艺术家,他们可以抛开实际尽情在幻想的世界里翱翔,而我们一切都要有据可依,有理可寻,不切实际的构想永远只能是构想,永远无法升级为设计。
现在可以说单片机是百花齐放,百家争鸣的时期,世界上各大芯片制造公司都推出了自己的单片机,从8位、16位到32位,数不胜数,应有尽有,有与主流C51系列兼容的,也有不兼容的,但它们各具特色,互成互补,为单片机的应用提供广阔的天地。因此学好单片机对我们以后的学习和工作都是有很大帮助的。
16
17