万年历组装实训报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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画出电路图软件进行仿真

相关文档
最新文档