#include <mega16.h>
#include <delay.h>
#asm
.equ __lcd_port=0x18 ;PORTB
#endasm
#include <lcd.h>
#define up PIND.0
#define down PIND.1
#define test PIND.2
unsigned char ic_num=0,i;
void test_4001(void){
lcd_clear();
lcd_gotoxy(0,0);
DDRA=0x9b;
DDRC=0x0d;
PORTA=0xff;
PORTC=0xff;
delay_ms(10);
if(!PINA.2){
lcd_putsf("G1=OK");
}
else{
lcd_putsf("G1=ER");
}
if(!PINA.5){
lcd_putsf(" G2=OK");
}
else{
lcd_putsf(" G2=ER");
}
if(!PINA.6){
lcd_putsf(" G3=OK");
}
else{
lcd_putsf(" G3=ER");
}
if(!PINC.1){
lcd_putsf(" G4=OK");
}
else{
lcd_putsf(" G4=ER");
}
}
void test_4011(void){
lcd_clear();
lcd_gotoxy(0,0);
DDRA=0xf6;
DDRC=0x06;
PORTA=0xff;
PORTC=0xff;
delay_ms(10);
if(!PINA.0){
lcd_putsf("G1=OK");
}
else{
lcd_putsf("G1=ER");
}
if(!PINA.3){
lcd_putsf(" G2=OK");
}
else{
lcd_putsf(" G2=ER");
}
if(!PINC.0){
lcd_putsf(" G3=OK");
}
else{
lcd_putsf(" G3=ER");
}
if(!PINC.3){
lcd_putsf(" G4=OK");
}
else{
lcd_putsf(" G4=ER");
}
}
void test_4010(void){
lcd_clear();
lcd_gotoxy(0,0);
DDRA=0x95;
DDRC=0x0a;
PORTA=0xff;
PORTC=0xff;
delay_ms(10);
if(!PINA.1){
lcd_putsf("G1=OK");
}
else{
lcd_putsf("G1=ER");
}
if(!PINA.3){
lcd_putsf(" G2=OK");
}
else{
lcd_putsf(" G2=ER");
}
if(!PINA.5){
lcd_putsf(" G3=OK");
}
else{
lcd_putsf(" G3=ER");
}
if(!PINA.6){
lcd_putsf(" G4=OK");
}
else{
lcd_putsf(" G4=ER");
}
if(!PINC.0){
lcd_putsf(" G5=OK");
}
else{
lcd_putsf(" G5=ER");
}
if(!PINC.2){
lcd_putsf(" G6=OK");
}
else{
lcd_putsf(" G6=ER");
}
}
void test_4023(void){
lcd_clear();
lcd_gotoxy(0,0);
DDRA=0x9b;
DDRC=0x0d;
PORTA=0xff;
PORTC=0xff;
delay_ms(10);
if(PINA.2){
lcd_putsf("G1=OK");
}
else{
lcd_putsf("G1=ER");
}
if(PINA.5){
lcd_putsf(" G2=OK");
}
else{
lcd_putsf(" G2=ER");
}
if(PINA.6){
lcd_putsf(" G3=OK");
}
else{
lcd_putsf(" G3=ER");
}
if(PINC.1){
lcd_putsf(" G4=OK");
}
else{
lcd_putsf(" G4=ER");
}
}
void test_4068(void){
lcd_clear();
lcd_gotoxy(0,0);
DDRA=0x9d;
DDRC=0x0f;
PORTA=0xff;
PORTC=0xff;
delay_ms(10);
if(!PINA.1){
lcd_putsf("G1=OK");
}
else{
lcd_putsf("G1=ER");
}
if(!PINA.5){
lcd_putsf(" G2=OK");
}
else{
lcd_putsf(" G2=ER");
}
if(!PINA.6){
lcd_putsf(" G3=OK");
}
else{
lcd_putsf(" G3=ER");
}
}
void test_4073(void){
lcd_clear();
lcd_gotoxy(0,0);
DDRA=0x9d;
DDRC=0x0f;
PORTA=0xff;
PORTC=0xff;
delay_ms(10);
if(PINA.2){
lcd_putsf("G1=OK");
}
else{
lcd_putsf("G1=ER");
}
if(PINA.5){
lcd_putsf(" G2=OK");
}
else{
lcd_putsf(" G2=ER");
}
if(PINA.6){
lcd_putsf(" G3=OK");
}
else{
lcd_putsf(" G3=ER");
}
}
void test_4082(void){
lcd_clear();
lcd_gotoxy(0,0);
DDRA=0x9b;
DDRC=0x0d;
PORTA=0xff;
PORTC=0xff;
delay_ms(10);
if(!PINA.5){
lcd_putsf("G1=OK");
}
else{
lcd_putsf("G1=ER");
}
if(!PINA.6){
lcd_putsf(" G2=OK");
}
else{
lcd_putsf(" G2=ER");
}
}
void test_4012(void){
lcd_clear();
lcd_gotoxy(0,0);
DDRA=0x9b;
DDRC=0x0d;
PORTA=0xff;
PORTC=0xff;
delay_ms(10);
if(PINA.5){
lcd_putsf("G1=OK");
}
else{
lcd_putsf("G1=ER");
}
if(PINA.6){
lcd_putsf(" G2=OK");
}
else{
lcd_putsf(" G2=ER");
}
}
void test_4093(void){
lcd_clear();
lcd_gotoxy(0,0);
DDRA=0x9b;
DDRC=0x0d;
PORTA=0x00;
PORTC=0x00;
delay_ms(10);
if(!PINA.2){
lcd_putsf("G1=OK");
}
else{
lcd_putsf("G1=ER");
}
if(!PINA.5){
lcd_putsf(" G2=OK");
}
else{
lcd_putsf(" G2=ER");
}
if(!PINA.6){
lcd_putsf(" G3=OK");
}
else{
lcd_putsf(" G3=ER");
}
if(!PINC.1){
lcd_putsf(" G4=OK");
}
else{
lcd_putsf(" G4=ER");
}
}
void num_dis(unsigned char c){
lcd_clear();
lcd_gotoxy(2,0);
switch(c){
case 1 :
lcd_putsf("IC:4001");
break;
case 2 :
lcd_putsf("IC:4010");
break;
case 3 :
lcd_putsf("IC:4011");
break;
case 4 :
lcd_putsf("IC:4012");
break;
case 5 :
lcd_putsf("IC:4023");
break;
case 6 :
lcd_putsf("IC:4068");
break;
case 7 :
lcd_putsf("IC:4073");
break;
case 8 :
lcd_putsf("IC:4082");
break;
case 9 :
lcd_putsf("IC:4093");
break;
}
}
void ic_test(unsigned char num){
switch(num){
case 1 :
test_4001();
break;
case 2 :
test_4010();
break;
case 3 :
test_4011();
break;
case 4 :
test_4012();
break;
case 5 :
test_4023();
break;
case 6 :
test_4068();
break;
case 7 :
test_4073();
break;
case 8 :
test_4082();
break;
case 9 :
test_4093();
break;
}
}
void main(void)
{
PORTA=0x00;
DDRA=0x00;
PORTB=0x00;
DDRB=0x00;
PORTC=0x00;
DDRC=0x00;
PORTD=0xff;
DDRD=0x00;
ACSR=0x80;
SFIOR=0x00;
lcd_init(16);
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("CMOS IC TESTER");
delay_ms(2000);
while (1)
{
if(up){
if(ic_num<23){
ic_num++;
num_dis(ic_num);
if(down){
if(ic_num!=1){
ic_num--;
num_dis(ic_num);
}
}
if(test){
ic_test(ic_num);
}
delay_ms(300);
};
}