当前位置:文档之家› 单片机实验2

单片机实验2

0xe7,0xe7,0xe7,0xe7,//输出电压从0到最大值,正弦波1/4部分
实验
1、
1.了解D/A(DAC0832)的基本原理和功能。
2.掌握D/A(DAC0832)和单片机的硬件接口以及软件设计方法。
3. 软件编程使DAC0832转换模块循环输出锯齿波。
4. 软件编程使DAC0832转换模块循环输出正弦波。
2、
3、
4、
#include<reg51.h>
#define uchar unsigned char
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、
该实验硬件电路出错次数较多,需要锻炼排错的能力,结合软件程序,一步一步检查,这样每一部分都十分清楚
_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);
《微机原理与应用》实验报告
姓名:侯伟
学号:2015012214
年级:2015级
专业:电气工程及其自动化
2017年秋季学期
实验
1、
1、掌握利用单片机控制字符型LCM1602的方法;
2、完成与LCM1602的接口,并尝试各种显示功能。
2、
3、
4、
#include "reg52.h"
#define uchar unsigned char
#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;
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);
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,
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++)
Delay(10);
}
void NoAck()
{
SDA=1;
Delay(10);
SCL=1;
Delay(10);
SCL=0;
Delay(10);
}
voiput)
{
unsigned char temp;
for(temp=8;temp!=0;temp--)
P2=readByte[i];
Delay(90000000);
i++;
if(i==10)
i=0;
}
}
5、实验心得及建议
I2C总线的协议比较多,程序编写起来比较困难,这要求我们对24C02芯片十分清楚,如果对它的协议不够清楚,读写函数很难实现
实验
1、
1 掌握A/D转换芯片ADC0809转换性能及编程方法。
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};
实验
1、
1熟悉24C02的芯片功能。
2掌握采用单片机和I2C芯片的硬件接口技术。
3掌握24C02的读写程序的设计和调试方法。
4向芯片中写入10个字节,然后再读出显示。
2、硬件原理
3、软件程序流程
总流程:
写n个字节流程:
读n个字节流程:
4、程序清单
#include "reg52.h"
#define WriteDeviceAddress 0xa0
{
_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时地址进入锁存器
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);
{
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);
#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)
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;
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();
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);
}
int ReadI2C(unsigned char RomAddress)
相关主题