📄 5x7_display_ok.c
字号:
/*****************************************************
Project :
Version :
Date : 12/29/2008
Author : HAMSA LATA
Company : RUPANAGUDI
Comments:
Chip type : ATmega8
Program type : Application
Clock frequency : 8.000000 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 256
*****************************************************/
#include <mega8.h>
#define COLUMN PORTD
#define ROW15 PORTC.0
#define ROW14 PORTC.1
#define ROW13 PORTC.2
#define ROW12 PORTC.3
#define ROW11 PORTC.4
#define ROW10 PORTB.0
#define ROW9 PORTB.1
#define ROW8 PORTB.2
#define ROW7 PORTB.3
#define ROW6 PORTB.4
#define ROW5 PORTB.5
#define ROW4 PORTB.6
#define ROW3 PORTB.7
#define ROW2 PORTC.5
#define ROW1 PORTD.7
//-----------------------------------------------------------------------
#define DIS_SPACE 36
#define DIS_STAR 37
#define REFRESH_RATE 400
#define NO_OF_CHAR 23
//1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
unsigned char DISPLAY[NO_OF_CHAR]={'*','R','U','P','A','N','A','G','U','D','I',' ','P','O','W','E','R',' ','S','Y','S','*',' '};
//------------------------------------------------------------------------
const unsigned char DIGIT_CODE[38][5] ={0X7E,0X09,0X09,0X09,0X7E, //A 1
0X7F,0X49,0X49,0X49,0X36, //B 2
0X3E,0X41,0X41,0X41,0X22, //C 3
0X7F,0X41,0X41,0X41,0X3E, //D 4
0X7F,0X49,0X49,0X41,0X41, //E 5
0X7F,0X09,0X09,0X01,0X00, //F 6
0X3E,0X41,0X49,0X49,0X3A, //G 7
0X7F,0X08,0X08,0X08,0X7F, //H 8
0X41,0X41,0X7F,0X41,0X41, //I 9
0X20,0X40,0X41,0X3F,0X01, //J 10
0X7F,0X08,0X14,0X22,0X41, //K 11
0X7F,0X40,0X40,0X40,0X00, //L 12
0X7F,0X02,0X0C,0X02,0X7F, //M 13
0X7F,0X02,0X04,0X08,0X7F, //N 14
0X3E,0X41,0X41,0X41,0X3E, //0 15
0X7F,0X09,0X09,0X09,0X06, //P 16
0X3E,0X41,0X51,0X21,0X5E, //Q 17
0X7F,0X09,0X19,0X29,0X46, //R 18
0X26,0X49,0X49,0X49,0X32, //S 19
0X01,0X01,0X7F,0X01,0X01, //T 20
0X3F,0X40,0X40,0X40,0X3F, //U 21
0X1F,0X20,0X40,0X20,0X1F, //V 22
0X7F,0X20,0X18,0X20,0X7F, //W 23
0X63,0X14,0X08,0X14,0X63, //X 24
0X03,0X04,0X78,0X04,0X03, //Y 25
0X61,0X51,0X49,0X45,0X43, //Z 26
0X3E,0X51,0X49,0X45,0X3E, //0 27
0X00,0X42,0X7F,0X40,0X00, //1 28
0X72,0X49,0X49,0X49,0X46, //2 29
0X22,0X41,0X49,0X49,0X36, //3 30
0X18,0X14,0X12,0X7F,0X10, //4 31
0X27,0X45,0X45,0X45,0X39, //5 32
0X3E,0X49,0X49,0X49,0X32, //6 33
0X01,0X71,0X09,0X05,0X03, //7 34
0X36,0X49,0X49,0X49,0X36, //8 35
0X26,0X49,0X49,0X49,0X3E, //9 36
0X00,0X00,0X00,0X00,0X00, //' ' 37
0X2A,0X1C,0X7F,0X1C,0X2A //* 38
};
unsigned char seg[15];
bit flag;
// Timer 1 overflow interrupt service routine
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{static char R_COUNT = 0,C_COUNT= 36,COUNT;
static unsigned int time = 0,DIS_COUNT = 0;;
char i = 0;
TCNT1H=0xF2;
TCNT1L=0x72;
if(++COUNT == 15)
{COUNT = 0;
}
if(time == 0)
{if(++R_COUNT == 6)
{R_COUNT = 0;
}
for(i=15;i != 0 ;i--)
{seg[i]= seg[i-1];
}
if(R_COUNT < 5)
{seg[0] = DIGIT_CODE[C_COUNT][R_COUNT];
}
if(R_COUNT == 5)
{seg[0] = 0x00;
if(++DIS_COUNT == NO_OF_CHAR)
{DIS_COUNT = 0;
}
if((DISPLAY[DIS_COUNT]<= 'Z')&&(DISPLAY[DIS_COUNT]>= 'A'))
{C_COUNT = DISPLAY[DIS_COUNT] - 65;
}
if((DISPLAY[DIS_COUNT]<= '9')&&(DISPLAY[DIS_COUNT]>= '0'))
{C_COUNT = (DISPLAY[DIS_COUNT] - 48)+26;
}
if(DISPLAY[DIS_COUNT] == ' ')
{C_COUNT = DIS_SPACE;
}
if(DISPLAY[DIS_COUNT] == '*')
{C_COUNT = DIS_STAR;
}
} // R-COUNT
} // TIME_ZERO
if(++time == REFRESH_RATE)
{time = 0;
}
PORTD = 0X00;
PORTC = 0x3F;
PORTB = 0xFF;
if(COUNT == 0)
{ROW1 = 0; //PORTB = 0x0F;
PORTD = seg[0]; //DIGIT_CODE[C_COUNT][0];
// ROW1 = 1;
}
if(COUNT == 1)
{ROW2 = 0; //PORTB = 0x17;
PORTD = seg[1]; //DIGIT_CODE[C_COUNT][1];
ROW1 = 1;
}
if(COUNT == 2)
{ROW3 = 0; // PORTB = 0x1B;
PORTD = seg[2]; //DIGIT_CODE[C_COUNT][2];
ROW1 = 1;
}
if(COUNT == 3)
{ROW4 = 0; //PORTB = 0x1D;
PORTD = seg[3]; //DIGIT_CODE[C_COUNT][3];
ROW1 = 1;
}
if(COUNT == 4)
{ROW5 = 0; // PORTB = 0X1E;
PORTD = seg[4]; //DIGIT_CODE[C_COUNT][4];
ROW1 = 1;
}
if(COUNT == 5)
{ROW6 = 0; // PORTC = 0x0F;
PORTD = seg[5]; //DIGIT_CODE[C_COUNT][5];
ROW1 = 1;
}
if(COUNT == 6)
{ROW7 = 0; //PORTC = 0x17;
PORTD = seg[6]; //DIGIT_CODE[C_COUNT][6];
ROW1 = 1;
}
if(COUNT == 7)
{ROW8 = 0; //PORTC = 0x1B;
PORTD = seg[7]; //DIGIT_CODE[C_COUNT][7];
ROW1 = 1;
}
if(COUNT == 8)
{ROW9 = 0; // PORTC = 0x1D;
PORTD = seg[8]; //DIGIT_CODE[C_COUNT][8];
ROW1 = 1;
}
if(COUNT == 9)
{ROW10 = 0; //PORTC = 0x1E;
PORTD = seg[9]; //DIGIT_CODE[C_COUNT][9];
ROW1 = 1;
}
if(COUNT == 10)
{ROW11 = 0; // PORTC = 0x0F;
PORTD = seg[10]; //DIGIT_CODE[C_COUNT][5];
ROW1 = 1;
}
if(COUNT == 11)
{ROW12 = 0; //PORTC = 0x17;
PORTD = seg[11]; //DIGIT_CODE[C_COUNT][6];
ROW1 = 1;
}
if(COUNT == 12)
{ROW13 = 0; //PORTC = 0x1B;
PORTD = seg[12]; //DIGIT_CODE[C_COUNT][7];
ROW1 = 1;
}
if(COUNT == 13)
{ROW14 = 0; // PORTC = 0x1D;
PORTD = seg[13]; //DIGIT_CODE[C_COUNT][8];
ROW1 = 1;
}
if(COUNT == 14)
{ROW15 = 0; //PORTC = 0x1E;
PORTD = seg[14]; //DIGIT_CODE[C_COUNT][9];
ROW1 = 1;
}
}
void main(void)
{
PORTB=0x00;
DDRB=0xFF;
PORTC=0x00;
DDRC=0x3F;
PORTD=0x00;
DDRD=0xFF;
TCCR0=0x00;
TCNT0=0x00;
TCCR1A=0x00;
TCCR1B=0x01;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
MCUCR=0x00;
TIMSK=0x04;
ACSR=0x80;
SFIOR=0x00;
// Global enable interrupts
#asm("sei")
while (1)
{
};
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -