单片机实验2
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《微机原理与应用》实验报告
姓名:侯伟
学号:2015012214
年级:2015级
专业:电气工程及其自动化
2017年秋季学期
实验一 LCM控制实验1、功能要求
1、掌握利用单片机控制字符型LCM1602的方法;
2、完成与LCM1602的接口,并尝试各种显示功能。
2、硬件原理
3、软件程序流程
4、程序清单
#include "reg52.h"
#define uchar unsigned char
#define uint unsigned int
uint q;
uchar str1[]="wu li xue yuan"; uchar str2[]="houwei2015012214";
sbit E=P2^2;
sbit RW=P2^1 ;
sbit RS=P2^0;
void delay(uint z)
{ uint x,y;
for(x=z;x>0;x--)
for(y=100;y>0;y--) ;
}
void write_com(uchar com) {
RS=0;
RW=1;
H1:
P0=0xff;
E=1;
q=P0;
E=0;
if(q&0x80)
goto H1 ;
RS=0;
RW=0;
P0=com;
E=1;
delay(5);
E=0;
}
void write_data(uchar DATE) {
RS=0;
RW=1;
H2:
P0=0xff;
E=1;
q=P0;
E=0;
if(q&0x80)
goto H2 ;
RS=1;
RW=0;
P0=DATE;
delay(5);
E=1;
delay(5);
E=0;
}
void init() {
E=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80);
}
void main()
{
uchar i;
init();
for(i=0;i<14;i++)
{
write_data(str1[i]);
delay(100);
}
write_com(0x80+0x40);
for(i=0;i<16;i++)
{
write_data(str2[i]);
delay(100);
}
while(1)
{
delay(200);
write_com(0x0f);
write_com(0x1e);
}
}
5、实验心得及建议
C语言编写函数不同于汇编语言,函数嵌套使得程序变得精炼,此外一定要读懂每个器件的硬件设计,做到软硬件结合
实验二基于I2C总线的EEPROM读写实验1、功能要求
1熟悉24C02的芯片功能。
2掌握采用单片机和I2C芯片的硬件接口技术。
3掌握24C02的读写程序的设计和调试方法。
4向芯片中写入10个字节,然后再读出显示。
2、硬件原理
3、软件程序流程
总流程:
写n个字节流程:
读n个字节流程:
4、程序清单
#include "reg52.h"
#define WriteDeviceAddress 0xa0 #define ReadDeviceAddress 0xa1
sbit SCL=P1^0;
sbit SDA=P1^1; void Delay(unsigned int n) {
while(n!=0)
n--;
}
void Start()
{
SDA=1;
Delay(10);
SCL=1;
Delay(10);
SDA=0;
Delay(10);
SCL=0;
Delay(10);
}
void Stop()
{
SDA=0;
Delay(10);
SCL=1;
Delay(10);
SDA=1;
Delay(10);
}
void Ack()
{
int i;
SCL=1;
Delay(10);
while(SDA==1&&i<100)
i++;
SCL=0;
Delay(10);
}
void NoAck()
{
SDA=1;
Delay(10);
SCL=1;
Delay(10);
SCL=0;
Delay(10);
}
void Write8bit(unsigned char input) {
unsigned char temp;
for(temp=8;temp!=0;temp--)
{
SDA=(bit)(input&0x80);
Delay(10);
SCL=1;
Delay(10);
SCL=0;
input=input<<1;
}
}
void WriteI2C(unsigned char Wdata ,unsigned char RomAddress ) {
Start();
Write8bit(WriteDeviceAddress); Ack();
Write8bit(RomAddress);
Ack();
Write8bit(Wdata);
Ack();
Stop();
}
int Read8bit()
{
unsigned char temp,rbyte=0;
for(temp=8;temp!=0;temp--)
{
SCL=1;
Delay(10);
rbyte=rbyte<<1;
Delay(10);
rbyte=rbyte|SDA;
SCL=0;
Delay(10);
}
return(rbyte);
}