|
51hei.png (20.46 KB, 下載次數: 76)
下載附件
2020-11-29 03:15 上傳
程序:
#include <iom16v.h> //包含型號頭文件
#include <macros.h> //包含"位"操作頭文件
#include <stdio.h>
#include <DS18B20.h>
#define uchar unsigned char
#define uint unsigned int
#define SEGLK PA3 //數碼管段選鎖存器控制端
#define BITLK PA4 //數碼管位選鎖存器控制端
#define LEDLK PA2 //LED鎖存器控制端
const SEGMENT[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,
0x7f,0x6f};
/*******************************************
函數名稱: Delayms
功 能: 延時指定毫秒(8M晶振)
參 數: MS--延時的毫秒數
返回值 : 無
********************************************/
void Delayms(uint MS)
{
uint i,j;
for( i=0;i<MS;i++)
for(j=0;j<1141;j++); //1141是在8MHz晶振下,通過軟件仿真反復實驗得到的數值
}
/*******************************************
函數名稱: Board_init
功 能: 初始化實驗板,關閉全部功能
參 數: 無
返回值 : 無
/********************************************/
void Board_init(void)
{
DDRA=0xFF; //將四個IO口全部配置為輸出
DDRB=0xFF;
DDRC=0xFF;
DDRD=0xFF;
SPCR=0x00; //還原SPI口,使其為正常端口
PORTA|=BIT(PA6);//(BEEP)關閉蜂鳴器
PORTC&=~BIT(PC6); //(RELAY)初始化繼電器為常閉連接狀態
PORTA&=~BIT(PA1); //關閉SPI總線DA
PORTB=0xFF; //關閉LED
PORTA|=BIT(LEDLK); //鎖存數據,使LED熄滅
Delayus(5);
PORTA&=~BIT(LEDLK);
PORTB=0x00; //輸出段選
PORTA|=BIT(SEGLK);
Delayus(50);
PORTA&=~BIT(SEGLK);
PORTB=0xFF; //輸出位選
PORTA|=BIT(BITLK);
Delayus(50);
PORTA&=~BIT(BITLK);
PORTD=0xFF;
PORTA|=BIT(PA7);
Delayus(50);
PORTA&=~BIT(PA7);
}
/*******************************************
函數名稱: One_smg_display
功 能: 指定的數碼管顯示指定的內容
參 數: data--顯示的內容(0-15)
number--指定的數碼管(1-6)
返回值 : 無
/********************************************/
void One_smg_display(uchar data,uchar number)
{
PORTB|=0x3F; //輸出位選
PORTA|=BIT(BITLK); //更新位選
Delayus(50); //調整時序
PORTA&=~BIT(BITLK); //鎖存位選
PORTB=SEGMENT[data]; //輸出段選
PORTA|=BIT(SEGLK); //更新段選
Delayus(50); //調整時序
PORTA&=~BIT(SEGLK); //鎖存段選
number=~BIT(number-1); //調整位選(指定時是1~6,而操作的時候是0~5)
PORTB=number; //輸出位選
PORTA|=BIT(BITLK); //更新位選
Delayus(50); //調整時序
PORTA&=~BIT(BITLK); //鎖存位選
}
/********************************************/
void uart0_init(void)
{
UCSRB = 0x00; //禁止發送
UCSRA = 0x02; //倍速
UCSRC = 0x06; //8位數據位,1個停止位
UBRRL = 0x67; //波特率為9600
UBRRH = 0x00;
UCSRB = 0x18; //允許發送
}
/********************************************************/
void uart0_send(uchar i) //發送一個字符
{
while(!(UCSRA&(1<<UDRE))); //等待發送緩沖區為空
UDR=i; //發送數據
while(!(UCSRA&(1<<TXC))); //等待發送完畢
UCSRA|=1<<TXC; //清除發送完畢狀態位
}
/*******************************************/
void str_send(char *s) //發送一串字符
{
while(*s)
{
uart0_send(*s); //字符串未結束則繼續發送
s++;
}
}
/*********************************************/
uchar uart0_receive(void) //接收一個字符
{
while(!(UCSRA&(1<<RXC)));//等待接收數據
return UDR; //返回數據
}
/*******************************************
函數名稱: main
功 能: 6個數碼管循環滾動顯示指定的內容
參 數: 無
返回值 : 無
/********************************************/
void main(void)
{ uint t=0;
uchar temh_d,teml_d,temm_d;
//uchar RDATA[3];
uart0_init();
Board_init(); //初始化開發板
while(1)
{
t=Read_temp()*0.625;//得到轉換溫度值
Delayms(2);
temh_d=t/100;
temm_d=(t/10)%10;
teml_d=t%10;
//uart0_send(temh_d+48);
//Delayms(1);
// uart0_send(temm_d+48);
//Delayms(1);
uart0_send(temh_d+48);
uart0_send(temm_d+48);
str_send(".");
uart0_send(teml_d+48);
uart0_send(32);
uart0_send(32);
uart0_send(32);
//Delayms(1);
//str_send(" ");
One_smg_display(teml_d,6);
Delayms(2);
One_smg_display(temm_d,5);
Delayms(2);
One_smg_display(temh_d,4);
Delayms(2);
}
}
|
-
-
VB上位機與18b20下位機.zip
2020-11-18 11:41 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
32.79 KB, 下載次數: 22, 下載積分: 黑幣 -5
|