gumogumo 发表于 2008-11-2 11:38:03

3310制作的示波器(转) 【恢复】

http://www.embedds.com/tag/nokia-3310-lcd/

http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_479062.jpg

 (原文件名:nokia_3310_lcd_scope_project.jpg) 



#include <reg52.h>

sbit SCE                  = P1^0;

sbit ADCDATA    = P1^1;

sbit CLK                = P1^2;                                                                                        

sbit CS                          = P1^3;                                                                        

sbit RES                  = P1^4;                                                                

sbit DC                   = P1^5;                                                                                         

sbit SDIN                 = P1^6;                                                                                

sbit SCLK                 = P1^7; 



unsigned char waveform;



char code picture[ ] =

{

0x00,0x00,0x00,0x00,0x2E,

0x2A,0x3A,0x00,0x88,0xF8,

0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x88,0xFF,         

0x00,0x00,0x00,0xC0,0x20,

0xC0,0x00,0x80,0x88,0xFF,                 

0x00,0x00,0x00,0x01,0x02,

0x01,0x00,0x00,0x88,0xFF,                 

0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x88,0xFF,                   

0x00,0x08,0x08,0x00,0x2E,

0x2A,0x3A,0x00,0x08,0x0F,                        



};

char code graph1[]={

0x08,0x00,0x00,0x00,0x00,0x00,

0x04,0x00,0x00,0x00,0x00,0x00,

0x02,0x00,0x00,0x00,0x00,0x00,

0x01,0x00,0x00,0x00,0x00,0x00,

0x00,0x80,0x00,0x00,0x00,0x00,

0x00,0x40,0x00,0x00,0x00,0x00,

0x00,0x20,0x00,0x00,0x00,0x00,

0x00,0x10,0x00,0x00,0x00,0x00,

0x00,0x08,0x00,0x00,0x00,0x00,

0x00,0x04,0x00,0x00,0x00,0x00,

0x00,0x02,0x00,0x00,0x00,0x00,

0x00,0x01,0x00,0x00,0x00,0x00,

0x00,0x00,0x80,0x00,0x00,0x00,

0x00,0x00,0x40,0x00,0x00,0x00,

0x00,0x00,0x20,0x00,0x00,0x00,

0x00,0x00,0x10,0x00,0x00,0x00,

0x00,0x00,0x08,0x00,0x00,0x00,

0x00,0x00,0x04,0x00,0x00,0x00,

0x00,0x00,0x02,0x00,0x00,0x00,

0x00,0x00,0x01,0x00,0x00,0x00,

0x00,0x00,0x00,0x80,0x00,0x00,

0x00,0x00,0x00,0x40,0x00,0x00,

0x00,0x00,0x00,0x20,0x00,0x00,

0x00,0x00,0x00,0x10,0x00,0x00,

0x00,0x00,0x00,0x08,0x00,0x00,

0x00,0x00,0x00,0x04,0x00,0x00,

0x00,0x00,0x00,0x02,0x00,0x00,

0x00,0x00,0x00,0x01,0x00,0x00,

0x00,0x00,0x00,0x00,0x80,0x00,

0x00,0x00,0x00,0x00,0x40,0x00,

0x00,0x00,0x00,0x00,0x20,0x00,

0x00,0x00,0x00,0x00,0x10,0x00,

0x00,0x00,0x00,0x00,0x08,0x00,

0x00,0x00,0x00,0x00,0x04,0x00,

0x00,0x00,0x00,0x00,0x02,0x00,

0x00,0x00,0x00,0x00,0x01,0x00,

0x00,0x00,0x00,0x00,0x00,0x80,

0x00,0x00,0x00,0x00,0x00,0x40,

0x00,0x00,0x00,0x00,0x00,0x20,

0x00,0x00,0x00,0x00,0x00,0x10,

0x00,0x00,0x00,0x00,0x00,0x08,

};



write_data(char data1);                                                

write_command(char Command);                                        

delay();                                                                                                   

initial();                                                                                                

clear_screen();                                                                                

write_picture();                                                                                

gotoxy(char x,char y);                                                                                                                  

putpoint(char a,char x);

int read_ADC(char n);

putgraph();

read_wave();

dot(char x,char y);

pg();

void main()

{   

  RES = 0;

  P1=0x3e;        

  initial();                                                                                

  clear_screen();                        

  write_picture();

  while(1)

  {

                   read_wave();

                putgraph();

  }

 

}

int read_ADC(char n)

{                                

        char i,channel;                  

        int k;

        k=0;

        CS=0;

        if(n==0) channel=0x0d;

        else channel=0x0f;



        for(i=0;i<4;i++)

        {

                CLK = 0;

                if(channel&8) ADCDATA = 1;

                else ADCDATA = 0;

                CLK = 1;

                channel <<=1;

        }

                ADCDATA = 1;

                CLK = 0;



        for(i=0;i<12;i++)

        {

                k<<=1;

                CLK=1;

                CLK=0; 

                if(ADCDATA) k|=1;

                else k&=~1;

        }

                CS = 1;

        return k&0xfff;

}

read_wave()

{

           int d;

           unsigned char t;

           for(t=0;t<73;t++)

           {

                d = read_ADC(0);

               waveform =d/103;

           }



}

putgraph()

{

         char m;

        m=0;

        while(m<73)

        {

                putpoint(waveform,m+10);        

                m++;        

        }

}

putpoint(char a,char x)

{

        char b=5;

        int c;

        c=a*6;

         while(b>=0)

        {

                gotoxy(x,b);

                write_data(graph1);

                c++;

                b--;

        }        

}



write_picture()       

{                                                                                                             

    char a,b,c,i;

        a=0;

        b=0;

        do

        {

                gotoxy(a,b);

                c=0;

                i=b*10;                                                                                                

                  do                                                                                                  

                  {

                        write_data(picture);

                        c++; 

                        i++;                                                                        

                }while(c<10);

                a=0;

                b++;

        }while(b<=5);

}

write_data(char data1)

{

  char a;



  DC =1;

  for (a=0;a<8;a++)

  {

      if(data1&0x80)

      {

          SDIN=1;

      }

      else

      {

          SDIN=0;

      }

          SCLK=1;

      SCLK=0;

      data1<<=1;

  }                                

}

write_command(char command)

{

  char a;



  DC =0;

  for (a=0;a<8;a++)

  {

      if(command&0x80)

      {

          SDIN=1;

      }

      else

      {

          SDIN=0;

      }

          SCLK=1;

      SCLK=0;

      command<<=1;

  }                                

}

initial()      

{   

  RES = 0;                        

  RES = 1;                        



  write_command(0x21);                                                                       

  write_command(0xbc);                                                                             

  write_command(0x07);                                                                            

  write_command(0x13);                                                                               

  write_command(0x20);                                                                               

  write_command(0x0c);                                                                                         

}

clear_screen()       

{  

  int  i=0;                   

    

  write_command(0x80);                                                               

  write_command(0x40);                                                                                 

                                                                                                                                          

  for(i=0;i<504;i++)                                                                                                             

  write_data(0);                                                                                                  

}



gotoxy(char x,char y)  

{  

 write_command(0x80+x);                           

 write_command(0x40+y);          

}

luojunzhou 发表于 2009-1-18 22:15:50

学习。。。。

153290557 发表于 2009-1-18 21:49:07

记号

ray0812 发表于 2009-1-10 21:38:05

顶一下吧。我就是做那种没有20M的示波器的,频带高固然好,但要钱买啊!而工具很多时候够用、合用就好。

honami520 发表于 2009-1-8 21:58:57

确实,至少20M才有实用价值!一般晶振都是20M以下的!

flyhouse 发表于 2009-1-8 21:54:35

有点意思。

zhangyidao 发表于 2009-1-8 21:23:09

没细看,不过,200k的示波器,没什么实用价值,最多看看市电。

示波器起码20M才勉强可以看看,不然跟没有差不多。

zzwuyu 发表于 2009-1-8 20:52:59

mark

elanUltra 发表于 2009-1-8 19:44:47

好强.哈哈

csformat 发表于 2008-11-2 19:58:44

很好,很强大



拿了看看的说

gumogumo 发表于 2008-11-2 12:09:29

The only thing you should take care when using 5V logic is to reduce LCD voltage to 3V level. This can be simply done by using two general purpose diodes connected in series. This provides approximately 1.4V drop.(呵呵,我不用翻译了)

网速慢的很,视频上传不上去,网站上有。

armok 发表于 2008-11-2 11:55:31

gumogumo 发表于 2008-11-2 11:54:38

我只能找到他用下面这个板子接的

http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_479100.jpg

 (原文件名:new.jpg) 

原理图

点击此处下载 ourdev_479101.pdf(文件大小:60K) (原文件名:8051sbc.pdf) 

wangjiang 发表于 2009-3-5 13:20:14

很有意思!!我去年也做了一个··是用MSP340F247做的··还得了奖的··但我还是觉得有问题··有时间交流一下嘛··

suaige 发表于 2009-3-6 13:06:34

看看!
页: [1]
查看完整版本: 3310制作的示波器(转) 【恢复】