Các bạn sinh viên có thể download về phát triển thêm ứng dụng:
- Mô phỏng Protues 8.6
- Code C Codevision AVR
#include <mega16.h>
#include <delay.h>
#include <stdio.h>
#define LCD_RS PORTC.2
#define LCD_RW PORTC.1
#define LCD_EN PORTC.0
#define LCD_D4 PORTB.4
#define LCD_D5 PORTB.3
#define LCD_D6 PORTB.2
#define LCD_D7 PORTB.1
#define SENSOR_DATA_IN PINC.5
#define SENSOR_DATA_OUT PORTC.5
#define SENSOR_DDR_DATA DDRC.5
unsigned int nhietdo;
unsigned char mang[20];
//----------------------------Chuong trinh doc nhiet do ------- ---------//
unsigned char reset_ds18b20(){
unsigned char result=1;
SENSOR_DATA_OUT=1;
SENSOR_DATA_OUT=0;
delay_us(480);
SENSOR_DATA_OUT=1;
SENSOR_DDR_DATA=0;
delay_us(70);
result=SENSOR_DATA_IN;
delay_us(400);
SENSOR_DDR_DATA=1;
return result;
}
void write_bit_ds18b20(unsigned char b){
SENSOR_DATA_OUT=0;
delay_us(6);
SENSOR_DATA_OUT=b;
delay_us(54);
SENSOR_DATA_OUT=1;
delay_us(10);
}
unsigned char read_bit_ds18b20(){
unsigned char result;
SENSOR_DATA_OUT=0;
delay_us(6);
SENSOR_DATA_OUT=1;
SENSOR_DDR_DATA=0;
delay_us(9);
result=SENSOR_DATA_IN;
delay_us(55);
SENSOR_DDR_DATA=1;
return result;
}
void write_byte_ds18b20(unsigned char byte){
unsigned char i;
for(i=0;i<8;i++){
write_bit_ds18b20(byte & 0x01);
byte>>=1;
}
}
unsigned char read_byte_ds18b20(){
unsigned char i, result=0;
for(i=0;i<8;i++){
result>>=1;
result|=(read_bit_ds18b20()<<7);
}
return result;
}
void int_ds18b20(){
while(reset_ds18b20());
write_byte_ds18b20(0xCC);
write_byte_ds18b20(0x44);
}
void laynhietdo()
{
unsigned char a=0;
unsigned char b=0;
SENSOR_DDR_DATA=1;
while(reset_ds18b20());
write_byte_ds18b20(0xCC);
write_byte_ds18b20(0xBE);
a=read_byte_ds18b20();
b=read_byte_ds18b20();
nhietdo=((b*256+a)>>4);
int_ds18b20();
}
void khoitaocambien()
{
int_ds18b20();
laynhietdo();
delay_ms(1000);
laynhietdo();
}
// Ham cho phep hien thi len LCD
void LCD_Enable(void)
{
LCD_EN = 1;
delay_us(3);
LCD_EN = 0;
delay_us(50);
}
// Ham gui 4 bit
void LCD_Send4Bit(unsigned char Data)
{
LCD_D4 = Data & 0x01;
LCD_D5 = (Data>>1)&1;
LCD_D6 = (Data>>2)&1;
LCD_D7 = (Data>>3)&1;
}
// Ham gui 1 Byte du lieu
void LCD_Send1Byte(unsigned char byte)
{
LCD_Send4Bit(byte >>4);/* Gui 4 bit cao */
LCD_Enable();
LCD_Send4Bit(byte); /* Gui 4 bit thap*/
LCD_Enable();
}
// Ham di chuyen con tro: row=0-1; col=0-15 (2 hang + 16 cot)
void LCD_chonvitri(unsigned char row, unsigned char col)
{
unsigned char address;
if (row == 0) address = (0x80 + col); // row=0 - hang 1
else address = (0xC0 + col); // row=1 - hang 2
delay_us(1000);
LCD_Send1Byte(address);
delay_us(50);
}
// Ham hien thi ra man hinh chuoi ki tu
void LCD_guichuoi(char *s)
{
while (*s)
{
LCD_RS=1;
LCD_Send1Byte(*s);
LCD_RS=0;
s++;
}
}
void LCD_guikitu(int s)
{
LCD_RS=1;
LCD_Send1Byte(s);
LCD_RS=0;
}
// Ham xoa man hinh
void LCD_xoamanhinh()
{
LCD_chonvitri(0,0);
LCD_guichuoi(" ");
LCD_chonvitri(1,0);
LCD_guichuoi(" ");
LCD_chonvitri(0,0);
}
// Ham khoi tao LCD
void LCD_khoitao()
{
LCD_Send4Bit(0x00);
delay_ms(20);
LCD_RS = 0;
LCD_Send4Bit(0x03); //
LCD_Enable();
delay_ms(5);
LCD_Enable();
delay_ms(100);
LCD_Enable();
LCD_Send4Bit(0x02); // dua con tro ve dau man hinh
LCD_Enable();
LCD_Send1Byte(0x28);
LCD_Send1Byte(0x0C); // Bat hien thi, bat con tro 0x0C neu muon tat con tro
LCD_Send1Byte(0x06);
LCD_xoamanhinh();
delay_ms(20);
}
void main(void)
{
PORTB=0xff;
DDRB=0xff;
PORTC=0xff; PORTC.5=0;
DDRC=0xff;
PORTD=0xff;
DDRD=0x00;
LCD_RW=0;
LCD_khoitao();
khoitaocambien();
while (1)
{
laynhietdo();
sprintf(mang,"Nhiet do:%i%cC",nhietdo,0xDF);
LCD_chonvitri(0,0);LCD_guichuoi(mang);
}
}
( Nguyên lý + Code chuẩn) Link Mediafire
Khi nhấn nút "Tải Về Máy", bạn sẽ vào trang quảng cáo, vui lòng chờ 5 giây. Nút hiện ra ở góc phải phía trên, nhấn vào để đến trang download
------------------------------------------------------------------------------------
DV1 - Nhận vẽ mạch thuê ONLINE Altium Designer/ Orcad 9.2/ Protues nhanh trong ngày
-----------------------------------------------------------------------------------
DV2 - Mua linh kiện về làm mạch nhanh - Miễn phí Ship
DV3 - Kênh youtube chia sẻ kiến thức điện tử thực hành ngay
DV4 - Kênh cộng đồng Facebook Điện Tử ChipKool
eChipKool - Chia sẻ kiến thức Kết Nối đam mê điện tử
Khi nhấn nút "Tải Về Máy", bạn sẽ vào trang quảng cáo, vui lòng chờ 5 giây. Nút hiện ra ở góc phải phía trên, nhấn vào để đến trang download
------------------------------------------------------------------------------------
DV1 - Nhận vẽ mạch thuê ONLINE Altium Designer/ Orcad 9.2/ Protues nhanh trong ngày
-----------------------------------------------------------------------------------
DV2 - Mua linh kiện về làm mạch nhanh - Miễn phí Ship
DV3 - Kênh youtube chia sẻ kiến thức điện tử thực hành ngay
DV4 - Kênh cộng đồng Facebook Điện Tử ChipKool
eChipKool - Chia sẻ kiến thức Kết Nối đam mê điện tử