单片机实验报告9Word格式.docx
- 文档编号:4774559
- 上传时间:2023-05-04
- 格式:DOCX
- 页数:11
- 大小:171.30KB
单片机实验报告9Word格式.docx
《单片机实验报告9Word格式.docx》由会员分享,可在线阅读,更多相关《单片机实验报告9Word格式.docx(11页珍藏版)》请在冰点文库上搜索。
计算机,KeiluVision4,ISIS7Professional,实验箱
实验内容:
实验过程
1.实验电路图
2.C51源程序
#include<
reg52.h>
#defineuintunsignedint
#defineucharunsignedchar
sbitrs=P2^4;
//定义液晶显示器控制端口
sbitrw=P2^5;
sbiten=P2^6;
sbits1=P1^0;
//定义按键控制
sbits2=P1^1;
sbits3=P1^2;
sbits4=P1^3;
ucharshi,fen,miao,ri,yue,nin;
ucharcodetable[]={"
Time"
};
ucharcodetable1[]={"
00:
00:
00"
ucharnum,num1,count;
uinti,sh,ge,s,g;
voiddelay(uchartime)//延时
{
uintj;
for(;
time>
0;
time--)
for(j=0;
j<
125;
j++);
}
voidwrite_com(ucharcom)//写指令函数
{
en=0;
rs=0;
delay(5);
P0=com;
en=1;
}
voidwrite_data(uchardat)//写数据函数
{en=0;
rs=1;
P0=dat;
voidinit()//初始化
rw=0;
write_com(0x38);
//设置16X2显示,5X7点阵,8位数据接口
write_com(0x0c);
//设置开显示,不显示光标
write_com(0x06);
//写一个字符后地址指针加1
write_com(0x01);
//显示清零,数据指针清零
for(i=0;
i<
(sizeof(table)-1);
i++)//第一行写
write_com(0x80+i);
write_data(table[i]);
(sizeof(table1)-1);
i++)//第二行写
{write_com(0x80+0x40+i);
write_data(table1[i]);
miao=59;
fen=59;
shi=23;
TMOD=0x01;
//time0作为定时器工作在模式1下
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
//开启总中断
ET0=1;
//开启time0中断
TR0=1;
//启动time0
voidwrite_sfm(ucharadd,ucharnum)//时分秒函数
{sh=num/10;
//分离出十位
ge=num%10;
//分离出个位
write_com(0x80+0x40+add);
//第二行数据指针位置调整
write_data(0x30+sh);
//更改显示数据的十位
write_data(0x30+ge);
//更改显示数据的个位
voidtimer0()interrupt1//time0中断
TH0=(65536-50000)/256;
//重装初始值
TL0=(65536-50000)%256;
count++;
if(count==20)//20次到则满一秒
count=0;
miao++;
if(miao==60)
miao=0;
fen++;
if(fen==60)
fen=0;
shi++;
if(shi==24)
shi=0;
write_sfm(4,shi);
write_sfm(7,fen);
}
write_sfm(10,miao);
voidkeyscan()//键盘扫描
{if(s1==0)//按下S1
{delay(5);
if(s1==0)
num1++;
while(!
s1);
//等待释放
if(num1==1)
TR0=0;
write_com(0x0e);
//显示光标,不闪烁
write_com(0x80+0x40+0x0b);
//数据指针移动到秒的个位处
write_com(0x0f);
//显示光标,闪烁
if(num1==2)
write_com(0x80+0x40+0x08);
//数据指针移到到分钟的个位处
if(num1==3)
{
write_com(0x80+0x40+0x05);
//数据指针移到到小时的个位处
if(num1==4)
{num1=0;
//清零
//重新显示
TR0=1;
//重新启动计时
if(num1!
=0)//按下S2则选择时/分/秒加1
if(s2==0)
s2);
if(num1==1)
delay(20);
if(miao==60)
write_com(0x80+0x40+0x0a);
{fen++;
write_com(0x80+0x40+0x07);
write_com(0x80+0x40+0x04);
=0)
if(s3==0)//按下S3则选择时/分/秒减1
if(s3==0)
s3);
miao--;
if(miao==-1)
miao=59;
fen--;
if(fen==-1)
fen=59;
shi--;
if(shi==-1)
shi=23;
if(s4==0)//确定按键
if(s4==0)
s4);
num1=0;
voidmain()
init();
while
(1)
keyscan();
3.程序调试方法
在Keilc里面先敲入程序,保存成“.c”的文件,在新建一个工程,在工程里面添加保存好的文件,在设置里面的生成“,hex”选项后面打上勾,在编译程序,如果提示有错误就点击错误,程序上就会在错误的地方有一个光标,然后检查修改。
4.仿真运行效果
实验总结:
图和程序都是网上找的。
但是程序和实验箱又是不符合的。
所以我们要烧进实验箱的程序还得重新调,重新改。
有一个问题是个位显示的数字到9之后会显示一些符号,通过治疗查到,那些是LCD1602内部的显示,我们计数的显示只能选择前10个数字,所以在显示各位时,当秒计数应该求余数,显示十位时,应该求除数。
另外还有一些小问题就是程序比较复杂,具体实现不太清楚。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 实验 报告