久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3729|回復: 15
收起左側

快來這里,解決問題賺黑幣~~~

[復制鏈接]
ID:276150 發(fā)表于 2018-1-16 15:09 | 顯示全部樓層 |閱讀模式
大佬們好 ,我想請教 TLC549 AD轉換用1602液晶屏顯示的c語言程序,電路圖已經畫好。
想要實現(xiàn)上述功能,程序應該怎么修改
#include "reg51.h"
#define uint unsigned int
#define uchar unsigned char
#ifndef __TLC549_ADC_H__
#define __TLC549_ADC_H__
sbit lcdrs=P2^0; //
sbit lcdwr=P2^1;
sbit lcden=P2^2;
sbit CLK = P3^0;
sbit DO = P3^5;
sbit CS = P3^1;
unsigned int Volt;
unsigned char LCD[7];
unsigned char TLC549_ADC(void);
uchar    bdata ADCdata;
sbit    ADbit=ADCdata^0;
uchar code dispbuf[]="how are you?";
uchar code dispbuf1[]="I'm fine.";
void delayms(uint ms)
{
uint y;
while(ms--)
{
for(y=0;y<125;y++);
}
}

void write_comdata(uchar rs,uchar comdata)
{
lcdrs=rs;
lcdwr=0;
P0=comdata;
lcden=1;
delayms(1);
lcden=0;
}
void Data_Conversion(void)
{
unsigned char AD_Data;
AD_Data = TLC549_ADC();
Volt = 5.0 / 256 * AD_Data * 1000;
}
void Volt_To_LCD(void)
{
Data_Conversion();
LCD[0] = Volt / 1000 + '0';
LCD[1] = '.';
LCD[2] = Volt / 100 % 10 + '0';
LCD[3] = Volt / 10 % 10 + '0';
LCD[4] = Volt % 10 + '0';
LCD[5] = 'V';
LCD[6] = '\0';
}

uchar TLC549ADC(void)
{  
    uchar i;
        CS=1;   
    CLK=0;   
    DO=1;
    CS=0;
    for(i=0;i<8;i++)
    {
        CLK=1;
//                Delay_MS(5);
   
       ADbit=DO;  
           ADCdata<<=1;      
        CLK=0;
//                Delay_MS(5);
      
    }
    return (ADCdata);
}

void write_charchuan(uchar add, uchar *zfc)
{
write_comdata(0,add);
for(;*zfc!='\0';zfc++)
{
write_comdata(1,*zfc);
}
}
void lcdinitial()
{
lcden=0;
write_comdata(0,0x38);
write_comdata(0,0x0c);
write_comdata(0,0x06);
write_comdata(0,0x01);
write_comdata(0,0x80);
}
main()
{
lcdinitial();
write_charchuan(0x80,dispbuf);
write_charchuan(0x80+0x40,dispbuf1);
while(1);
1.png
回復

使用道具 舉報

ID:76227 發(fā)表于 2018-1-16 17:23 | 顯示全部樓層
你的ADC沒有轉換啊,肯定顯示不了數(shù)據(jù)的
回復

使用道具 舉報

ID:76227 發(fā)表于 2018-1-16 17:24 | 顯示全部樓層
沒有轉換ADC,顯示不了數(shù)據(jù)
回復

使用道具 舉報

ID:276150 發(fā)表于 2018-1-17 09:02 | 顯示全部樓層
905377346 發(fā)表于 2018-1-16 17:24
沒有轉換ADC,顯示不了數(shù)據(jù)

#include <reg51.h>    //包含頭文件
#include <intrins.h>   //空操作函數(shù)_nop_()必須的頭文件
#include <stdio.h>
#ifndef __1602_H__
#define __1602_H__  
sbit RS = P2^0;   //定義1602各個控制位
sbit RW = P2^1;
sbit EN = P2^2;
sbit TLC549_CS = P3^1;  //TLC549片選,低電平有效
sbit TLC549_DO = P3^5;  //TLC549數(shù)字量輸出
sbit TLC549_CLK = P3^0;  //TLC549片外獨立時鐘
//sbit led = P0^7;    //工作狀態(tài)燈,閃爍為正常
unsigned char DO, num;   //讀土壤濕度返回值、定時器計數(shù)變量
unsigned char LCD[7];
float DO_F, volt,hh;  //讀取返回值的20次累加值、最終轉換系數(shù)
bit flag=1;   //工作標志位  
unsigned char str1[] = "Volt:";
unsigned char str2[] = "   0V";
unsigned char temp[3];
void InitTimer0();  //聲明 定時器T0初始化 函數(shù)
void delayus(unsigned int t);  //聲明 延時t個機器 周期
unsigned char TLC549_read();  //聲明 TLC549讀數(shù)字量 函數(shù)  
void InitTimer0()
{     
TMOD = 0x01;   //選擇定時器T0     
TH0  = 0x4C;    //定時50毫秒     
TL0  = 0x00;     
EA   = 1;      //開總中斷      
ET0  = 1;    //開定時器T0中斷   
TR0  = 1;    //使能定時器T0
}  
void Timer0Interrupt() interrupt 1   
{     
TH0 = 0x4C;  //重裝初值      
TL0 = 0x00;  num++;   //計數(shù)變量增加1   
if(num==10)   //每500毫秒讀一次數(shù)字量   
{      //定時50毫秒,即每50毫秒進1次中斷,num加1   
num = 0;  //進10次中斷后num為10,即過了500毫秒   
flag = 1; //num清零,標志位置1   
}     
}
unsigned char TLC549_read()   
{  
unsigned char i , temp;  
TLC549_CS = 1;    //關閉片選  
TLC549_CLK = 0;    //時鐘線拉低  
TLC549_CS = 0;    //打開片選  
_nop_();  //空操作等待兩個機器周期待總線穩(wěn)定
_nop_();
for( i = 0; i < 8; i++ )  //循環(huán)8次讀出8位轉換結果
{   
temp <<= 1;   
temp |= TLC549_DO;  
TLC549_CLK = 1;
_nop_();   
TLC549_CLK = 0;
}
TLC549_CS = 1;  
delayus(14);  //TLC549轉換速度小于14微秒,大致延時14微秒等待轉換結束  
return temp; //返回轉換值
}
void delayus(unsigned int t)   //延時函數(shù),延時t個機器周期
{  
while(--t);
}
void delayus1602(unsigned char t)   
{   
  while(--t); }  
void delayms1602(unsigned char t)   //大致延時t毫秒
{        
while(t--)   
{
delayus1602(245);   
delayus1602(245);
  }
}  
void LCD_check_busy()   //判忙
{  
RS = 0;
RW = 1;  
EN = 1;
while((P0 & 0x80)==0x80);  
delayus1602(2);  
EN = 0;
}
void LCD_write_com(unsigned char com)  
{
LCD_check_busy();  
RS = 0;  
RW = 0;  
EN = 1;  
P0 = com;  
delayus1602(2);  
EN = 0;
}
void LCD_write_Data(unsigned char Data)   
{
LCD_check_busy();  
RS = 1;  
RW = 0;  
EN = 1;  
P0 = Data;  
delayus1602(2);  
EN = 0;  
}
void LCD_clear()   
{  
LCD_write_com(0x01);   
delayms1602(5);
}
void LCD_write_string(unsigned char x , unsigned char y , unsigned char *s)
//在第x行第y位寫字符串
{  
LCD_check_busy();  
if( x == 1 )  
{   
LCD_write_com(0x80 + y - 1);  
}
else if( x == 2 )  
{   
LCD_write_com(0xc0 + y - 1);  
}  
while(*s)  
{   
LCD_write_Data(*s);   
s++;
}
}
void LCD_init()  
{  
delayms1602(15);
LCD_write_com(0x38);
delayms1602(5);
LCD_write_com(0x38);//8位總線、雙行5×7點陣
LCD_write_com(0x08);
LCD_write_com(0x01);
LCD_write_com(0x06);
delayms1602(5);
LCD_write_com(0x0c);
}
void main()
{
unsigned char i;//for循環(huán)變量
InitTimer0(); //初始化定時器T0
LCD_init();  
delayus(1000);  
LCD_clear();
LCD_write_string(1, 1, str1);  
LCD_write_string(2, 1, str2);   
while(1)
{
if(flag)
  { flag=0; //標志位清零
//for(i=0,i<20,i++)
{
DO=TLC549_read();//讀     
DO_F=DO_F+DO;//累加
}
DO_F=DO_F/20.00;//累加值除20求平均   
volt=(float)(( DO_F * 5 )/256.00); // TLC549是8位A/D芯片,2的8次方是256即轉換所得數(shù)值為0-255,所以乘以基準電壓再除以精度
sprintf(temp,"%4.2f", volt);   
LCD_write_string(2,7,temp);         
//if(volt>4.5|volt<0.5)  
//led=1;
//if(volt>0.5&&volt<4.5)      
//led=0;      
  }
}


}
#endif
回復

使用道具 舉報

ID:111634 發(fā)表于 2018-1-17 11:16 | 顯示全部樓層
黑幣有什么用?能換錢嗎?
回復

使用道具 舉報

ID:276587 發(fā)表于 2018-1-17 17:03 來自手機 | 顯示全部樓層
學習了
回復

使用道具 舉報

ID:277088 發(fā)表于 2018-1-17 17:41 | 顯示全部樓層
你的ADC沒有轉換啊,肯定顯示不了數(shù)據(jù)的,yuanmayoucuowu
回復

使用道具 舉報

ID:276150 發(fā)表于 2018-1-17 22:40 | 顯示全部樓層
#include <reg51.h>
#include<intrins.h>
#include<stdio.h>
#define uint unsigned int  //預定義一下  
#define uchar unsigned char  
sbit rs=P2^0; //1602:0寫指令,1寫數(shù)據(jù)
sbit rw=P2^1; //1602讀寫信號
sbit en=P2^2; //1602片選信號
sbit TLC549_CS = P3^1;  //TLC549片選,低電平有效
sbit TLC549_DO = P3^5;  //TLC549數(shù)字量輸出
sbit TLC549_CLK = P3^0;  //TLC549片外獨立時鐘
uchar bdata ADCdata;
uchar code tabl[]={'0','1','2','3','4','5','6','7','8','9',}; //要顯示的內容1放入數(shù)組tablel  u
uchar code tab2[]={'0','1','2','3','4','5','6','7','8','9',}; //要顯示的內容1放入數(shù)組tablel  u
void delay(uint n)       //延時函數(shù)                       
{      
uint x,y;      
for(x=n;x>0;x--)         
for(y=110;y>0;y--);  
}  
void lcd_wcom(uchar com)  //1602寫命令函數(shù)                  
{      
rs=0;            //選擇指令寄存器     
rw=0;            //選擇寫     
P0=com;            //把命令字送入P2      
delay(5);            //延時一小會兒,讓1602準備接收數(shù)據(jù)      
en=1;           //使能線電平變化,命令送入1602的8位數(shù)據(jù)口      
en=0;  
}  
void lcd_wdat(uchar dat)        //1602寫數(shù)據(jù)函數(shù)      
{      
rs=1;        //選擇數(shù)據(jù)寄存器      
rw=0;        //選擇寫      
P0=dat;        //把要顯示的數(shù)據(jù)送入P2      
delay(5);        //延時一小會兒,讓1602準備接收數(shù)據(jù)      
en=1;        //使能線電平變化,數(shù)據(jù)送入1602的8位數(shù)據(jù)口      
en=0;  
}  
void lcd_init()              //1602初始化函數(shù)        
{      
lcd_wcom(0x38);       //8位數(shù)據(jù),雙列,5*7字形            
lcd_wcom(0x0c);      //開啟顯示屏,關光標,光標不閃爍      
lcd_wcom(0x06);    //顯示地址遞增,即寫一個數(shù)據(jù)后,顯示位置右移一位      
lcd_wcom(0x01);    //清屏  
}  
uchar ad549( )
{      
uchar i;   
TLC549_CLK =0;   
TLC549_DO=1;   
TLC549_CS=0;
for(i=0;i<8;i++)  
{   
TLC549_CLK=1;   
_nop_();   
_nop_();   
ADCdata<<=1;   
TLC549_CLK =0;   
ADCdata|=TLC549_DO;   
_nop_();
}  
TLC549_CS=1;  
_nop_();
_nop_();  
return (ADCdata);
}   
void main()            //主函數(shù)  
{   
uchar n,m=0;   
float num;   
int x,y,a,b,a1,b1;   
num=ad549( );
x=(int)(num/51);   
y=num/51*10;       //2.62x10=26.2   
y=(int)y-x*10;    //  26-20   
//z=(int)(num/51*10); //262   
//z=(int)(num/51*100-100*x-y*10);   
delay(5);
a1=num*13.4;
b1=num*1.34;
a=(int)(a1/51);
b=b1/51*10;
b=(int)b-a1*10;    //  26-20   
//c=(int)(a1/51*10); //262   
//c=(int)(a1/51*100-100*a-b*10);
//P3=z;
delay(20);
lcd_init();             //液晶初始化            
/*lcd_wcom(0x80);   //顯示地址設為80H                  
lcd_wdat('U');    //該處顯示字符u                     
delay(10);    //     
lcd_wcom(0x81);   //顯示地址設為81H                  
lcd_wdat('o');    //該處顯示字符o                  
delay(10);    //     
lcd_wcom(0x82);   //顯示地址設為82H                 
lcd_wdat('u');                        
delay(10);    //   
lcd_wcom(0x83);                  
lcd_wdat('t');                       
delay(10);    //   
lcd_wcom(0x84);                     
lcd_wdat('=');                        
delay(10);    //*/
lcd_wcom(0x80); //1//顯示地址設為80H(即00H,)上排第一位                    
lcd_wdat(tabl[x]);   //該處設置變量x;                  
delay(10);    //     
lcd_wcom(0x81);                  
lcd_wdat('.');                        
delay(10);    //     
lcd_wcom(0x82);                       
lcd_wdat(tabl[y]);                        
delay(10);    //     
//lcd_wcom(0x83);                     
//lcd_wdat(tabl[z]);                        
//delay(10);    //     
lcd_wcom(0x84);                     
lcd_wdat('v');                        
delay(10);    //      
lcd_wcom(0x80+0x41); //重新設定顯示地址為0xc4,即下排第5位     
lcd_wdat(tab2[a]);   //該處設置變量x;                  
delay(10);    //     
lcd_wcom(0x81+0x41);                  
lcd_wdat(tab2[b]);                        
delay(10);    //     
lcd_wcom(0x82+0x41);                       
lcd_wdat('.');                        
delay(10);    //     
lcd_wcom(0x83+0x41);                     
lcd_wdat('0');                        
delay(10);    //     
lcd_wcom(0x84+0x41);                     
lcd_wdat('c');                        
delay(10);    //  
for(n=0;n<14;n++)   //將tab2[]中的數(shù)據(jù)依次寫入1602顯示     
{                           
delay(10);      
}     
delay(1000);
}

現(xiàn)在能顯示0-5v電壓
想顯示溫度0-66℃,在算法部分怎么改,
目前最多顯示到8℃,1v以上就是十進制之外的碼,這個怎么處理
回復

使用道具 舉報

ID:276150 發(fā)表于 2018-1-17 22:58 | 顯示全部樓層
xyz 是電壓  abc是溫度
回復

使用道具 舉報

ID:276150 發(fā)表于 2018-1-17 22:59 | 顯示全部樓層
zl2168 發(fā)表于 2018-1-17 11:16
黑幣有什么用?能換錢嗎?

黑幣就是牌面,你看看你,就有牌面
回復

使用道具 舉報

ID:277205 發(fā)表于 2018-1-17 23:31 | 顯示全部樓層
我來看能賺黑幣嗎?
回復

使用道具 舉報

ID:253780 發(fā)表于 2018-1-18 07:18 | 顯示全部樓層
黑幣就是牌面,你看看你,就有牌面
回復

使用道具 舉報

ID:276794 發(fā)表于 2018-1-18 10:43 來自手機 | 顯示全部樓層
你的ADC沒有轉換啊,不轉換怎么能夠顯示啊
回復

使用道具 舉報

ID:276150 發(fā)表于 2018-1-18 16:19 | 顯示全部樓層
點評就行,反正現(xiàn)在做好了。
回復

使用道具 舉報

ID:276150 發(fā)表于 2018-1-18 16:20 | 顯示全部樓層
點評就行,反正現(xiàn)在做好了。
回復

使用道具 舉報

ID:105075 發(fā)表于 2018-1-18 23:20 | 顯示全部樓層
樓上說的對,
沒有轉換ADC,顯示不了數(shù)據(jù)。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 午夜久草| 91在线视频免费观看 | 国产精品一码二码三码在线 | 高清视频一区二区三区 | 中文字幕在线一区 | 亚洲国产成人精品一区二区 | 91久久国产综合久久 | 亚洲免费网址 | 国产精品一区二区三区在线 | 91免费视频 | 男女在线网站 | 黄色在线观看国产 | 午夜精品久久久久久久 | 欧美小视频在线观看 | 男女免费视频网站 | 一区二区三区欧美在线观看 | 国产精品777一区二区 | 一区二区三区欧美 | 欧美成人精品一区二区三区 | 一区二区三区播放 | 伊人激情网 | 久草视频在线播放 | www.午夜 | 日本黄色激情视频 | 伊人影院99| 久久中文免费视频 | 男人天堂国产 | 在线视频亚洲 | 日韩一区中文字幕 | 麻豆久久久久久久 | av一区二区三区四区 | 日本一区高清 | 日本三级精品 | av日韩在线播放 | 午夜在线视频 | 一区二区av | www.久久99 | 精品视频国产 | 天天看天天干 | 欧美精品一级 | 欧美黄色免费网站 |