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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1398|回復: 1
收起左側

簡易直流電壓表程序

[復制鏈接]
ID:539093 發表于 2019-5-15 19:32 | 顯示全部樓層 |閱讀模式
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
uchar LCD[6];   //電壓數據轉換成LCD1602液晶字符顯示
uint Volt;
sbit DO  = P1^0;        //時鐘
sbit CS  = P1^1;        //片選
sbit CLK = P1^2;        //數據輸出
sbit RS = P2^0;                        //1602液晶數據/命令選擇端
sbit RW = P2^1;                        //1602液晶讀寫端
sbit E  = P2^2;                        //1602液晶使能端

// Function Prototypes
void check_busy(void);
void write_command(uchar com);
void write_date(uchar date);
void LCD_init(void);
void string(uchar ad ,uchar *s);
//void lcd_test(void);
void delay(uint);
void Volt_To_LCD1602(void);
void delay_ms(uint xms);
void Data_Conversion(void);
uchar TLC549_ADC(void);
/*******************************************
    LCD1602 Driver mapped as IO peripheral
*******************************************/  
// Delay
// Delay
void delay(uint j)
{
        uchar i = 60;
  for(; j>0; j--)
  {
                while(--i);
    i = 59;
    while(--i);
    i = 60;
  }
}

// Test the Busy bit
void check_busy(void)
{
        do
  {
                P0 = 0xff;
    E = 0;
    RS = 0;
    RW = 1;
    E = 1;
    _nop_();
  } while(P0 & 0x80);
  E = 0;
}

// Write a command
void write_command(uchar com)
{
        check_busy();
  E = 0;
  RS = 0;
  RW = 0;
  P0 = com;
  E = 1;
  _nop_();
  E = 0;
  delay(1);
}

// Write Data
void write_date(uchar date)
{
        check_busy();
  E = 0;
  RS = 1;
  RW = 0;
  P0 = date;
  E = 1;
  _nop_();
  E = 0;
  delay(1);   
}

// Initialize LCD controller
void LCD_init(void)
{
        write_command(0x38); // 8-bits, 2 lines, 7x5 dots
  write_command(0x0C); // no cursor, no blink, enable display
  write_command(0x06); // auto-increment on
  write_command(0x01); // clear screen
  delay(1);
}

// Display a string
void string(uchar ad, uchar *s)
{
        write_command(ad);
  while(*s>0)
  {
                 write_date(*s++);
     delay(100);
  }
}
//****************************************************//
//函數名:delay_ms(uint xms)
//函數功能:ms級延時函數
//***************************************************//

void delay_ms(uint xms)
{
        uint x,y;
        for(x=xms;x>0;x--)
                for(y=110;y>0;y--);

}

//***************************************************//
//函數名稱:TLC549_ADC()
//函數功能:讀取上一次A/D轉換的數據,啟動下一次A/D轉換
//**************************************************//
uchar TLC549_ADC(void)
{
        uchar n, tmp;

        CS  = 1;                     //CS置高,片選無效
        CLK = 0;

        CS  = 0;                     //CS置低,片選有效,同時DO輸出高位
        _nop_();
        _nop_();                     //適當延遲時間1.4us Setup Time

        for(n = 0; n < 8; n++) //串行數據移位輸入
        {
                tmp <<= 1;
                tmp |=  DO;

                CLK = 1;        //0.4us
                _nop_();          //CLK transition time Max 0.1us
                CLK = 0;        //0.4us
        }
        CS = 1;            //CS置高,片選無效
        for(n = 17; n != 0; n--) _nop_();  //Next Coversion需要延遲17us
        return (tmp);
}
//****************************************//
//函數名稱ata_Conversion()
//函數功能:電壓換算
//*****************************************//
void Data_Conversion(void)
{
        uchar AD_Data;

        AD_Data = TLC549_ADC();
        delay_ms(1000);
        Volt = 5.0 / 256 * AD_Data*1000;
}

void Volt_To_LCD1602(void)
{
        Data_Conversion();                     //電壓換算并放大1000倍
        LCD[0] = Volt/1000;         //千位
        LCD[1] = '.';                                //小數點
        LCD[2] = Volt/100%10;  //百位
        LCD[3] = Volt/10%10;    //十位
        LCD[4] = Volt%10;           //個位
        LCD[5] = 'V';                              //字符V

        write_command(0x80+8);
        write_date(0x30+LCD[0]);
        write_date(LCD[1]);
        write_date(0x30+LCD[2]);
        write_date(0x30+LCD[3]);
        write_date(0x30+LCD[4]);
        write_date(LCD[5]);

}

int main()
{
        //uint m;
        LCD_init();

  delay(100);
  write_command(0x01);
        write_command(0x80);
        string(0x80,"Voltage:");
        delay_ms(2000);



        while(1)
        {
                Volt_To_LCD1602();

        }

}

回復

使用道具 舉報

ID:1 發表于 2019-5-15 23:09 | 顯示全部樓層
本帖需要重新編輯補全電路原理圖,源碼,詳細說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久精品| 日韩中出| 久久久久国产精品一区 | 国产一区二区在线播放 | 日韩在线欧美 | 国产91视频一区二区 | 久久曰视频 | 国产精品国产a级 | 国产高清免费视频 | 成人免费观看男女羞羞视频 | 日韩一区二区三区精品 | 国产精品免费一区二区 | 久草资源在线 | 午夜资源| 成人亚洲| 久久久久久久久久久久久久av | 成人精品一区二区三区中文字幕 | 国产高清一区二区 | 亚洲精品一区二区三区丝袜 | 一区在线观看视频 | 91久久伊人 | 国产在视频一区二区三区吞精 | 99热碰| 免费一区二区三区 | 一区二区三区免费 | 久久久久99| www.亚洲免费 | av网站免费 | 国产在线精品一区二区三区 | 欧美午夜影院 | 欧美精品一区三区 | 成人二区 | 国产在线一级片 | 成人精品鲁一区一区二区 | 天天干天天操天天射 | 日韩一级电影免费观看 | 国产福利视频网站 | 在线观看成年人视频 | 国产a区| 欧美视频福利 | 欧美激情精品久久久久久变态 |