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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1380|回復: 0
打印 上一主題 下一主題
收起左側

單片機簡單程序試試發(fā)

[復制鏈接]
跳轉到指定樓層
樓主
ID:276209 發(fā)表于 2018-1-15 15:24 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
#include <avr/io.h>
#include <util/delay.h>

//口定義
#define PORT_DHT PORTC
//口方向定義
#define DDR_DHT DDRC
//讀取口定義
#define PIN_DHT PINC
//數(shù)據(jù)位定義
#define BIT_DHT PC4


#define RS PA0 //數(shù)據(jù)/命令控制端 0命令,1 數(shù)據(jù)


#define RW PA1 //讀/寫選擇控制端 0寫,1讀



#define E PA2 //使能端 下降沿讀,高電平寫


#define                L_DHT                PORT_DHT&=~(1<<BIT_DHT)                        //數(shù)據(jù)線強制拉低


#define                H_DHT                PORT_DHT|=(1<<BIT_DHT)                                //數(shù)據(jù)線強制拉高


#define                O_DHT                DDR_DHT|=(1<<BIT_DHT)                                //Mega16控制總線,PD4為輸出


#define                P_DHT                DDR_DHT&=~(1<<BIT_DHT)                            //釋放總線,PD4為輸入


#define                I_DHT                PIN_DHT&(1<<BIT_DHT)                                //數(shù)據(jù)線的狀態(tài)


void LCDPort_Init(void); //液晶端口初始化
void LCD_Init(void); //LCD 初始化
void Write_Com(unsigned char LCD_Com); //LCD 寫指令
void Write_Data_Byte(unsigned char LCD_Data); //LCD 寫字節(jié)數(shù)據(jù)
void Write_Place_xy(unsigned char x,unsigned char y); //指定當前寫字符的位置
void Write_Data_String(unsigned char x,unsigned char y,unsigned char *data);//在指定的(x,y)位置上寫入字符串數(shù)據(jù)
void Write_Data_Char(unsigned char x,unsigned char y,unsigned char data);//在指定的(x,y)位置上寫入字符數(shù)據(jù)
void Check_Busy(void); //讀寫檢測函數(shù),每次對液晶操讀作前都要進行寫檢測
void Delayus(unsigned int lus); //us延時函數(shù)
void Delayms(unsigned int lms); //ms延時函數(shù)
/*******************************************************/
unsigned  Reset()
{
        O_DHT;
        H_DHT;
        _delay_us(2);
        L_DHT;
        _delay_us(19);
        P_DHT;
        _delay_us(20);
        if(I_DHT)
        return 0;
        else
        return 1;
}
int main(void)
{       
        _delay_ms(1000);
        unsigned char tdata[5];
        unsigned long u16Flag; // 超時計數(shù)
        unsigned char iiii;
        unsigned long u32I; // 接收數(shù)據(jù)臨時變量
        unsigned long ReceiveValue = 0; // 接收數(shù)據(jù)包變量
        unsigned long ReceiveValue1 = 0; // 接收校驗和變量
        unsigned int ReceiveHighByte; // 分解數(shù)據(jù)包 濕度
        unsigned int ReceiveLowByte; // 分解數(shù)據(jù)包溫度
        LCDPort_Init();
        LCD_Init();
        Write_Data_String(0,0,"ddddddd");
        while(1)
        if(Reset())
        {        P_DHT;
                while((!(I_DHT)) && ((u16Flag++)<50000));
                ReceiveValue = 0;
                ReceiveValue1 = 0;
                u16Flag = 0;
                while((I_DHT) && ((u16Flag++)<50000));
                for(u32I=0x80000000; u32I>0; u32I>>=1)
                {
                        u16Flag = 0;
                        while((!(I_DHT))&& ((u16Flag++)<3000));
                        u16Flag = 0;
                        _delay_us(28);
                        if(I_DHT)
                        {
                                ReceiveValue |= u32I;
                        }
                        while((I_DHT)&&((u16Flag++)<300));
                }
                for(u32I=0x80;u32I>0;u32I>>=1)
                {
                        u16Flag = 0;
                        while((!(I_DHT))&&((u16Flag++)<3000));
                        u16Flag = 0;
                        _delay_us(28);
                        if(I_DHT)
                        {
                                ReceiveValue1 |= u32I;
                        }
                        while((I_DHT)&&((u16Flag++)<300));
                }
                while(!(I_DHT));
                O_DHT;
                H_DHT;
                ReceiveLowByte =(unsigned int )( ReceiveValue&0x0000FFFF);
                ReceiveHighByte = ReceiveValue>>16;
                /****************************display******************************/
                        tdata[0]=*((unsigned char*)(&ReceiveHighByte) + 1)/10;
                      tdata[1]=*((unsigned char*)(&ReceiveHighByte) + 1)%10;
                      tdata[2]=*((unsigned char*)(&ReceiveLowByte) + 1)/10;
                        tdata[3]=*((unsigned char*)(&ReceiveLowByte) + 1)%10;
                        Write_Com(0xc0);
            Write_Data_Byte( tdata[0]+0x30 );//顯示濕度十位
                        Write_Com(0xc1);
                        Write_Data_Byte( tdata[1]+0x30 );//顯示濕度個位
                        Write_Com(0xc2);
                //        Write_Data_Byte("%");
                        Write_Com(0xc4);
                        Write_Data_Byte( tdata[2]+0x30 );//顯示溫度十位
                        Write_Com(0xc5);
                        Write_Data_Byte( tdata[3]+0x30 );//顯示溫度個位
                        Write_Com(0xc6);
                          Write_Data_Byte(0xdf);//顯示"。"
                          Write_Com(0xc7);
                          Write_Data_Byte('C');

        }
        else
        {
               
        }

}








































































void LCDPort_Init()
{
  //LCD 數(shù)據(jù)端口設置
  PORTD = 0X00; //
  DDRD = 0XFF; //配置端口PD全部為輸出口,LCD 數(shù)據(jù)端口
  //LCD 控制端口設置
  PORTA &= ~((1 << RS) | (1 << RW) | (1 << E)); //
  DDRA |= (1 << RS) | (1 << RW) | (1 << E);
}


//LCD 初始化
void LCD_Init()
{
Write_Com(0X01); //清屏
Delayms(5);
Write_Com(0X38); //顯示模式設置 16x2顯示,5x7點陣,8 位數(shù)據(jù)接口
Delayms(5);
//Write_Com(0X0f); //顯示開關控制,開顯示,光標顯示,光標閃爍
Write_Com(0X0c); //顯示開關控制,開顯示,光標不顯示,光標不閃爍
Delayms(5);
Write_Com(0X06); //光標設置,讀或寫一個字符后,地址指針加一,光標加一,整屏不移動
Delayms(5);
}


//LCD 寫指令
void Write_Com(unsigned char LCD_Com)
{
Check_Busy();
PORTA &= ~(1 << RS); //RS=0,寫命令
PORTA &= ~(1 << RW); //RW=0,寫指令
PORTA |= (1 << E); //E=1,寫操作
Delayms(1);
PORTD = LCD_Com; //指令送數(shù)據(jù)端口
PORTA &= ~(1 << E); //E=0,停止寫操作
Delayms(1);
}


//LCD 寫字節(jié)數(shù)據(jù)
void Write_Data_Byte(unsigned char LCD_Data)
{
  Check_Busy();
  PORTA |= (1 << RS); //RS=1,寫數(shù)據(jù)
  PORTA &= ~(1 << RW); //RW=0,寫指令
  PORTA |= (1 << E); //E=1,寫操作
  Delayms(1);
  PORTD = LCD_Data; // 數(shù)據(jù)送數(shù)據(jù)端口
  PORTA &= ~(1 << E); //E=0,停止寫操作
  Delayms(1);
}


//指定當前寫字符的位置
void Write_Place_xy(unsigned char x,unsigned char y)
{
  unsigned char address;
  if(y == 0) //行位置
   {
    address = 0x80 + x; //列位置,
    }
  else
   {
    address = 0x80 + 0x40 + x; //
     }
  Write_Com(address); //寫地址
}


//在指定的(x,y)位置上寫入字符串數(shù)據(jù)
void Write_Data_String(unsigned char x,unsigned char y,unsigned char *data)
{
  Write_Place_xy(x,y); //寫地址
  while(*data)
  {
   Write_Data_Byte(*data); //寫字符串
   data++; //指針地址加1
   }
}


//在指定的(x,y)位置上寫入字符數(shù)據(jù) x列位置,y行位置
void Write_Data_Char(unsigned char x,unsigned char y,unsigned char data)
{
  Write_Place_xy(x,y); //
  Write_Data_Byte(data); //
}


//讀寫檢測函數(shù),每次對液晶操作前都要進行讀寫檢測
void Check_Busy()
{
  DDRD = 0X00; //PB口置為輸入口,準備讀取數(shù)據(jù)
  PORTA &= ~(1 << RS); //RS=0,讀命令
  PORTA |= (1 << RW); //RW=1,讀指令
  PORTA |= (1 << E); //E=1,使能
  while(0X80 & PIND); //監(jiān)測忙信號,直到忙信號為0,才能進行讀寫操作
  PORTA &= ~(1 << E); //E=0
  DDRD = 0XFF; //PB口置為輸出口,準備向端口發(fā)送數(shù)據(jù)
}


//us級別的延時函數(shù)
void Delayus(unsigned int lus)
{
while(lus--)
  {
   _delay_loop_2(4); //_delay_loop_2(1)是延時4 個時鐘周期,參數(shù)為4 則延時16
    //個時鐘周期,本實驗用16M晶體,則16 個時鐘周期為16/16=1us
  }
}


//ms級別的延時函數(shù)
void Delayms(unsigned int lms)
{
  while(lms--)
  {
   Delayus(1000); //延時1ms
   }
}
















接線圖.JPG (110.2 KB, 下載次數(shù): 23)

接線圖.JPG
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久一区二区三区电影 | 免费色网址 | 天天亚洲 | 日韩精品一区二区三区中文在线 | 91精品无人区卡一卡二卡三 | 免费爱爱视频 | 精品一区二区在线观看 | 午夜欧美 | 久久精品欧美一区二区三区不卡 | 亚洲综合中文字幕在线观看 | 免费国产一区二区 | 亚洲v区 | 欧美一区二区三区视频 | 美女张开腿露出尿口 | av网站在线播放 | 91黄色免费看 | 99一区二区 | 97精品超碰一区二区三区 | 久久久久精 | 最近中文字幕在线视频1 | 国产999精品久久久影片官网 | 精品国产不卡一区二区三区 | 99视频免费在线 | 国产成人精品一区二 | 亚洲天堂av一区 | 中文字幕日韩av | 亚洲成av人片在线观看无码 | 男女精品久久 | 国产一区 在线视频 | 国产精品久久久av | 欧美一区二区三区在线观看视频 | 91精品国产欧美一区二区 | 黄色片免费看 | 香蕉视频一区二区 | 国产精品地址 | 国产 日韩 欧美 制服 另类 | 亚洲精品久久久久久国产精华液 | 国产aⅴ爽av久久久久久久 | 一区二区成人 | 亚洲一级毛片 | 91视频在线观看 |