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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 1627|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

完全不會(huì)單片機(jī) 東拼西湊的程序,無(wú)法顯示數(shù)據(jù),求指導(dǎo)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:769585 發(fā)表于 2020-6-10 19:01 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
#include<math.h>
#include<absacc.h>
#include<intrins.h>
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned  int
#define ulong unsigned long

#define BUSY  0x80                  //常量定義            
#define DATAPORT P0
#define ADCDELAY 5


sbit LCM_RS=P2^0;
sbit LCM_RW=P2^1;
sbit LCM_EN=P2^2;


sbit CS =P1^2;  //ADC0832 chip seclect
sbit CLK =P1^3;  //ADC0832 clock signal
sbit SDI =P1^1;  //ADC0832 k in
sbit SDO =P1^0;  //ADC0832 k out





uchar ad_data;                    //采樣值存儲(chǔ)
unsigned char press_bai=0;        //顯示值百位
unsigned char press_shi=0;        //顯示值十位
unsigned char press_ge=0;         //顯示值個(gè)位
unsigned char press_dot=0;        //顯示值十分位
uchar code str0[]={"Weight:   .   kg. "};
uchar HighRH = 0;
uchar HighRL = 0;
uchar LowRH = 0;
uchar LowRL = 0;
unsigned int a;
uchar rate;  
sbit PWMOUT = P1^0;
uchar step, rec_data,flag;
void ADCInit(void);        //初始化TLC2543
uint StartConversion(uchar channl);        //開(kāi)始轉(zhuǎn)換,同時(shí)選擇通道,同時(shí)返回上一次采樣值  
void delay(uint);                        
void lcd_wait(void);                      //檢測(cè)忙子程序
void delay_LCM(uint);                     //延時(shí)子程序
void initLCM(void);                       //初始化子程序
void WriteCommandLCM(uchar WCLCM,uchar BusyC);           //寫指令到LCM子程序      
void WriteDataLCM(uchar WDLCM);                          //寫數(shù)據(jù)到LCM子程序
void DisplayOneChar(uchar X,uchar Y,uchar DData);        //顯示指定坐標(biāo)的一個(gè)字符子函數(shù)
void DisplayListChar(uchar X,uchar Y,uchar code *DData); //顯示指定坐標(biāo)的一串字符子函數(shù)
void display(void);                                       //系統(tǒng)顯示子函數(shù)
void ConfigPWM(uchar rate);
void alarm(void);
void data_pro(void);
void ConfigPWM(uchar dc);
void key_setPWM(void);
uchar duty_cycle(uchar ad_data);


void chuankou_init();

/**********main funcation************/
void main(void)
{
         
        
    delay(50);              
    initLCM( );      
                chuankou_init();
    WriteCommandLCM(0x01,1);           //清屏顯示
    DisplayListChar(0,0,str0);
               
                delay(10);
                EA = 1;
                ConfigPWM(rate);
                while(1)
    {
                        ad_data =StartConversion(0);                 //采樣值存儲(chǔ)單元初始化為0
                        alarm();
                        data_pro();
                        
                        display();
                        
                        a=duty_cycle(ad_data);
                        ConfigPWM(a);
                        key_setPWM();
                        if(a!=rate)
                        {
                        ConfigPWM(rate);
                        }
                        
                                if(RI==1)//串口
                {
                        RI=0;
                        rec_data=SBUF;
                        step=rec_data*2;
                        SBUF=rec_data;
                }
               
                }
}

void TIME_INIT()
{
TMOD|=0X02;
IT0=1;
IT1=1;
TR1=1;
EX1=1;
EX0=1;
ET0=1;
TR0=1;
EA=1;
}
void chuankou_init()
{
SCON|=0X50;
TMOD|=0X20;
PCON|=0X80;
TH1=0XFA;
TL1=0XFA;
TR1=1;

SM0=0;
SM1=1;
REN=1;

EA=1;
ES=1;
}

/********延時(shí)K*1ms,12.000mhz**********/
void delay(uint x)
{
    uchar i;
         while(x--)
         {
                 for(i = 0;i < 120;i++)
                 {;}
         }
}   
/**********寫數(shù)據(jù)到ICM子函數(shù)************/
void WriteCommandLCM(uchar WCLCM,uchar BusyC)
{
    if(BusyC)
                        lcd_wait();          //檢測(cè)忙信號(hào)
                DATAPORT=WCLCM;
    LCM_RS=0;               
    LCM_RW=0;  
    LCM_EN=1;   
         _nop_();   
         _nop_();
         _nop_();
    LCM_EN=0;

}
/**********????LCM???************/
void WriteDataLCM(uchar WDLCM)
{
    lcd_wait( );  
                DATAPORT=WDLCM;
    LCM_RS=1;        //選中數(shù)據(jù)寄存器
    LCM_RW=0;        //寫模式
    LCM_EN=1;
    _nop_();
                 _nop_();
                 _nop_();
    LCM_EN=0;
}
/***********lcm內(nèi)部等待程序*************/
void lcd_wait(void)
{
    DATAPORT=0xff;       //讀LCD前若單片機(jī)輸出低電平,而讀出LCD為高電平,則沖突,Proteus仿真會(huì)有顯示邏輯黃色
                LCM_EN=1;
    LCM_RS=0;   
    LCM_RW=1;   
    _nop_();
    _nop_();
                _nop_();
    while(DATAPORT&BUSY)  
                {  
                        LCM_EN=0;
                        _nop_();
                        _nop_();
                        LCM_EN=1;
                        _nop_();
                        _nop_();
    }  
    LCM_EN=0;

}
/**********LCM??????***********/
void initLCM( )
{   
         DATAPORT=0;
         delay(15);
         WriteCommandLCM(0x38,0);            //三次顯示模式,不檢測(cè)忙信號(hào)
                delay(5);
    WriteCommandLCM(0x38,0);
    delay(5);
    WriteCommandLCM(0x38,0);
    delay(5);
    WriteCommandLCM(0x38,1);            //8bit數(shù)據(jù)傳送,兩行顯示,5*7字型,檢測(cè)忙信號(hào)
    WriteCommandLCM(0x08,1);            //關(guān)閉顯示,檢測(cè)忙信號(hào)
    WriteCommandLCM(0x01,1);            //清屏,檢測(cè)忙信號(hào)
    WriteCommandLCM(0x06,1);            //顯示光標(biāo)右移設(shè)置
    WriteCommandLCM(0x0c,1);            //顯示屏打開(kāi),光標(biāo)不顯示,不閃爍,檢測(cè)忙信號(hào)
}
/****??????????????****/
void DisplayOneChar(uchar X,uchar Y,uchar DData)
{
    Y&=1;
    X&=15;
    if(Y)X|=0x40;                    //若Y為1(顯示第二行)地址譯碼+0x40
    X|=0x80;                          //指令碼為地址碼+0x80
    WriteCommandLCM(X,0);
    WriteDataLCM(DData);
}
/*******??????????????*****/

void DisplayListChar(uchar X,uchar Y,uchar code *DData)
{
    uchar ListLength=0;
    Y&=0x01;
    X&=0x0f;
    while(X<16)
    {
        DisplayOneChar(X,Y,DData[ListLength]);
        ListLength++;
        X++;
    }
}
/*****************???????*****************/
void display(void)
{
                WriteCommandLCM(0x0c,1);               //顯示屏打開(kāi),光標(biāo)不顯示,不閃爍,檢測(cè)忙信號(hào)
                DisplayListChar(0,0,str0);

                DisplayOneChar(7,0,press_bai+0x30);
                DisplayOneChar(8,0,press_shi+0x30);
                DisplayOneChar(9,0,press_ge +0x30);
                DisplayOneChar(10,0,056);
    DisplayOneChar(11,0,press_dot+0x30);  
}

void Delay_ADC(uchar ms)
{
        uchar i;
        for(; ms > 0; ms--)
                for(i = 5; i > 0; i--);
}
void ADCInit(void)        //初始化TLC2543
{
        CS = 1;
        CLK = 0;
        SDI = 0;
        SDO = 1;
}
uint StartConversion(uchar channl)        //開(kāi)始轉(zhuǎn)換,同時(shí)選擇通道,同時(shí)返回上一次采樣值
{
        uint dat = 0;
        uchar i;
        CS = 0;
        SDI = 0;
        for(i = 0; i < 12; i++)        //通道選擇
        {
                dat <<= 1;        //左移一位
                if(channl & 0x80)
                        SDI = 1;
                else
                        SDI = 0;
                channl <<= 1;        //左移一位
                CLK = 1;
                if(SDO)
                        dat += 1;
                Delay_ADC(ADCDELAY);
                CLK = 0;
        }
        CS = 1;
        return dat;
}
void data_pro(void)
{
      unsigned int temp;
      float  press;      
                 
                                int vary=ad_data;      //y=(115-15)/(243-13)*X+15kpa   
                         //press=24+ad_data/2.67;
                         press=((10.0/28.1)*vary)+9.3;        //測(cè)試時(shí)補(bǔ)償值為9.3
                         temp=(int)(press*10);                 //放大10倍,便于后面計(jì)算            
                         press_bai=temp/1000;        
                         press_shi=(temp%1000)/100;   
                         press_ge=((temp%1000)%100)/10;  
                         press_dot=((temp%1000)%100)%10;
                           

}
uchar duty_cycle(uchar ad_data)
{
        uchar rate;
        
        rate= 100*ad_data/256;
  return(rate);
}

/*??????dc,??20Hz????*/
void ConfigPWM(uchar dc)
{
        unsigned long tmp;          //臨時(shí)變量
        uint high, low;
        tmp = 11059200/12/20;        //計(jì)算一個(gè)周期所需的計(jì)數(shù)值
        high = (tmp*dc)/100;         //計(jì)算高電平所需計(jì)數(shù)值
        low = tmp - high;             //計(jì)算低電平所需計(jì)數(shù)值
        high = 65536 - high + 12;    //計(jì)算高電平的定時(shí)器重載值并補(bǔ)償中斷延時(shí)
        low = 65536 - low + 12;          //計(jì)算低電平的定時(shí)器重載值并補(bǔ)償中斷延時(shí)
        HighRH = (uchar)(high >>8);      //高電平重載值拆分為高低字節(jié)
        HighRL = (uchar)high;
        LowRH = (uchar)(low >> 8);         //低電平重載值拆分為高低字節(jié)
        LowRL = (uchar)low;
        TMOD &= 0xF0;                //清0 T0的控制位
        TMOD |= 0x01;                 //配置T0的模式為 1
        TH0 = HighRH;                   //加載T0重載值
        TL0 = HighRL;                           
        ET0 = 1;                    //使能T0中斷
        TR0 = 1;                  //啟動(dòng)T0         
}
void init0() interrupt 0
{
        
        step++;
        if(step==200)
        {
                step=0;
        }
}
/*???0????*/



void init1() interrupt 2
{
        
        step--;
        if(step==0)
        {
                step=0;
        }
}

void chuankou() interrupt 4
{
        RI=0;
        rec_data=SBUF;
        step=rec_data*2;
        flag=1;
}



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:584814 發(fā)表于 2020-6-11 16:30 | 只看該作者
完全不會(huì)單片機(jī)可以學(xué),東拼西湊的程序可以調(diào),無(wú)法顯示數(shù)據(jù)可以改,但如果為論文最好上淘寶
回復(fù)

使用道具 舉報(bào)

板凳
ID:420836 發(fā)表于 2020-6-11 20:53 | 只看該作者
已經(jīng)很好地將所有內(nèi)容組合在一起。 如果仍然有問(wèn)題,可以學(xué)習(xí)一些示例。
回復(fù)

使用道具 舉報(bào)

地板
ID:436885 發(fā)表于 2020-6-12 01:21 | 只看該作者
都不知道你們想要實(shí)現(xiàn)什么目的?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日韩中文字幕一区 | 欧美精品v国产精品v日韩精品 | 激情欧美日韩一区二区 | 久久久久久久久久久一区二区 | 中文字幕av在线一二三区 | 91在线看片 | 欧美在线一区二区三区 | av网站在线播放 | 天天插天天狠天天透 | 福利影院在线看 | 一区二区日本 | 亚洲精品第一 | 久婷婷 | 99成人精品 | 欧美一区二区三区国产精品 | 羞羞网站在线观看 | 99re66在线观看精品热 | 在线观看亚洲专区 | 四虎网站在线观看 | 日韩精品在线一区 | 精品国产欧美一区二区三区不卡 | 久久av网 | 精品美女在线观看视频在线观看 | 欧美日韩高清免费 | 一区二区在线不卡 | 国产精品一区视频 | 草久在线| 日韩欧美精品在线 | 亚洲码欧美码一区二区三区 | 色久五月| 精品久久视频 | 国产精品久久一区二区三区 | 欧美一区二区三区视频在线播放 | 日韩精品一区二区三区视频播放 | 伊人狠狠干 | 在线观看av网站永久 | 久久久无码精品亚洲日韩按摩 | 亚洲精品1区2区3区 91免费看片 | 91免费观看 | 视频一区二区在线 | 日韩免费视频一区二区 |