万年历组装实训报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
—實訓報告—(单片机实训报告)学院系别:机电工程学院
专业班级:电信BK31901
设计学生:张欢
指导老师:陈老师、阎老师
设计时间:2012年10月19日
万年历组装与调试及单片机实训报告
2012-10-219| 电信BK31901班张欢
一、实习时间:2012年10月15日至2012年10月19日
二、实习地点:机电实训楼
三、实习目的与要求:
1熟练C语言中if语句、for语句、while语句的使用。
2.掌握万年历的基本原理,学会分析基本的电路原理图。
3.学会利用Keil软件和proteus软件进行设计。
四、实习内容:
1.利用Keil软件对数码管(秒表)液晶(时钟)编程,并进行编译和链接。
2.掌握AT89C51芯片I/O口的功能及作用。
3.灵活运用C语言对中断、定时计数器及数码管进行编程设计。
4认真掌握proteus仿真软件,并用proteus画出电路图软件进行仿真。
5.掌握万年历的工作原理,学会贴片电容,贴片电阻,晶振集成块的识别与测试,进一步掌握和熟练焊接技术。
五、运用Keil软件对数码管及液晶进行编程设计并用proteus仿真
1.用数码管显示0—60的源程序:
#include
#define uint unsigned char
#define uchar unsigned int
sbit K1=P3^7;
uchar i,Second_Counts,Key_Flag_Idx;
bit Key_State;
uchar code DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f};
void DelayMS(uint x)
{ uchar t;
while(x--)
for(t=0;t<500;t++);}
void Key_Byent_Handle()
{ if(Key_State==0)
{Key_Flag_Idx=(Key_Flag_Idx+1)%3;
switch(Key_Flag_Idx)
{case 1:EA=1;ET0=1;TR0=1;break;
case 2:EA=0;ET0=0;TR0=0;break;
case 0:P0=0x3f;P2=0x3f;i=0;Second_Counts=0; }}} void main()
{P0=0x3f;
P2=0x3f;
i=0;
Second_Counts=0;
Key_Flag_Idx=0;
Key_State=1;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
while(1)
{if(Key_State!=K1)
{DelayMS(10);//开关消抖
Key_State=K1;
Key_Byent_Handle();}}}
void DSY_keyfresh() interrupt 1
{TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
if(++i==2)
{i=0;
Second_Counts++;
P0=DSY_CODE[Second_Counts/10];
P2=DSY_CODE[Second_Counts%10];
if(Second_Counts==60)
Second_Counts=0;}}
2.用液晶显示年、月、日、字符串的源程序:
#include
unsigned char code tab[]="welcome BK31901"; unsigned char code tab1[] ="2012-10-19"; unsigned char num;
sbit RS=P1^2;
sbit RW=P1^1;
sbit E =P1^0;
void delay(unsigned int z)
{unsigned int x,y;
for(x=z;x>0;x--)
for(y=0;y<150;y++);}
void write_com(unsigned char cmd)
{RS=0;
RW=0;
E=1;
P2=cmd;
E=0;
delay(2);}
void write_data(unsigned char dat)
{RS=1;
RW=0;
E=0;
P2=dat;
E=0;
delay(2);}
void init()
{write_com(0x38);
write_com(0x08);
write_com(0x01);
write_com(0x0f);
write_com(0x06);}
int main()
{init();
write_com(0x80);
for(num=0;num<17;num++)
{write_data(tab[num]);}
write_com(0x80-0x42);
for(num=0;num<11;num++)
{ write_data(tab1[num]);}
while(1);
return 0;}
3.用proteus画出电路图软件进行仿真