کد:
#include <mega16a.h>
#include <delay.h>
// Graphic LCD functions
#include <glcd.h>
// Font used for displaying text
// on the graphic LCD
#include <font5x7.h>
int i,j,p,L1,L2,a2d;
int vdc1=0,vdc2=0;
int k=0;
void selectch1(void);
void selectch2(void);
void selectbothchannels(void);
void Lissajous (void);
void incvoltdiv (void);
void decvoltdiv (void);
void inctimediv (void);
void dectimediv (void);
interrupt [17] void adc(void)
{
a2d = ADCW;
p = ((a2d))/64;
for(k=0;k<=127;k++){
glcd_clrpixel(k,p);
delay_ms(5);
glcd_setpixel(k,p);
}
if (k==128){
k=0;
}
//// kelid 1
if(PINB.0 ==0){
delay_ms(20);
if(PINB.0 ==0)
selectch1();
}
/// kelid 2
if(PINB.1 ==0){
delay_ms(20);
if(PINB.1 ==0)
selectch2();
}
/// kelid 3
if(PINB.2 ==0){
delay_ms(20);
if(PINB.2 ==0)
selectbothchannels();
}
///kelid 4
if(PINB.3 ==0){
delay_ms(20);
if(PINB.3 ==0)
Lissajous();
}
//kelid 5
if(PINB.4 ==0){
delay_ms(20);
if(PINB.4 ==0)
incvoltdiv();
vdc1++;
}
// kelid 6
if(PINB.5 ==0){
delay_ms(20);
if(PINB.5 ==0)
decvoltdiv();
vdc2++;
}
/// kelid 7
if(PINB.6 ==0){
delay_ms(20);
if(PINB.6 ==0)
inctimediv();
}
/// kelid 8
if(PINB.7 ==0){
delay_ms(20);
if(PINB.7 ==0)
dectimediv();
}
}
void main(void)
{
// Declare your local variables here
// Graphic LCD initialization data
GLCDINIT_t glcd_init_data;
// Graphic LCD initialization
// The KS0108 connections are specified in the
// Project|Configure|C Compiler|Libraries|Graphic LCD menu:
// DB0 - PORTC Bit 0
// DB1 - PORTC Bit 1
// DB2 - PORTC Bit 2
// DB3 - PORTC Bit 3
// DB4 - PORTC Bit 4
// DB5 - PORTC Bit 5
// DB6 - PORTC Bit 6
// DB7 - PORTC Bit 7
// E - PORTD Bit 0
// RD /WR - PORTD Bit 1
// RS - PORTD Bit 2
// /RST - PORTD Bit 3
// CS1 - PORTD Bit 4
// CS2 - PORTD Bit 5
// Specify the current font for displaying text
glcd_init_data.font=font5x7;
// No function is used for reading
// image data from external memory
glcd_init_data.readxmem=NULL;
// No function is used for writing
// image data to external memory
glcd_init_data.writexmem=NULL;
glcd_init(&glcd_init_data);
glcd_outtextxyf(0,0,"DIGITAL OSILLOSCOPE");
glcd_outtextxyf (0,22,"BY AVR MICOCTRL");
glcd_outtextxyf (0,45,"HAMID REZA RABET" );
delay_ms(30);
glcd_clear();
ADCSRA=0xff;
SFIOR=0x00;
ADMUX=0x40;
glcd_putcharxy( 1, 56, 'v');
glcd_putcharxy( 66, 56, 't');
glcd_putcharxy( 6, 56, '=');
glcd_putcharxy( 71, 56, '=');
for (i=0;i<128;i++){
glcd_setpixel (64,i);
}
for (j=0;j<128;j++){
glcd_setpixel (j,32);
}
glcd_putcharxy( 32, 30, '|');
glcd_putcharxy( 94, 30, '|');
glcd_putcharxy( 62, 10, '_');
glcd_putcharxy( 62, 45, '_');
#asm("sei");
while (1)
{
}
}
//// entekhab kanal 1
void selectch1 (void)
{
glcd_outtextxyf (2,5,"SEL CH1");
delay_ms(30);
for(i=0;i<30;i++){
for(j=0;j<60;j++)
glcd_clrpixel(j,i);
}
ADMUX=0x00;
}
//// entekhab kanal 2
void selectch2 (void)
{
glcd_outtextxyf (2,5,"SEL CH2");
delay_ms(30);
for(i=0;i<30;i++){
for(j=0;j<60;j++)
glcd_clrpixel(j,i);
}
ADMUX=0x01;
}
/// entekhab har do kanal
void selectbothchannels (void)
{
glcd_outtextxyf (2,5,"SEL CH1&2");
delay_ms(30);
for(i=0;i<32;i++){
for(j=0;j<62;j++)
glcd_clrpixel(j,i);
}
ADMUX=0x00;
delay_ms(10);
ADMUX=0x01;
}
//// namayesh lissajous
void Lissajous (void)
{
glcd_outtextxyf (2,5,"Lissajous");
delay_ms(30);
for(i=0;i<32;i++){
for(j=0;j<62;j++)
glcd_clrpixel(j,i);
}
if(ADMUX==0x00)
L1=ADCW;
else {
if(ADMUX==0x01)
L2=ADCW ;
}
}
//// afzayesh volt division
void incvoltdiv (void)
{
glcd_outtextxyf (2,5,"incvoltdiv");
delay_ms(30);
for(i=0;i<32;i++){
for(j=0;j<62;j++)
glcd_clrpixel(j,i);
}
glcd_putcharxy( 12,55,'1');
if(vdc1==1){
glcd_putcharxy( 12,55,'2');
}
if(vdc1==2){
glcd_putcharxy( 12,55,'5');
}
else
vdc1=0;
p=p*2;
}
//// kahesh volt division
void decvoltdiv (void)
{
glcd_outtextxyf (2,5,"decvoltdiv");
delay_ms(30);
for(i=0;i<32;i++){
for(j=0;j<62;j++)
glcd_clrpixel(j,i);
}
glcd_putcharxy( 12,55,'5');
if(vdc2==2){
glcd_putcharxy( 12,55,'2');
}
if(vdc2==3){
glcd_putcharxy( 12,55,'1');
}
else
vdc2=0;
p=p/2;
}
//// afzayesh time division
void inctimediv (void)
{
glcd_outtextxyf (2,5,"inctimediv");
delay_ms(30);
for(i=0;i<32;i++){
for(j=0;j<62;j++)
glcd_clrpixel(j,i);
}
}
//// kahesh time division
void dectimediv (void)
{
glcd_outtextxyf (2,5,"dectimediv");
delay_ms(30);
for(i=0;i<32;i++){
for(j=0;j<62;j++)
glcd_clrpixel(j,i);
}
}
سوالاتی که برام پیش اومده به شرح زیرند: