嵌入式实验报告51单片机.docx
- 文档编号:25226862
- 上传时间:2023-06-06
- 格式:DOCX
- 页数:20
- 大小:3.63MB
嵌入式实验报告51单片机.docx
《嵌入式实验报告51单片机.docx》由会员分享,可在线阅读,更多相关《嵌入式实验报告51单片机.docx(20页珍藏版)》请在冰豆网上搜索。
嵌入式实验报告51单片机
实验报告内容
实验题目:
P口输出实验
实验目的:
通过实验了解P口做为输入输出方式使用时,CPU对P口的操作方式
实验要求:
控制8个LED灯,完成从左到右然后再从右到左再从左到右依次的循序流水
实验器材:
计算机和普中科技STC89C52单片机电路板
实验步骤/程序流程分析:
程序源代码:
#include"reg52.h"
#include
typedefunsignedintu16;
typedefunsignedcharu8;
#defineledP2
voiddelay(u16i)
{
while(i--);
}
voidmain()
{
u8i;
led=0x7f;
delay(50000);
while
(1)
{
for(i=0;i<7;i++)
{
led=_cror_(led,1);
delay(50000);
}
for(i=0;i<7;i++)
{
led=_crol_(led,1);
delay(50000);
}
}
}
实验结果分析:
实验日期:
2017.10.24
成绩评定:
□优秀(100-90分)
□良好(89-80分)
□中等(79-70分)
□及格(69-60分)
□不及格(60-0分)
教师签名:
年月日
实验报告内容
实验题目:
定时器实验
实验目的:
掌握定时器T0,T1的方式选择和编程方法,了解中断服务程序设计方法
实验要求:
利用动态扫描和定时器0在数码管上显示出从200开始以1/10秒的速度往下递减直至100并保持此数,以此同时利用定时器1以500MS速度进行流水灯从上至下移动,当数码管上数减到停止时LED灯全亮。
实验器材:
计算机和普中科技STC89C52单片机电路板
实验步骤/程序流程分析:
程序源代码:
#include
#include
#defineuintunsignedint
#defineucharunsignedchar
sbitLSA=P2^2;
sbitLSB=P2^3;
sbitLSC=P2^4;
uchart0=0,t1,temp;
uchartemp,bai,shi,ge;
uintshu=200;
ucharcodesmgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
voiddelay(uinti)
{while(i--);}
voidxianshi(ucharbai,ucharshi,ucharge)
{LSA=0;LSB=0;LSC=0;
P0=smgduan[ge];
delay(250);
P0=0x00;
LSA=1;LSB=0;LSC=0;
P0=smgduan[shi];
delay(250);
P0=0x00;
LSA=0;LSB=1;LSC=0;
P0=smgduan[bai];
delay(250);
P0=0x00;
}
voidmain()
{TMOD=0x11;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
EA=1;
ET0=1;
ET1=1;
TR0=1;
TR1=1;
temp=0xfe;
P2=0xfe;
while
(1)
{xianshi(bai,shi,ge);}
}
voidT0_time()interrupt1
{TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
t0++;
if(t0==10)
{t0=1;
temp=_crol_(temp,1);
P2=temp;}
}
voidT1_time()interrupt3
{TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
t1++;
if(t1==2)
{t1=0;
shu--;
bai=shu/100;
shi=shu%100/10;
ge=shu%10;
if(shu==100)
{TR1=0;
TR0=0;
P2=0x00;}
}
}
实验结果分析:
实验日期:
2017.11.30
成绩评定:
□优秀(100-90分)
□良好(89-80分)
□中等(79-70分)
□及格(69-60分)
□不及格(60-0分)
教师签名:
年月日
实验报告内容
实验题目:
综合性实验
实验目的:
设计简单功能系统
实验要求:
以单片机为核心,设计数字秒表。
设计要求计时范围:
0~59分59.59秒,整数四位数和小数两位数显示;计时精度10毫秒;复位按钮,计时器清零,并做好下次及时准备;可以对三个对象(A、B)计时,具有启/停控制;设开始、停止A、停止B、显示A、显示B、复位按钮。
实验器材:
计算机和普中科技STC89C52单片机电路板
实验步骤/程序流程分析:
程序源代码:
#include
#defineuintunsignedint//宏定义无符号整型
#defineucharunsignedchar//宏定义无符号字符型
#defineDUAN(P0)//宏定义数码管段代码
#defineWEI(P2)//宏定义数码管位代码
sbitkeystart_stop=P3^2;//定义启动/停止按键
sbitkeyrest=P3^3;//定义复位/清零按键
sbitkeyrecord=P3^4;//定义计数/存储按键
sbitkeydispaly=P3^5;//定义计数/显示按键
sbitbeep=P3^6;//定义蜂鸣器
sbitled=P3^7;//定义
ucharx,msec5,msec10,second,minute;//时间变量
ucharmsec,sec,min;//显示变量
ucharcodetable1[]={0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,0x80,0x90};//共阳数码管数组不带点显示
ucharcodetable2[]={0x40,0x79,0x24,0x30,
0x19,0x12,0x02,0x58,0x00,0x10};//共阳数码管带点显示
/********************************
函数名称:
延时函数delay
功能:
延时指定毫秒
参数:
ucharx
返回值:
无
********************************/
voiddelay(ucharx)
{
uintb,c;
for(b=x;b>0;b--)
for(c=110;c>0;c--);
}
/********************************
函数名称:
定时器初始化函数time_init(void)
功能:
定时器初始化
参数:
无
返回值:
无
*********************************/
voidtime_init(void)
{
msec5=0;
TMOD=0x01;
TH0=(65536-9174)/256;
TL0=(65536-9174)%256;
ET0=1;
TR0=1;
EA=1;
}
/********************************
函数名称:
显示函数display()
功能:
数码管显示
参数:
ucharmsec,ucharsec,ucharmin
返回值:
无
*********************************/
voiddisplay(ucharmsec,ucharsec,ucharmin)
{
DUAN=table1[(msec%10)%10];//0.01秒5.64%10=64%10=0.04
WEI=0x01;
delay
(2);
WEI=0x00;
DUAN=table1[(msec/10)%10];//0.1秒5.64/10=56%10=0.6
WEI=0x02;
delay
(2);
WEI=0x00;
DUAN=table2[(sec%10)];//1秒564%10=6
WEI=0x04;
delay
(2);
WEI=0x00;
DUAN=table1[(sec/10)];//10秒564/10=56%10=6
WEI=0x08;
delay
(2);
WEI=0x00;
DUAN=table1[(min%10)];//1分564/10=56%10=6
WEI=0x10;
delay
(2);
WEI=0x00;
DUAN=table1[(min/10)];//10分564/10=56%10=6
WEI=0x20;
delay
(2);
WEI=0x00;
}
/********************************
函数名称:
蜂鸣器函数
功能:
蜂鸣器发声
参数:
无
返回值:
无
*********************************/
voidbeep_led()
{
beep=0;
delay(600);
beep=1;
delay(600);
led=0;
delay(600);
led=1;
}
/********************************
函数名称:
按键函数
功能:
调试按键的函数
参数:
无
返回值:
无
*********************************/
voidkeys()
{
if(keystart_stop==0)
{
delay(5);
if(keystart_stop==0)
TR0=~TR0;
beep_led();
while(!
keystart_stop);
}
if(keyrest==0)
{
delay(5);
if(keyrest==0)
TR0=0;
msec5=0;
msec10=0,
second=0;
minute=0;
beep_led();
while(!
keyrest);
}
}
/********************************
函数名称:
主函数
功能:
参数:
无
返回值:
*********************************/
voidmain()
{
ucharjishu=0;
ucharflag=0;
ucharmsec1=0,sec1=0,min1=0;
ucharmsec2=0,sec2=0,min2=0;
time_init();
while
(1)
{
keys();//键盘的扫描函数一定要放在while循环里边
msec=msec10;
sec=second;
min=minute;
if(flag==1)
{
display(msec1,sec1,min1);
}
elseif(flag==0)
{
display(msec,sec,min);
}
else
{
display(msec2,sec2,min2);
}
if(keyrecord==0)
{
delay(5);
if(keyrecord==0)
{
beep_led();
jishu++;
if(jishu>2)
{
jishu=0;
}
elseif(jishu==1)
{
msec1=msec10;
sec1=second;
min1=minute;
}
elseif(jishu==2)
{
msec2=msec10;
sec2=second;
min2=minute;
}
}
while(!
keyrecord);
}
if(keydispaly==0)
{
delay(5);
if(keydispaly==0)
{
beep_led();
flag++;
if(flag>2)
flag=0;
}
while(!
keydispaly);
}
}
}
/**********************************
函数名称:
中断函数
功能:
参数:
无
返回值:
***********************************/
voidtimer0()interrupt1
{
TH0=(65536-9174)/256;
TL0=(65536-9174)%256;
msec10++;//msec10加一次等于10ms
if(msec10==100)//j=100为1s
{
msec10=0;
second++;
if(second==60)//second=60为1minute
{
second=0;
minute++;
if(minute==60)//minute=60为1hour
{
minute=0;
}
}
}
}
实验结果分析:
实验日期:
2017.12.01
成绩评定:
□优秀(100-90分)
□良好(89-80分)
□中等(79-70分)
□及格(69-60分)
□不及格(60-0分)
教师签名:
年月日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 实验 报告 51 单片机
![提示](https://static.bdocx.com/images/bang_tan.gif)