单片机实训报告
课程设计名称:单片机实训总结
学院: 电子电气学院
专业: 电子信息
姓名: XXX
指导老师: XXX
20##年12月29日
一、实训目的:
1、熟悉单片机应用系统的开发、研制过程。
2、能运用MCS-51单片机进行简单的单片机应用系统的硬件设计。
3、能采用MCS-51单片机汇编语言进行简单的单片机应用系统的软件设计。
4、掌握单片机应用系统的硬件、软件调试方法。
5、熟悉单片机仿真开发系统的作用,基本掌握运用单片机仿真开发系统进行在线仿真、调 试和目标程序固化的方法。
6、为今后从事单片机应用系统的开发、生产和维护工作奠定基础
二、实训器材:
pc机(一台) 单片机小车(一辆)
三、实训重点难点
1、会运用PROTEL等软件工具,学习对单片机应用系统的硬件设计
2、运用KIEL C51 设计、调试单片机应用固件
3、掌握DAC芯片、LCD12864,LCD1602、行列式键盘、数码管、串口、万年历等基本知识
四、实训小车原理图
五、实训程序
1、1602两行显示
#include <reg51.h>
#define lcd_data_port P0
sbit lcd_rs = P2^5;
sbit lcd_en = P2^6;
//延时程序//
void delay100us(unsigned int x)
{unsigned int a,b;
for(a=0;a<x;a++)
for(b=0;b<10;b++);
}
//送命令//
void sendcommandtolcd(unsigned char lcd_command)
{
lcd_data_port=lcd_command;
lcd_rs=0;
lcd_en=0;
delay100us(10);
lcd_en=1;
delay100us(10);
lcd_en=0;
delay100us(10);
}
//送数据//
void senddatatolcd(unsigned char lcd_data)
{
lcd_data_port=lcd_data;
lcd_rs=1;
lcd_en=0;
delay100us(10);
lcd_en=1;
delay100us(10);
lcd_en=0;
delay100us(10);
}
void lcd_init(void)
{ sendcommandtolcd(0x38);
sendcommandtolcd(0x0c);
sendcommandtolcd(0x01);
sendcommandtolcd(0x06);
}
void display(unsigned char *p)//显示函数
{
while(*p!='\0')
{senddatatolcd(*p);
p++;}
}
void main(void)
{ lcd_init();
sendcommandtolcd(0x80);//第一行地址
//senddatatolcd(0x41);显示字母A
display("diyihang");
sendcommandtolcd(0xc0);//第二行地址
display("dierhang");
while(1);
}
12864汉字显示
#include <reg51.h>
#define lcd_port P0
sbit lcd_rs = P2^5;
sbit lcd_rw = P2^6;
sbit lcd_en = P2^7;
//延时程序//
void delay100us(unsigned int x)
{unsigned int a,b;
for(a=0;a<x;a++)
for(b=0;b<10;b++);
}
//送命令//
void sendcommandtolcd(unsigned char lcd_command)
{
lcd_port=lcd_command;
lcd_rw=0;
lcd_rs=0;
lcd_en=1;
delay100us(100);
lcd_en=0;
delay100us(100);
}
//送数据//
void senddatatolcd(unsigned char lcd_data)
{
lcd_port=lcd_data;
lcd_rw=0;
lcd_rs=1;
lcd_en=1;
delay100us(100);
lcd_en=0;
delay100us(100);
}
void lcd_init(void)//初始化
{ sendcommandtolcd(0x38);
sendcommandtolcd(0x0c);
sendcommandtolcd(0x06);
sendcommandtolcd(0x01);
}
void display(unsigned char *p)//显示函数
{
while(*p!='\0')
{senddatatolcd(*p);
p++;}
}
void main(void)
{
lcd_init();
sendcommandtolcd(0x80);//第一行地址
display("第一行A");
sendcommandtolcd(0x90);//第二行地址
display("第二行B");
sendcommandtolcd(0x88);//第三行地址
display("第三行C");
//senddatatolcd(0x41);
sendcommandtolcd(0x98);//第四行地址
//senddatatolcd(0xc4);
//senddatatolcd(0xe3);
display("第四行D");
while(1);
}
A/D转换(方波)
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit CS=P0^1;
sbit CLK=P0^0;
sbit DATA=P0^2;
void da5615(uint da)
{uchar i;
da<<=6;
CS=0;
CLK=0;
for(i=0;i<12;i++)
{DATA=(bit)(da&0x08000);
CLK=1;
da<<=1;
CLK=0;}
CS=1;
CLK=0;
for(i=0;i<12;i++);}
void delay(uint x)
{uint i,j;
for(i=0;i<x;i++)
for(j=0;j<100;j++);}
void main()
{int i;
while(1)
{for(i=1;i<0x03fc;i++)
{da5615(i);
delay(1);}
}}
串口控制
#include <reg51.h>
unsigned char a=0x55;
void main()
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
SCON=0x50;
while(1)
{
while(!RI);
RI=0;
P0=SBUF;
SBUF=a;
while(!TI);
TI=0;
}}
万年历
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit LCDE=P2^6;
sbit RDN=P2^5;
sbit WRN=P2^4;
uint a=0,b=0,c=2,second=0,minute=8,hour=11,day=15,moon=12,year=2012;
uint a1,a2,a3,sec1,sec2,min1,min2,ho1,ho2,day1,day2,moon1,moon2,year1,year2,year3,year4;
void display();
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write_com(uchar com)
{
RDN=0;
P0=com;
delay(5);
LCDE=1;
delay(5);
LCDE=0;
}
void write_data(uchar date)
{
RDN=1;
P0=date;
delay(5);
LCDE=1;
delay(5);
LCDE=0;
}
void init()
{
WRN=0;
LCDE=0;
write_com(0x38);
write_com(0x0c);
write_com(0x01);
write_com(0x06);
}
void main()
{
init();
IE=0x82;
TMOD=0x01;
TH0=(65636-10000)/256;
TL0=(65636-10000)%256;
TR0=1;
while(1)
{
display();
}
}
void all(void)interrupt 1
{
TH0=(65636-10000)/256;
TL0=(65636-10000)%256;
a++;
if(a>100)
{
a=0;
second++;
if(second%2==0)
{ b=2;
c=0;}
if(second%2==1)
{ b=0;
c=2;}
if(second==60)
{
second=0;
minute++;
if(minute==60)
{
minute=0;
hour++;
if(hour==24)
{
hour=0;
day++;
if(day>30)
{
day=0;
moon++;
if(moon>12)
{
moon=0;
year++;
}
}
}
}
}
}
}
void display()
{
a1=a%10;
a2=a/10%10;
a3=a/100;
sec1=second%10;
sec2=second/10;
min1=minute%10;
min2=minute/10;
ho1=hour%10;
ho2=hour/10;
day1=day%10;
day2=day/10;
moon1=moon%10;
moon2=moon/10;
year1=year%10;
year2=year%100/10;
year3=year/100%10;
year4=year/1000;
write_com(0x80+0x4c);
write_data(0x30+a1);
write_com(0x80+0x4b);
write_data(0x30+a2);
write_com(0x80+0x4a);
write_data(0x3a);
write_com(0x80+0x49);
write_data(0x30+sec1);
write_com(0x80+0x48);
write_data(0x30+sec2);
write_com(0x80+0x47);
write_data(0x3a);
write_com(0x80+0x46);
write_data(0x30+min1);
write_com(0x80+0x45);
write_data(0x30+min2);
write_com(0x80+0x44);
write_data(0x3a);
write_com(0x80+0x43);
write_data(0x30+ho1);
write_com(0x80+0x42);
write_data(0x30+ho2);
write_com(0x80+0x0c);
write_data(0x30+day1);
write_com(0x80+0x0b);
write_data(0x30+day2);
write_com(0x80+0x0a);
write_data(0x2f);
write_com(0x80+0x09);
write_data(0x30+moon1);
write_com(0x80+0x08);
write_data(0x30+moon2);
write_com(0x80+0x07);
write_data(0x2f);
write_com(0x80+0x06);
write_data(0x30+year1);
write_com(0x80+0x05);
write_data(0x30+year2);
write_com(0x80+0x04);
write_data(0x30+year3);
write_com(0x80+0x03);
write_data(0x30+year4);
write_com(0x80);
write_data(0x3c+b);
write_com(0x80+0x01);
write_data(0x3c+b);
write_com(0x80+0x02);
write_data(0x3c+b);
write_com(0x80+0x0d);
write_data(0x3c+c);
write_com(0x80+0x0e);
write_data(0x3c+c);
write_com(0x80+0x0f);
write_data(0x3c+c);
write_com(0x80+0x40);
write_data(0x3c+b);
write_com(0x80+0x41);
write_data(0x3c+b);
write_com(0x80+0x4d);
write_data(0x3c+c);
write_com(0x80+0x4e);
write_data(0x3c+c);
write_com(0x80+0x4f);
write_data(0x3c+c);
}
0~99
#include <reg51.h>
#define SEG P0 // 定义七节显示器接至Port 0
#define uchar unsigned char
#define uint unsigned int
sbit p25=P2^5;
sbit p26=P2^6;
Char code TAB[10]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7c,0x07,0x7f,0x67}; /* 声明七节显示器驱动信号阵列(共阴) */
/* 延迟函数,延迟约x 5ms */
void delay(int x) // 延迟函数开始
{ int i,j; // 声明整数变数i,j
for (i=0;i<x;i++) // 计数x次,延迟x 5ms
for (j=0;j<600;j++);// 计数600次,延迟5ms
} // 延迟函数结束
void main()
{
unsigned int ge=0,shi=0,coun=0;
while(1)
{
p26=1;
P0=0xfd;
p26=0;
p25=1;
SEG=TAB[ge];
delay(2);
p25=0;
p26=1;
P0=0xfe;
p26=0;
p25=1;
SEG=TAB[shi];
delay(2);
coun++ ;
if(coun>=20)
{ coun=0;
++ge;}
if(ge>9)
{ ge=0;
++shi;
if(shi>9) shi=0;
}} }
流水灯
#include <reg51.h>
void delay(int);
main() // 主程序开始
{ unsigned char i; // 声明无号数字元变数i(占1Bytes)
P3=0x00;
while(1)
{for(i=0;i<=7;i++)
{P0=i;
delay(100);}
}} // 主程序结束
/* 延迟函数,延迟约x 5ms */
void delay(int x) // 延迟函数开始
{ int i,j; // 声明整数变数i,j
for (i=0;i<x;i++) // 计数x次,延迟x 5ms
for (j=0;j<1200;j++);// 计数600次,延迟5ms
} // 延迟函数结束
六、心得体会
通过这几天的单片机的实训我在理论的基础上更深刻的掌握了单片机的深层内容及实际生活中的应用实训锻炼了自己动手能力和思维能力还有在软件方面的编程能力让我受益匪浅同时也暴露出一些平时学习上的问题让我深刻反思。这些问题的发现将为我以后的学习和工作找明道路查漏补缺为进一步学习作好准备。通过实训让我懂得了如何编写一些简单的程序学会了如何制作单片机应用程序并且可以在今后的日常生活中灵活运用。
单片机实训报告姓名学号班级指导老师实训时间前言一周的单片机实训很快就结束咯在这一周的时间里我学到了很多关于单片机各方面的知识老师在…
单片机实验报告学生姓名学号专业指导教师学院信息与电气工程学院20xx年11月单片机实验报告实验一MCS51指令系统实验数据排序1实…
目录一概述11设计制作产品的背景目的意义12设计制作产品的设计要求13分工情况工作计划及本人所总结工作14本课题的基本内容重点及难…
广东轻工职业技术学院实训报告实训项目单片机实训系别:电子通信工程系专业:应用电子技术班级:嵌入式091班姓名:**学号:***指导…
题目单片机组成原理实验报告学院计算机科学与工程学院专业信息安全姓名学号20xx年12月8日实验一输入输出接口编程一实验目的1掌握K…
单片机实训报告一周的实训,让我们从另一个角度去发现单片机。期间我学会了很多宝贵的知识和经验,在这次单片机实训中我们巩固了我们平时所…
时间过得真快,不经意间,一个学期就到了尾声,进入到如火如荼的期末考试阶段。在学习单片机这门课程之前,就早早的听各种任课老师和学长学…
单片机实验心得体会时间过得真快,不经意间,一个学期就到了尾声,进入到如火如荼的期末考试阶段。在学习单片机这门课程之前,就早早的听各…
随着电子技术的发展,特别是随着大规模集成电路的产生,给人们的生活带来了根本性的变化,如果说微型计算机的出现使现代的科学研究得到了质…
单片机实习心得体会随着电子技术的发展,特别是随着大规模集成电路的产生,给人们的生活带来了根本性的变化,如果说微型计算机的出现使现代…
这次实习我们使用控制电路的单片机是at89s51型号的。通过它实现对八盏双色灯发光二极管的控制p0和p2口控制四盏灯。在at89s…