HerohetoChakma
Junior Member level 3
- Joined
- Apr 19, 2013
- Messages
- 30
- Helped
- 0
- Reputation
- 0
- Reaction score
- 0
- Trophy points
- 1,286
- Location
- Chittagong, Bangladesh.
- Activity points
- 2,338
This is the program for Digital Temperature Monitoring System. When I build this code in MPLAB HITECH c compiler it is build success, but when i simulate this in protecous software is does not show any output. My circuit and program are given bellow. Could anyone help me by correcting code or problem. By this program i can measured internal temperature and can set temperature by using keypad.
#include <16f877a.h>
#include <math.h>
#include "config.h"
//===============configuration==============================
__CONFIG (0x3F32);
//===============define IO port=============================
#define lcd PORTD
#define RS RB4
#define E RB5
#define redled RB7
#define keypad PORTC
#define CHANNEL0 0b10000001
#define CHANNEL1 0b10001001
#define buzzer RB2
#define orangeled RB3
#define greenled RB0
//==============FUNCTION PTOTOTYPE=========================
void e_pulse(void);
void delay(unsigned short i);
void send_char(unsigned char data);
void send_string(const char *s);
void send_config(unsigned char data);
void lcd_goto(unsigned char data);
void lcd_clr(void);
void dis_num(unsigned long data);
void increment(unsigned long data);
void read_adc(void);
unsigned short read_temp(void);
void blink_LED1(unsigned char n);
void blink_redled(unsigned char n);
void blink_orangeled(unsigned char n);
void clearrow1(void);
void clearrow2(void);
void clearrow3(void);
void clearrow4(void);
void scancolumn1(void);
void scancolumn2(void);
void scancolumn3(void);
void scancolumn4(void);
void beep_once(void);
//====================MAIN================================
unsigned short result;
unsigned short temp;
float tempB,tempA;
unsigned char keyin[3];
unsigned char num_count=0;
void main(void)
{
ADRESH=0;
ADRESL=0;
ADCON1=0b11000000;
TRISA=0b11111111;
TRISB=0b00000000;
TRISC=0b00001111;
TRISD=0b00000000;
TRISE=0b00000000;
PORTA=0;
PORTB=0;
CCP1CON==0b00001100;
PR2=0xFF;
T2CON=0b00000101;
CCPR1L=0;
send_config(0b00000001);
send_config(0b00000010);
send_config(0b00000110);
send_config(0b00001100);
send_config(0b00111000);
lcd_clr();
delay(1000);
lcd_goto(0);
send_string("PLEASE ENTER");
lcd_goto(20);
send_string("2 DIGIT SPEC");
while(1)
{
clearrow1();
scancolumn1();
clearrow2();
scancolumn2();
clearrow3();
scancolumn3();
clearrow4();
scancolumn4();
if(num_count==2)
{
delay(8000);
lcd_goto(0);
//display character on LCD
send_char(' ');
send_char('S');
send_char('P');
send_char('E');
send_char('C');
send_char('.');
send_char('.');
send_char('=');
lcd_goto(20);
//display character on LCD
send_char(' ');
send_char('M');
send_char('E');
send_char('A');
send_char('S');
send_char('U');
send_char('R');
send_char('E');
send_char('D');
send_char('=');
while(1)
{
//keypad value
ADCON0=CHANNEL1;
lcd_goto(9);
keyin[2]=0;
tempA=(keyin[0]-0x30)*10+(keyin[1]-0x30);
dis_num((unsigned long)round(tempA));
send_char(0b11011111);
send_char('C');
send_char(' ');
send_char(' ');
//sensor B the LM35 sensor
ADCON0=CHANNEL0;
lcd_goto(31);
read_adc();
temp=read_temp();
tempB=(((float)temp)*0.48876);
dis_num((unsigned long)round(tempB));
send_char(0b11011111);
send_char('C');
send_char(' ');
send_char(' ');
if(tempB<tempA)
{
if((tempB+5)>=tempA)
{
led1=1;
blink_LED1(10);
greenled=1;
orangeled=1;
blink_orangeled(3);
redled=0;
buzzer=0;
}
else
{
led1=1;
blink_LED1(10);
greenled=1;
orangeled=0;
redled=0;
buzzer=0;
}
}
else if(tempB>tempA)
{
led1=1;
blink_LED1(3);
greenled=0;
orangeled=1;
blink_orangeled(3);
redled=1;
blink_redled(3);
buzzer=1;
beep_once();
}
delay(2000);
}
}
}
}
//=============================================================================
// Keypad scanning functions
//=============================================================================
void clearrow1(void)
{
RC7=0;
RC6=1;
RC5=1;
RC4=1;
}
void clearrow2(void)
{
RC7=1;
RC6=0;
RC5=1;
RC4=1;
}
void clearrow3(void)
{
RC7=1;
RC6=1;
RC5=0;
RC4=1;
}
void clearrow4(void)
{
RC7=1;
RC6=1;
RC5=1;
RC4=0;
}
void scancolumn1(void)
{
if(RC0==0)
{
while(RC0==0)continue;
if(num_count==0)lcd_clr();
lcd_goto(num_count);
send_char('1');
keyin[num_count]='1';
num_count+=1;
}
else if(RC1==0)
{
while(RC1==0)continue;
if(num_count==0)lcd_clr();
lcd_goto(num_count);
send_char('2');
keyin[num_count]='2';
num_count+=1;
}
else if(RC2==0)
{
while(RC2==0)continue;
if(num_count==0)lcd_clr();
lcd_goto(num_count);
send_char('3');
keyin[num_count]='3';
num_count+=1;
}
}
void scancolumn2(void)
{
if(RC0==0)
{
while(RC0==0)continue;
if(num_count==0)lcd_clr();
lcd_goto(num_count);
send_char('4');
keyin[num_count]='4';
num_count+=1;
}
else if(RC1==0)
{
while(RC1==0)continue;
if(num_count==0)lcd_clr();
lcd_goto(num_count);
send_char('5');
keyin[num_count]='5';
num_count+=1;
}
else if(RC2==0)
{
while(RC2==0)continue;
if(num_count==0)lcd_clr();
lcd_goto(num_count);
send_char('6');
keyin[num_count]='6';
num_count+=1;
}
}
void scancolumn3(void)
{
if(RC0==0)
{
while(RC0==0)continue;
if(num_count==0)lcd_clr();
lcd_goto(num_count);
send_char('7');
keyin[num_count]='7';
num_count+=1;
}
else if(RC1==0)
{
while(RC1==0)continue;
if(num_count==0)lcd_clr();
lcd_goto(num_count);
send_char('8');
keyin[num_count]='8';
num_count+=1;
}
else if(RC2==0)
{
while(RC2==0)continue;
if(num_count==0)lcd_clr();
lcd_goto(num_count);
send_char('9');
keyin[num_count]='9';
num_count+=1;
}
}
void scancolumn4(void)
{
if(RC0==0)
{
while(RC0==0)continue;
if(num_count==0)lcd_clr();
cd_goto(num_count);
send_char('*');
keyin[num_count]='*';
num_count+=1;
}
else if(RC1==0)
{
while(RC1==0)continue;
if(num_count==0)lcd_clr();
lcd_goto(num_count);
send_char('0');
keyin[num_count]='0';
num_count+=1;
}
else if(RC2==0)
{
while(RC2==0)continue;
if(num_count==0)lcd_clr();
lcd_goto(num_count);
send_char('#');
keyin[num_count]='#';
num_count+=1;
}
}
//==================subroutine LCD setting ==========================
void send_config(unsigned char data)
{
RS=0;
lcd=data;
delay(500);
e_pulse();
}
void e_pulse(void)
{
E=1;
delay(500);
E=0;
delay(500);
}
void send_char(unsigned char data)
{
RS=1;
lcd=data;
delay(500);
e_pulse();
}
void lcd_goto(unsigned char data)
{
if(data<16)
{
send_config(0x80+data);
}
else
{
data=data-20;
send_config(0xc0+data);
}
}
void lcd_clr(void)
{
RS=0;
send_config(0x01);
delay(600);
}
void send_string(const char *s)
{
unsigned char i=0;
while (s && *s)send_char (*s++);
}
void dis_num(unsigned long data)
{
unsigned char hundred_thousand;
unsigned char ten_thousand;
unsigned char thousand;
unsigned char hundred;
unsigned char tenth;
hundred_thousand = data/100000;
data = data % 100000;
ten_thousand = data/10000;
data = data % 10000;
thousand = data / 1000;
data = data % 1000;
hundred = data / 100;
data = data % 100;
tenth = data / 10;
data = data % 10;
if(hundred_thousand>0)
{
send_char(hundred_thousand + 0x30);
send_char(ten_thousand + 0x30);
send_char(thousand + 0x30);
send_char(hundred + 0x30);
send_char(tenth + 0x30);
send_char(data + 0x30);
}
else if(ten_thousand>0)
{
send_char(ten_thousand + 0x30);
send_char(thousand + 0x30);
send_char(hundred + 0x30);
send_char(tenth + 0x30);
send_char(data + 0x30);
}
else if(thousand>0)
{
send_char(thousand + 0x30);
send_char(hundred + 0x30);
send_char(tenth + 0x30);
send_char(data + 0x30);
}
else if(hundred>0)
{
send_char(hundred + 0x30);
send_char(tenth + 0x30);
send_char(data + 0x30);
}
else if(tenth>0)
{
send_char(tenth + 0x30);
send_char(data + 0x30);
}
else send_char(data + 0x30);
}
void increment(unsigned long data)
{
unsigned short j;
for(j=10;j>0;j--)
{ lcd_goto(32);
data=data+1;
dis_num(data);
delay(10000);
}
}
//==================subroutine ADC=========================
void read_adc(void)
{
unsigned short i;
unsigned long result_temp=0;
for(i=2000;i>0;i-=1)
{
ADGO = 1;
while(ADGO==1);
result=ADRESH;
result=result<<8;
result=result|ADRESL;
result_temp+=result;
}
result = result_temp/2000;
}
unsigned short read_temp(void)
{
unsigned short temp;
temp=result;
return temp;
}
//==================subroutine DELAY==========================
void delay(unsigned short i)
{
for(;i>0;i--);
}
//==================led blinking============================
void blink_LED1(unsigned char n)
{
//loop for n times
for(n+=1;n>0;n-=1)
{
//set LED1 to 1
led1=1;
//short delay
for(unsigned int i=0;i<20000;i+=1);
//set LED1 to 1
led1=0;
//short delay
for(unsigned int i=0;i<20000;i+=1);
}
}
//function to blink redled for n times
void blink_redled(unsigned char n)
{
//loop for n times
for(n+=1;n>0;n-=1)
{
//set redled to 1
redled=1;
//short delay
for(unsigned int i=0;i<20000;i+=1);
//set redled to 1
redled=0;
//short delay
for(unsigned int i=0;i<20000;i+=1);
}
}
//function to blink redled for n times
void blink_orangeled(unsigned char n)
{
//loop for n times
for(n+=1;n>0;n-=1)
{
//set redled to 1
orangeled=1;
//short delay
for(unsigned int i=0;i<20000;i+=1);
//set redled to 1
orangeled=0;
//short delay
for(unsigned int i=0;i<20000;i+=1);
}
}
//==================Buzzer Beeping============================
void beep_once(void)
{
buzzer=1;
delay(10);
buzzer=0;
delay(20);
buzzer=1;
delay(10);
buzzer=0;
}
![heto.jpg heto.jpg](https://www.edaboard.com/data/attachments/31/31533-a4b0eec155e7b7b5cde15ca36c4e7d60.jpg)
#include <16f877a.h>
#include <math.h>
#include "config.h"
//===============configuration==============================
__CONFIG (0x3F32);
//===============define IO port=============================
#define lcd PORTD
#define RS RB4
#define E RB5
#define redled RB7
#define keypad PORTC
#define CHANNEL0 0b10000001
#define CHANNEL1 0b10001001
#define buzzer RB2
#define orangeled RB3
#define greenled RB0
//==============FUNCTION PTOTOTYPE=========================
void e_pulse(void);
void delay(unsigned short i);
void send_char(unsigned char data);
void send_string(const char *s);
void send_config(unsigned char data);
void lcd_goto(unsigned char data);
void lcd_clr(void);
void dis_num(unsigned long data);
void increment(unsigned long data);
void read_adc(void);
unsigned short read_temp(void);
void blink_LED1(unsigned char n);
void blink_redled(unsigned char n);
void blink_orangeled(unsigned char n);
void clearrow1(void);
void clearrow2(void);
void clearrow3(void);
void clearrow4(void);
void scancolumn1(void);
void scancolumn2(void);
void scancolumn3(void);
void scancolumn4(void);
void beep_once(void);
//====================MAIN================================
unsigned short result;
unsigned short temp;
float tempB,tempA;
unsigned char keyin[3];
unsigned char num_count=0;
void main(void)
{
ADRESH=0;
ADRESL=0;
ADCON1=0b11000000;
TRISA=0b11111111;
TRISB=0b00000000;
TRISC=0b00001111;
TRISD=0b00000000;
TRISE=0b00000000;
PORTA=0;
PORTB=0;
CCP1CON==0b00001100;
PR2=0xFF;
T2CON=0b00000101;
CCPR1L=0;
send_config(0b00000001);
send_config(0b00000010);
send_config(0b00000110);
send_config(0b00001100);
send_config(0b00111000);
lcd_clr();
delay(1000);
lcd_goto(0);
send_string("PLEASE ENTER");
lcd_goto(20);
send_string("2 DIGIT SPEC");
while(1)
{
clearrow1();
scancolumn1();
clearrow2();
scancolumn2();
clearrow3();
scancolumn3();
clearrow4();
scancolumn4();
if(num_count==2)
{
delay(8000);
lcd_goto(0);
//display character on LCD
send_char(' ');
send_char('S');
send_char('P');
send_char('E');
send_char('C');
send_char('.');
send_char('.');
send_char('=');
lcd_goto(20);
//display character on LCD
send_char(' ');
send_char('M');
send_char('E');
send_char('A');
send_char('S');
send_char('U');
send_char('R');
send_char('E');
send_char('D');
send_char('=');
while(1)
{
//keypad value
ADCON0=CHANNEL1;
lcd_goto(9);
keyin[2]=0;
tempA=(keyin[0]-0x30)*10+(keyin[1]-0x30);
dis_num((unsigned long)round(tempA));
send_char(0b11011111);
send_char('C');
send_char(' ');
send_char(' ');
//sensor B the LM35 sensor
ADCON0=CHANNEL0;
lcd_goto(31);
read_adc();
temp=read_temp();
tempB=(((float)temp)*0.48876);
dis_num((unsigned long)round(tempB));
send_char(0b11011111);
send_char('C');
send_char(' ');
send_char(' ');
if(tempB<tempA)
{
if((tempB+5)>=tempA)
{
led1=1;
blink_LED1(10);
greenled=1;
orangeled=1;
blink_orangeled(3);
redled=0;
buzzer=0;
}
else
{
led1=1;
blink_LED1(10);
greenled=1;
orangeled=0;
redled=0;
buzzer=0;
}
}
else if(tempB>tempA)
{
led1=1;
blink_LED1(3);
greenled=0;
orangeled=1;
blink_orangeled(3);
redled=1;
blink_redled(3);
buzzer=1;
beep_once();
}
delay(2000);
}
}
}
}
//=============================================================================
// Keypad scanning functions
//=============================================================================
void clearrow1(void)
{
RC7=0;
RC6=1;
RC5=1;
RC4=1;
}
void clearrow2(void)
{
RC7=1;
RC6=0;
RC5=1;
RC4=1;
}
void clearrow3(void)
{
RC7=1;
RC6=1;
RC5=0;
RC4=1;
}
void clearrow4(void)
{
RC7=1;
RC6=1;
RC5=1;
RC4=0;
}
void scancolumn1(void)
{
if(RC0==0)
{
while(RC0==0)continue;
if(num_count==0)lcd_clr();
lcd_goto(num_count);
send_char('1');
keyin[num_count]='1';
num_count+=1;
}
else if(RC1==0)
{
while(RC1==0)continue;
if(num_count==0)lcd_clr();
lcd_goto(num_count);
send_char('2');
keyin[num_count]='2';
num_count+=1;
}
else if(RC2==0)
{
while(RC2==0)continue;
if(num_count==0)lcd_clr();
lcd_goto(num_count);
send_char('3');
keyin[num_count]='3';
num_count+=1;
}
}
void scancolumn2(void)
{
if(RC0==0)
{
while(RC0==0)continue;
if(num_count==0)lcd_clr();
lcd_goto(num_count);
send_char('4');
keyin[num_count]='4';
num_count+=1;
}
else if(RC1==0)
{
while(RC1==0)continue;
if(num_count==0)lcd_clr();
lcd_goto(num_count);
send_char('5');
keyin[num_count]='5';
num_count+=1;
}
else if(RC2==0)
{
while(RC2==0)continue;
if(num_count==0)lcd_clr();
lcd_goto(num_count);
send_char('6');
keyin[num_count]='6';
num_count+=1;
}
}
void scancolumn3(void)
{
if(RC0==0)
{
while(RC0==0)continue;
if(num_count==0)lcd_clr();
lcd_goto(num_count);
send_char('7');
keyin[num_count]='7';
num_count+=1;
}
else if(RC1==0)
{
while(RC1==0)continue;
if(num_count==0)lcd_clr();
lcd_goto(num_count);
send_char('8');
keyin[num_count]='8';
num_count+=1;
}
else if(RC2==0)
{
while(RC2==0)continue;
if(num_count==0)lcd_clr();
lcd_goto(num_count);
send_char('9');
keyin[num_count]='9';
num_count+=1;
}
}
void scancolumn4(void)
{
if(RC0==0)
{
while(RC0==0)continue;
if(num_count==0)lcd_clr();
cd_goto(num_count);
send_char('*');
keyin[num_count]='*';
num_count+=1;
}
else if(RC1==0)
{
while(RC1==0)continue;
if(num_count==0)lcd_clr();
lcd_goto(num_count);
send_char('0');
keyin[num_count]='0';
num_count+=1;
}
else if(RC2==0)
{
while(RC2==0)continue;
if(num_count==0)lcd_clr();
lcd_goto(num_count);
send_char('#');
keyin[num_count]='#';
num_count+=1;
}
}
//==================subroutine LCD setting ==========================
void send_config(unsigned char data)
{
RS=0;
lcd=data;
delay(500);
e_pulse();
}
void e_pulse(void)
{
E=1;
delay(500);
E=0;
delay(500);
}
void send_char(unsigned char data)
{
RS=1;
lcd=data;
delay(500);
e_pulse();
}
void lcd_goto(unsigned char data)
{
if(data<16)
{
send_config(0x80+data);
}
else
{
data=data-20;
send_config(0xc0+data);
}
}
void lcd_clr(void)
{
RS=0;
send_config(0x01);
delay(600);
}
void send_string(const char *s)
{
unsigned char i=0;
while (s && *s)send_char (*s++);
}
void dis_num(unsigned long data)
{
unsigned char hundred_thousand;
unsigned char ten_thousand;
unsigned char thousand;
unsigned char hundred;
unsigned char tenth;
hundred_thousand = data/100000;
data = data % 100000;
ten_thousand = data/10000;
data = data % 10000;
thousand = data / 1000;
data = data % 1000;
hundred = data / 100;
data = data % 100;
tenth = data / 10;
data = data % 10;
if(hundred_thousand>0)
{
send_char(hundred_thousand + 0x30);
send_char(ten_thousand + 0x30);
send_char(thousand + 0x30);
send_char(hundred + 0x30);
send_char(tenth + 0x30);
send_char(data + 0x30);
}
else if(ten_thousand>0)
{
send_char(ten_thousand + 0x30);
send_char(thousand + 0x30);
send_char(hundred + 0x30);
send_char(tenth + 0x30);
send_char(data + 0x30);
}
else if(thousand>0)
{
send_char(thousand + 0x30);
send_char(hundred + 0x30);
send_char(tenth + 0x30);
send_char(data + 0x30);
}
else if(hundred>0)
{
send_char(hundred + 0x30);
send_char(tenth + 0x30);
send_char(data + 0x30);
}
else if(tenth>0)
{
send_char(tenth + 0x30);
send_char(data + 0x30);
}
else send_char(data + 0x30);
}
void increment(unsigned long data)
{
unsigned short j;
for(j=10;j>0;j--)
{ lcd_goto(32);
data=data+1;
dis_num(data);
delay(10000);
}
}
//==================subroutine ADC=========================
void read_adc(void)
{
unsigned short i;
unsigned long result_temp=0;
for(i=2000;i>0;i-=1)
{
ADGO = 1;
while(ADGO==1);
result=ADRESH;
result=result<<8;
result=result|ADRESL;
result_temp+=result;
}
result = result_temp/2000;
}
unsigned short read_temp(void)
{
unsigned short temp;
temp=result;
return temp;
}
//==================subroutine DELAY==========================
void delay(unsigned short i)
{
for(;i>0;i--);
}
//==================led blinking============================
void blink_LED1(unsigned char n)
{
//loop for n times
for(n+=1;n>0;n-=1)
{
//set LED1 to 1
led1=1;
//short delay
for(unsigned int i=0;i<20000;i+=1);
//set LED1 to 1
led1=0;
//short delay
for(unsigned int i=0;i<20000;i+=1);
}
}
//function to blink redled for n times
void blink_redled(unsigned char n)
{
//loop for n times
for(n+=1;n>0;n-=1)
{
//set redled to 1
redled=1;
//short delay
for(unsigned int i=0;i<20000;i+=1);
//set redled to 1
redled=0;
//short delay
for(unsigned int i=0;i<20000;i+=1);
}
}
//function to blink redled for n times
void blink_orangeled(unsigned char n)
{
//loop for n times
for(n+=1;n>0;n-=1)
{
//set redled to 1
orangeled=1;
//short delay
for(unsigned int i=0;i<20000;i+=1);
//set redled to 1
orangeled=0;
//short delay
for(unsigned int i=0;i<20000;i+=1);
}
}
//==================Buzzer Beeping============================
void beep_once(void)
{
buzzer=1;
delay(10);
buzzer=0;
delay(20);
buzzer=1;
delay(10);
buzzer=0;
}
![heto.jpg heto.jpg](https://www.edaboard.com/data/attachments/31/31533-a4b0eec155e7b7b5cde15ca36c4e7d60.jpg)