单片机实验2

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{
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);
实验
1、
1.了解D/A(DAC0832)的基本原理和功能。
2.掌握D/A(DAC0832)和单片机的硬件接口以及软件设计方法。
3. 软件编程使DAC0832转换模块循环输出锯齿波。
4. 软件编程使DAC0832转换模块循环输出正弦波。
2、
3、
4、
#include<reg51.h>
#define uchar unsigned char
int readByte[10];
int i;
P2=0x00;
for(i=0;i<=9;i++)
{
WriteI2C(writeByte[i],0x00+i);
Delay(1000000);
}
i=0;
while(1)
{
Delay(900000000);
readByte[i]=ReadI2C(i+0x00);
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit ADC_START=P2^0;
sbit ADC_ALE =P2^1;
sbit ADC_OE =P2^2;
sbit ADC_EOC =P2^3;
sbit clk =P2^7;
2 掌握A/D转换芯片ADC0809与单片机的接口方法。
3 通过实验了解单片机如何进行数据采集。
4.利用实验箱产生0-5V的模拟电压。编写程序,采集该模拟电压并将转换的结果用发光二极管显示。
5.采集光敏电阻的亮度变化,设置门限值,实现超过门限值使蜂鸣器报警的功能。
2、
3、
4、
#include<reg52.h>
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);
#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;
unsigned char q;
void WCOM(unsigned char d);
/*写指令函数*/
void Dat(unsigned char d);
/*写数据函数*/
void Imim();
/*初始化*/
void Clearcld();
/*清屏*/
void Delay()
{
int d;
for(d=0;d<30000;d++)
sbit key=P2^2;
uchar i;
uchar code sin_tab[]=
{
0x80,0x83,0x85,0x88,0x8a,0x8d,0x8f,0x92,0x94,0x97,
0x99,0x9b,0x9e,0xa0,0xa3,0xa5,0xa7,0xaa,0xac,0xae,
0xb1,0xb3,0xb5,0xb7,0xb9,0xbb,0xbd,0xbf,0xc1,0xc3,
Ack();
Write8bit(RomAddress);
Ack();
Start();
Write8bit(ReadDeviceAddress);
Ack();
Data=Read8bit();
NoAck();
Stop();
return Data;
}
void main()
{
int
writeByte[]={1,2,3,4,5,6,7,8,9,10};
R_W=0;
P1=d;
E=1;
E=0;
}
void Imim()
{
P1=0xFF;
E=0;
WCOM(0x38);
WCOM(0x08);
WCOM(0x06);
Clearcld();
WCOM(0x0c);
}
void Clearcld()
{
D_I=0;
R_W=0;
//P0=0x01;
WCOM(0x01);
}
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--)
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;
_nop_();
P3=0x07;
_nop_();
ADC_ALE=0; //ALE=0时地址被锁存住
}
void ADC_0809()
{
ADC_START=0;
_nop_();
_nop_();
_nop_();
ADC_START=1; //上升沿复位
_nop_();
_nop_();
_nop_();
ADC_START=0; //下降沿开始
实验
1、
1熟悉24C02的芯片功能。
2掌握采用单片机和I2C芯片的硬件接口技术。
3掌握24C02的读写程序的设计和调试方法。
4向芯片中写入10个字节,然后再读出显示。
2、硬件原理
3、软件程序流程
总流程:
写n个字节流程:
读n个字节流程:
4、程序清单
#include "reg52.h"
#define WriteDeviceAddress 0xa0
《微机原理与应用》实验报告
姓名:侯伟
学号:2015012214
年级:2015级
专业:电气工程及其自动化
2017年秋季学期
实验
1、
1、掌握利用单片机控制字符型LCM1602的方法;
2、完成与LCM1602的接口,并尝试各种显示功能。
2、
3、
4、
#include "reg52.h"
#define uchar unsigned char
E=1;
q=P1;
E=0;
if(q&0x80)
{
goto LOOP;
}
R_W=0;
D_I=0;
P1=d;
E=1;
E=0;
}
void Dat(unsigned char d)
{
R_W=1;
D_I=0;
LOOP:
P1=0xFF;
E=1;
q=P1;
E=0;
if(q&0x80)
{
goto LOOP;
}
D_I=1;
for(i=0;i<16;i++)
Dat(' ');
}
}
void Timer0() interrupt 1
{
static uint i;
TH0=0XFC;
TL0=0xFF;
i++;
if(i==1)
{
i=0;
clk=~clk;
}
}
5、
该实验硬件电路出错次数较多,需要锻炼排错的能力,结合软件程序,一步一步检查,这样每一部分都十分清楚
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);
Dat(0x30+(uchar)D4);
Dat(0x30+(uchar)D5);
Dat(0x30+(uchar)D6);
Dat(0x30+(uchar)D7);
Delay();
ADC_OE =0;
}
void WCOM(unsigned char d)
{
R_W=1;
D_I=0;
LOOP:
P1=0xFF;
0xe7,0xe7,0xe7,0xe7,//输出电压从0到最大值,正弦波1/4部分
{
_nop_();
}
}
void Timer0Init()
{
TMOD|=0X01;
TH0=0XFC;
TL0=0XFF;
ET0=1;
EA=1;
TR0=1;
}
void init0809()
{
ADC_START=0;
ADC_OE=0;
ADC_ALE=0;
_nop_();
_nop_();
ADC_ALE=1; //ALE=1时地址进入锁存器
rbyte=rbyte<<1;
Delay(10);
rbyte=rbyte|SDA;
SCL=0;
Delay(10);
}
return(rbyte);
}
int ReadI2C(unsigned char RomAddress)
{
intData;
Start();
Write8bit(WriteDeviceAddress);
P2=readByte[i];
Delay(90000000);
i++;
if(i==10)
i=0;
}
}
5、实验心得及建议
I2C总线的协议比较多,程序编写起来比较困难,这要求我们对24C02芯片十分清楚,如果对它的协议不够清楚,读写函数很难实现
实验
1、
1 掌握A/D转换芯片ADC0809转换性能及编程方法。
for(i=0;i<16;i++)
{
write_data(str2[i]);
delay(100);源自文库
}
while(1)
{
delay(200);
write_com(0x0f);
write_com(0x1e);
}
}
5、
C语言编写函数不同于汇编语言,函数嵌套使得程序变得精炼,此外一定要读懂每个器件的硬件设计,做到软硬件结合
void main()
{
int i;
init0809();
Imim();
Clearcld();
WCOM(0x02);
Timer0Init();
Delay();
while(1)
{
WCOM(0x80);
ADC_0809();
WCOM(0X88);
for(i=0;i<8;i++)
Dat(' ');
WCOM(0X80+0x40);
{
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);
0xc5,0xc7,0xc9,0xcb,0xcc,0xce,0xd0,0xd1,0xd3,0xd4,
0xd6,0xd7,0xd8,0xda,0xdb,0xdc,0xdd,0xde,0xdf,0xe0,
0xe1,0xe2,0xe3,0xe3,0xe4,0xe4,0xe5,0xe5,0xe6,0xe6,
sbit E=P2^6;
sbit R_W=P2^5;
sbit D_I=P2^4;
sbit D0=P0^0;
sbit D1=P0^1;
sbit D2=P0^2;
sbit D3=P0^3;
sbit D4=P0^4;
sbit D5=P0^5;
sbit D6=P0^6;
sbit D7=P0^7;
//unsigned data i;
_nop_();
_nop_();
_nop_();
while(!ADC_EOC); //等待转换结束
ADC_OE =1;
_nop_();
_nop_();
_nop_();
Dat(0x30+(uchar)D0);
Dat(0x30+(uchar)D1);
Dat(0x30+(uchar)D2);
Dat(0x30+(uchar)D3);
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);
#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)
相关文档
最新文档