51的AD/DA(模数转换)
来源:互联网 发布:中日双边贸易数据 编辑:程序博客网 时间:2024/05/13 08:53
#include <reg52.h>
#include "./delay/delay.h"
#include <stdio.h>
#include <stdlib.h>
#define ERR 0
#define SUCC 1
#define LCDPORT P0
#define LCD_WRITE_DATA 1
#define LCD_WRITE_COM 0
sbit SCL = P2^2;
sbit SDA = P2^3;
bit ack = 0;
sbit RS = P2^4;
sbit RW = P2^5;
sbit E = P2^6;
unsigned char shi = 11,fen = 22,miao = 33;
unsigned char time[3];
unsigned char test;
unsigned char flag = 0;
unsigned char buf[10];
//-------------------------------------------------------------------------------------
void lcd_write(unsigned char byte,unsigned char flag)
{
if(flag)
{
RS = LCD_WRITE_DATA;
}
else
{
RS = LCD_WRITE_COM;
}
RW = 0;
E = 1;
LCDPORT = byte;
delay_us(10);
E = 0;
}
//-------------------------------------------------------------------------------------
void lcd_dis_char(unsigned char x,unsigned char y,unsigned char byte)
{
if(y == 0)
{
lcd_write(x + 0x80,LCD_WRITE_COM);
}
else
{
lcd_write(x + 0x80 + 0x40,LCD_WRITE_COM);
}
lcd_write(byte,LCD_WRITE_DATA);
}
//-------------------------------------------------------------------------------------
void lcd_dis_str(unsigned char x,unsigned char y,unsigned char *src)
{
if(y == 1)
{
lcd_write(x + 0x80,LCD_WRITE_COM);
}
else
{
lcd_write(x + 0x80 + 0x40,LCD_WRITE_COM);
}
while(*src != '\0')
{
lcd_write(*src,LCD_WRITE_DATA);
src++;
}
}
//-------------------------------------------------------------------------------------
void lcd_init()
{
delay_ms(15);
lcd_write(0x38,LCD_WRITE_COM);
delay_ms(5);
lcd_write(0x38,LCD_WRITE_COM);
delay_ms(5);
lcd_write(0x38,LCD_WRITE_COM);
delay_ms(5);
lcd_write(0x38,LCD_WRITE_COM);
delay_ms(5);
lcd_write(0x08,LCD_WRITE_COM);
delay_ms(5);
lcd_write(0x01,LCD_WRITE_COM);
delay_ms(5);
lcd_write(0x06,LCD_WRITE_COM);
delay_ms(5);
lcd_write(0x0c,LCD_WRITE_COM);
delay_ms(5);
}
//-------------------------------------------------------------------------------------
//ÆðʼÐźÅ
void iic_start()
{
SDA = 1;
SCL = 1;
delay_us(1);//2t+12=14
SDA = 0;//ÔÚʱÖÓΪ¸ßµçƽʱ£¬ÀµÍÊý¾ÝÏߣ¬²úÉúÆðʼÐźÅ
delay_us(1);
SCL = 0;//ǯס×ÜÏß
}
//-------------------------------------------------------------------------------------
//ÖÕÖ¹ÐźÅ
void iic_stop()
{
SDA = 0;
SCL = 1;
delay_us(1);
SDA = 1;//ÔÚʱÖÓΪ¸ßµçƽʱ£¬À¸ßÊý¾ÝÏߣ¬²úÉúÍ£Ö¹ÐźÅ
delay_us(1);
SCL = 0;
}
//-------------------------------------------------------------------------------------
//дÈëÒ»¸ö×Ö½Ú
void iic_send_byte(unsigned char byte)
{
unsigned char i;
for(i = 0;i < 8;i++)
{
SDA = byte & 0x80;//д×î¸ßλÊý¾Ý SDAÊý¾Ýλ
SCL = 1; //À¸ßʱÖÓÏߣ¬½«ÊýдÈëµ½É豸ÖÐ
delay_us(1);
SCL = 0; //ÀµÍʱÖÓÏߣ¬ÔÊÐí¸Ä±äÊý¾ÝÏßµÄ״̬
byte <<= 1; //Êý¾Ýλ×óÒÆһ룬°Ñ´Î¸ßλ·ÅÔÚ×î¸ßλΪдÈë´Î¸ßλ×ö×¼±¸
}
SCL = 1;
SDA = 1;
delay_us(1);
if(0 == SDA)
{
ack = 1; //´«ÊäÕýÈ·
}
else
{
ack = 0;
}
SCL = 0;
}
//-------------------------------------------------------------------------------------
//½ÓÊÜÒ»¸ö×Ö½Ú
unsigned char iic_rcv_byte()
{
unsigned char i;
unsigned char temp = 0;
unsigned char a;
SDA = 1;
for(i = 0;i < 8;i++)
{
SCL = 0;
delay_us(1);
SCL = 1;
if(SDA)
{
a = 0x01;
}
else
{
a = 0;
}
temp |= (a << (7 - i));
delay_us(1);
}
SCL = 0;
return temp;
}
//-------------------------------------------------------------------------------------
//Ó¦´ðÐźÅ
void iic_ack()
{
SDA = 0;
SCL = 1;
delay_us(1);
SCL = 0;
}
//-------------------------------------------------------------------------------------
//·ÇÓ¦´ðÐźÅ
void iic_noack()
{
SDA = 1;
SCL = 1;
delay_us(1);
SCL = 0;
}
//-------------------------------------------------------------------------------------
unsigned char AD_Read()
{
unsigned char temp;
iic_start(); //Æô¶¯×ÜÏß
iic_send_byte(0x90);//·¢ËÍÆ÷¼þµØÖ·£¬Ð´Êý¾ÝµØÖ·
if(0 == ack) return ERR;
iic_send_byte(0x40);//·¢ËÍÆ÷¼þ×ÓµØÖ·
if(0 == ack) return ERR;
iic_start();
iic_send_byte(0x90+1);//¶ÁÊý¾ÝµØÖ·
if(0 == ack) return ERR;
temp = iic_rcv_byte();
iic_noack(); //·¢ËÍ·ÇÓ¦´ð
iic_stop();
return temp;
}
//-------------------------------------------------------------------------------------
unsigned char DA_Write(unsigned char num)
{
iic_start();//Æô¶¯×ÜÏß
iic_send_byte(0x90);//·¢ËÍÆ÷¼þµØÖ·£¬Ð´Êý¾ÝµØÖ·
if(0 == ack) return ERR;
iic_send_byte(0x40);//·¢ËÍÆ÷¼þ×ÓµØÖ·
if(0 == ack) return ERR;
iic_send_byte(num);//·¢ËÍÊý¾Ý
if(0 == ack) return ERR;
iic_stop();
return SUCC;
}
//-------------------------------------------------------------------------------------
void lcd_dis_charge()
{
unsigned char t;
t = test * 100 / 255;
lcd_write(0x40,LCD_WRITE_COM);//°Ëλһ¸ö×Ô¶¨Ò壬´Ó0x40¿ªÊ¼£¬Ã¿¸ö+°Ëλ
lcd_write(0x0e,LCD_WRITE_DATA);
lcd_write(0x0e,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
if(t >= 100)
{
lcd_write(0x1f,LCD_WRITE_DATA);
}
else
{
lcd_write(0x11,LCD_WRITE_DATA);
}
if(t >= 75)
{
lcd_write(0x1f,LCD_WRITE_DATA);
}
else
{
lcd_write(0x11,LCD_WRITE_DATA);
}
if(t >= 50)
{
lcd_write(0x1f,LCD_WRITE_DATA);
}
else
{
lcd_write(0x11,LCD_WRITE_DATA);
}
if(t >= 25)
{
lcd_write(0x1f,LCD_WRITE_DATA);
}
else
{
lcd_write(0x11,LCD_WRITE_DATA);
}
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x80+4,LCD_WRITE_COM);
lcd_write(0x0,LCD_WRITE_DATA);//CGRAMÖÐÒ»¹²¿ÉÒ԰˸ö×Ô¶¨ÒåÄ£ÐÍ£¬Ñ¡ÔñµÚ0¸ö
}
//-------------------------------------------------------------------------------------
//ÇåÆÁ
void LCD_Clear(void)
{
lcd_write(0x01,LCD_WRITE_COM);
delay_ms(5);
}
void main()
{
unsigned char num;
lcd_init();
while(1)
{
test = AD_Read();
if(255 == test)
{
lcd_dis_char(0,0,test * 100 / 255 / 100 + 0x30);
lcd_dis_char(1,0,'0');
lcd_dis_char(2,0,'0');
lcd_dis_char(3,0,'%');
}
else
{
LCD_Clear();
lcd_dis_char(0,0,test * 100 / 255 / 10 + 0x30);
lcd_dis_char(1,0,test * 100 / 255 % 10 + 0x30);
lcd_dis_char(2,0,'%');
}
lcd_dis_charge();
lcd_dis_char(0,1,test * 100 / 255 * 5 / 100 + 0x30);
lcd_dis_char(1,1,'.');
lcd_dis_char(2,1,test * 100 / 255 * 5 / 10 % 10 + 0x30);
lcd_dis_char(3,1,test * 100 / 255 * 5 % 10 + 0x30);
lcd_dis_char(4,1,'V');
delay_ms(20);
DA_Write(num);
num++;
delay_ms(2);
}
}
#include "./delay/delay.h"
#include <stdio.h>
#include <stdlib.h>
#define ERR 0
#define SUCC 1
#define LCDPORT P0
#define LCD_WRITE_DATA 1
#define LCD_WRITE_COM 0
sbit SCL = P2^2;
sbit SDA = P2^3;
bit ack = 0;
sbit RS = P2^4;
sbit RW = P2^5;
sbit E = P2^6;
unsigned char shi = 11,fen = 22,miao = 33;
unsigned char time[3];
unsigned char test;
unsigned char flag = 0;
unsigned char buf[10];
//-------------------------------------------------------------------------------------
void lcd_write(unsigned char byte,unsigned char flag)
{
if(flag)
{
RS = LCD_WRITE_DATA;
}
else
{
RS = LCD_WRITE_COM;
}
RW = 0;
E = 1;
LCDPORT = byte;
delay_us(10);
E = 0;
}
//-------------------------------------------------------------------------------------
void lcd_dis_char(unsigned char x,unsigned char y,unsigned char byte)
{
if(y == 0)
{
lcd_write(x + 0x80,LCD_WRITE_COM);
}
else
{
lcd_write(x + 0x80 + 0x40,LCD_WRITE_COM);
}
lcd_write(byte,LCD_WRITE_DATA);
}
//-------------------------------------------------------------------------------------
void lcd_dis_str(unsigned char x,unsigned char y,unsigned char *src)
{
if(y == 1)
{
lcd_write(x + 0x80,LCD_WRITE_COM);
}
else
{
lcd_write(x + 0x80 + 0x40,LCD_WRITE_COM);
}
while(*src != '\0')
{
lcd_write(*src,LCD_WRITE_DATA);
src++;
}
}
//-------------------------------------------------------------------------------------
void lcd_init()
{
delay_ms(15);
lcd_write(0x38,LCD_WRITE_COM);
delay_ms(5);
lcd_write(0x38,LCD_WRITE_COM);
delay_ms(5);
lcd_write(0x38,LCD_WRITE_COM);
delay_ms(5);
lcd_write(0x38,LCD_WRITE_COM);
delay_ms(5);
lcd_write(0x08,LCD_WRITE_COM);
delay_ms(5);
lcd_write(0x01,LCD_WRITE_COM);
delay_ms(5);
lcd_write(0x06,LCD_WRITE_COM);
delay_ms(5);
lcd_write(0x0c,LCD_WRITE_COM);
delay_ms(5);
}
//-------------------------------------------------------------------------------------
//ÆðʼÐźÅ
void iic_start()
{
SDA = 1;
SCL = 1;
delay_us(1);//2t+12=14
SDA = 0;//ÔÚʱÖÓΪ¸ßµçƽʱ£¬ÀµÍÊý¾ÝÏߣ¬²úÉúÆðʼÐźÅ
delay_us(1);
SCL = 0;//ǯס×ÜÏß
}
//-------------------------------------------------------------------------------------
//ÖÕÖ¹ÐźÅ
void iic_stop()
{
SDA = 0;
SCL = 1;
delay_us(1);
SDA = 1;//ÔÚʱÖÓΪ¸ßµçƽʱ£¬À¸ßÊý¾ÝÏߣ¬²úÉúÍ£Ö¹ÐźÅ
delay_us(1);
SCL = 0;
}
//-------------------------------------------------------------------------------------
//дÈëÒ»¸ö×Ö½Ú
void iic_send_byte(unsigned char byte)
{
unsigned char i;
for(i = 0;i < 8;i++)
{
SDA = byte & 0x80;//д×î¸ßλÊý¾Ý SDAÊý¾Ýλ
SCL = 1; //À¸ßʱÖÓÏߣ¬½«ÊýдÈëµ½É豸ÖÐ
delay_us(1);
SCL = 0; //ÀµÍʱÖÓÏߣ¬ÔÊÐí¸Ä±äÊý¾ÝÏßµÄ״̬
byte <<= 1; //Êý¾Ýλ×óÒÆһ룬°Ñ´Î¸ßλ·ÅÔÚ×î¸ßλΪдÈë´Î¸ßλ×ö×¼±¸
}
SCL = 1;
SDA = 1;
delay_us(1);
if(0 == SDA)
{
ack = 1; //´«ÊäÕýÈ·
}
else
{
ack = 0;
}
SCL = 0;
}
//-------------------------------------------------------------------------------------
//½ÓÊÜÒ»¸ö×Ö½Ú
unsigned char iic_rcv_byte()
{
unsigned char i;
unsigned char temp = 0;
unsigned char a;
SDA = 1;
for(i = 0;i < 8;i++)
{
SCL = 0;
delay_us(1);
SCL = 1;
if(SDA)
{
a = 0x01;
}
else
{
a = 0;
}
temp |= (a << (7 - i));
delay_us(1);
}
SCL = 0;
return temp;
}
//-------------------------------------------------------------------------------------
//Ó¦´ðÐźÅ
void iic_ack()
{
SDA = 0;
SCL = 1;
delay_us(1);
SCL = 0;
}
//-------------------------------------------------------------------------------------
//·ÇÓ¦´ðÐźÅ
void iic_noack()
{
SDA = 1;
SCL = 1;
delay_us(1);
SCL = 0;
}
//-------------------------------------------------------------------------------------
unsigned char AD_Read()
{
unsigned char temp;
iic_start(); //Æô¶¯×ÜÏß
iic_send_byte(0x90);//·¢ËÍÆ÷¼þµØÖ·£¬Ð´Êý¾ÝµØÖ·
if(0 == ack) return ERR;
iic_send_byte(0x40);//·¢ËÍÆ÷¼þ×ÓµØÖ·
if(0 == ack) return ERR;
iic_start();
iic_send_byte(0x90+1);//¶ÁÊý¾ÝµØÖ·
if(0 == ack) return ERR;
temp = iic_rcv_byte();
iic_noack(); //·¢ËÍ·ÇÓ¦´ð
iic_stop();
return temp;
}
//-------------------------------------------------------------------------------------
unsigned char DA_Write(unsigned char num)
{
iic_start();//Æô¶¯×ÜÏß
iic_send_byte(0x90);//·¢ËÍÆ÷¼þµØÖ·£¬Ð´Êý¾ÝµØÖ·
if(0 == ack) return ERR;
iic_send_byte(0x40);//·¢ËÍÆ÷¼þ×ÓµØÖ·
if(0 == ack) return ERR;
iic_send_byte(num);//·¢ËÍÊý¾Ý
if(0 == ack) return ERR;
iic_stop();
return SUCC;
}
//-------------------------------------------------------------------------------------
void lcd_dis_charge()
{
unsigned char t;
t = test * 100 / 255;
lcd_write(0x40,LCD_WRITE_COM);//°Ëλһ¸ö×Ô¶¨Ò壬´Ó0x40¿ªÊ¼£¬Ã¿¸ö+°Ëλ
lcd_write(0x0e,LCD_WRITE_DATA);
lcd_write(0x0e,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
if(t >= 100)
{
lcd_write(0x1f,LCD_WRITE_DATA);
}
else
{
lcd_write(0x11,LCD_WRITE_DATA);
}
if(t >= 75)
{
lcd_write(0x1f,LCD_WRITE_DATA);
}
else
{
lcd_write(0x11,LCD_WRITE_DATA);
}
if(t >= 50)
{
lcd_write(0x1f,LCD_WRITE_DATA);
}
else
{
lcd_write(0x11,LCD_WRITE_DATA);
}
if(t >= 25)
{
lcd_write(0x1f,LCD_WRITE_DATA);
}
else
{
lcd_write(0x11,LCD_WRITE_DATA);
}
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x80+4,LCD_WRITE_COM);
lcd_write(0x0,LCD_WRITE_DATA);//CGRAMÖÐÒ»¹²¿ÉÒ԰˸ö×Ô¶¨ÒåÄ£ÐÍ£¬Ñ¡ÔñµÚ0¸ö
}
//-------------------------------------------------------------------------------------
//ÇåÆÁ
void LCD_Clear(void)
{
lcd_write(0x01,LCD_WRITE_COM);
delay_ms(5);
}
void main()
{
unsigned char num;
lcd_init();
while(1)
{
test = AD_Read();
if(255 == test)
{
lcd_dis_char(0,0,test * 100 / 255 / 100 + 0x30);
lcd_dis_char(1,0,'0');
lcd_dis_char(2,0,'0');
lcd_dis_char(3,0,'%');
}
else
{
LCD_Clear();
lcd_dis_char(0,0,test * 100 / 255 / 10 + 0x30);
lcd_dis_char(1,0,test * 100 / 255 % 10 + 0x30);
lcd_dis_char(2,0,'%');
}
lcd_dis_charge();
lcd_dis_char(0,1,test * 100 / 255 * 5 / 100 + 0x30);
lcd_dis_char(1,1,'.');
lcd_dis_char(2,1,test * 100 / 255 * 5 / 10 % 10 + 0x30);
lcd_dis_char(3,1,test * 100 / 255 * 5 % 10 + 0x30);
lcd_dis_char(4,1,'V');
delay_ms(20);
DA_Write(num);
num++;
delay_ms(2);
}
}
0 0
- 51的AD/DA(模数转换)
- AD/DA的转换
- 51单片机的AD/DA转换
- AD转换和DA转换的应用
- AD转换与DA转换的应用
- 单片机AD-DA转换
- AD/DA转换
- PCF8591 AD/DA转换
- 单片机ad/da转换
- AD/DA转换(程序)
- 51单片机STC89C52 AD模数转换
- 【AD/DA】的一些基础知识
- AD-DA——51
- 常用高速AD/DA转换芯片
- 使用PCF8951进行AD/DA转换
- 模数转换AD 实验
- AD-DA
- AD/DA
- 浅谈WebLogic和Tomcat
- 对指针引用和值传递的理解
- LeetCode 260. Single Number III 题解(C++)
- 【HDU 4217】【经典题 树状数组求前k大】 Data Structure?【n个数1-n,k次操作,每次取出第ki小的数。问所有取出数字之和。】
- Linux控制台常用命令
- 51的AD/DA(模数转换)
- jquery ajax跨域 jsonp
- TextView单击跳转、字体颜色、去掉下划线
- web方式的日志实时监控工具和文件管理器
- vim常用命令
- java线程池系列(3)-ScheduledThreadPoolExecutor
- 第二十一期 U-Boot启动OpenWrt实验 《路由器就是开发板》
- Leetcode 329. Longest Increasing Path in a Matrix[hard]
- Spring MVC(七)基于注解的文件上传