標(biāo)題:
AD轉(zhuǎn)換,單片機(jī)C程序現(xiàn)在還缺什么步驟?
[打印本頁]
作者:
vktpas
時(shí)間:
2018-1-17 10:53
標(biāo)題:
AD轉(zhuǎn)換,單片機(jī)C程序現(xiàn)在還缺什么步驟?
keshe.png
(3.34 MB, 下載次數(shù): 87)
下載附件
2018-1-17 10:52 上傳
#include <reg51.h>
#include <intrins.h> //空操作函數(shù)_nop_()必須的頭文件
#include <stdio.h>
#define uint unsigned int
#define uchar unsigned char
#ifndef __1602_H__
#define __1602_H__
sbit lcdrs=P2^0; //1602:0寫指令,1寫數(shù)據(jù)
sbit lcdwr=P2^1; //1602讀寫信號(hào)
sbit lcden=P2^2; //1602片選信號(hào)
sbit TLC549_CS = P3^1; //TLC549片選,低電平有效
sbit TLC549_DO = P3^5; //TLC549數(shù)字量輸出
sbit TLC549_CLK = P3^0; //TLC549片外獨(dú)立時(shí)鐘
sbit sta7=P0^7;
unsigned char data1_convert(unsigned char dat_temp)
{
unsigned char data1;
data1=(unsigned char)(((float)dat_temp/255)*5); //換算為電壓值的個(gè)位值
data1=data1+48; //轉(zhuǎn)換為對(duì)應(yīng)的ASCII碼,因?yàn)?對(duì)應(yīng)ASCII碼的48,以此類推
return data1;
}
unsigned char data0_convert(unsigned char dat_temp)
{
unsigned char data0,data1; data1=(unsigned char)(((float)dat_temp/255)*5); //換算為電壓值的個(gè)位值
data0=(unsigned char)((((float)dat_temp/255)*5-data1)*10);//換算為為電壓值的小--
//--數(shù)點(diǎn)后第一位的那個(gè)?
data0=data0+48;
return data0; //轉(zhuǎn)換為對(duì)應(yīng)的ASCII碼
}
void delayus(unsigned int t); //聲明 延時(shí)t個(gè)機(jī)器 周期
//**********************************
//AD轉(zhuǎn)換
//**********************************
unsigned char TLC549_read()
{
unsigned char i , temp;
TLC549_CS = 1; //關(guān)閉片選
TLC549_CLK = 0; //時(shí)鐘線拉低
TLC549_CS = 0; //打開片選
_nop_(); //空操作等待兩個(gè)機(jī)器周期待總線穩(wěn)定
_nop_();
for( i = 0; i < 8; i++ ) //循環(huán)8次讀出8位轉(zhuǎn)換結(jié)果
{
temp <<= 1;
temp |= TLC549_DO;
TLC549_CLK = 1;
_nop_();
TLC549_CLK = 0;
}
TLC549_CS = 1;
delayus(14); //TLC549轉(zhuǎn)換速度小于14微秒,大致延時(shí)14微秒等待轉(zhuǎn)換結(jié)束
return temp; //返回轉(zhuǎn)換值
}
//**********************************
//AD轉(zhuǎn)換
//**********************************
/*uint n1,ad1;
uint read_549(void)
{
uchar i,value;
TLC549_CS=0;
TLC549_CLK=0;
for(i=0;i<8;i++)
{
value=value<<1;
value|=TLC549_DO;
TLC549_CLK=1;
delayus(1);
TLC549_CLK=0;
}
TLC549_CLK=1;
delayus(2);
return value;
}
void zhh()
{
uint temp,n2;
n2=(n1/10)%10;
temp=read_549();
n1=temp*3;
if((n1/10)%10-n2==1)
{
ad1=800;
}
}
*/
/***********************1ms延時(shí)函數(shù)**********************/
void delayms(uint ms)
{
uint y;
while(ms--)
{
for(y=0;y<125;y++);
}
}
//******************判忙*********************
void lcd_busy_check(void) //1602忙信號(hào)檢測(cè),忙則等待
{
P0=0xff;
do
{
lcdrs=0; //讀狀態(tài)操作,為0
lcdwr=1; //讀操作為1
lcden=0;
lcden=1; //讀狀態(tài),需為高電平
}
while (sta7==1); //如果為1則忙,等待...直到為0
lcden=0;
}
/***********************LCD寫指令 寫數(shù)據(jù)**********************/
void LCD_write_cmd(unsigned char cmd) //液晶寫?
{
lcd_busy_check(); //每次操作之前都要進(jìn)行忙信號(hào)檢測(cè)
lcdrs=0; //執(zhí)行數(shù)據(jù)操作,為1
lcdwr=0; //寫操作,為0
P0=cmd; //送數(shù)據(jù)到液晶數(shù)據(jù)端口P0,準(zhǔn)備執(zhí)行數(shù)據(jù)操?
lcden=1; //高電平,數(shù)據(jù)送入液晶液晶數(shù)據(jù)RAM
_nop_(); //保持一會(huì)兒,使顯示數(shù)據(jù)可靠地送入液晶數(shù)據(jù)RAM
lcden=0; //低電平,顯示數(shù)據(jù)
}
void LCD_write_data(unsigned char Data) //液晶寫數(shù)據(jù)函數(shù)
{
lcd_busy_check(); //每次操作之前都要進(jìn)行忙信號(hào)檢測(cè)
lcdrs=1; //執(zhí)行數(shù)據(jù)操作,為1
lcdwr=0; //寫操作,為0
P0=Data; //送數(shù)據(jù)到液晶數(shù)據(jù)端口P0,準(zhǔn)備執(zhí)行數(shù)據(jù)操作
lcden=1; //高電平,數(shù)據(jù)送入液晶液晶數(shù)據(jù)RAM
_nop_(); //保持一會(huì)兒,使顯示數(shù)據(jù)可靠地送入液晶數(shù)據(jù)RAM
lcden=0; //低電平,顯示數(shù)據(jù)
}
/***********************LCD初始化*********************/
void LCD_init()
{
delayms(15);
LCD_write_cmd(0x38);
delayms(5);
LCD_write_cmd(0x38);//8位總線、雙行5×7點(diǎn)陣
LCD_write_cmd(0x08);
LCD_write_cmd(0x01);
LCD_write_cmd(0x06);
delayms(5);
LCD_write_cmd(0x0c);
}
/**********************主函數(shù)*********************/
void main()
{
unsigned char dat; //用于接收從8591中讀到的數(shù)據(jù)
LCD_init();
LCD_write_cmd(0x80);
LCD_write_data('C');
LCD_write_data('H');
LCD_write_data('1');
LCD_write_data(':');
LCD_write_cmd(0x85);
LCD_write_data('.');
LCD_write_cmd(0x87);
LCD_write_data('V');
while(1)
{
LCD_write_cmd(0x84); //將要顯示的字符顯示在此地址處
LCD_write_data(data1_convert(dat)); //顯示電壓的整數(shù)部分
LCD_write_cmd(0x86); //將要顯示的字符顯示在此地址處
LCD_write_data(data0_convert(dat)); //顯示電壓的小數(shù)部分
}
}
#endif
復(fù)制代碼
作者:
vktpas
時(shí)間:
2018-1-17 11:53
主要是main函數(shù)怎么寫
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1