因为要弄个比较特殊的频率发生器,而且要求实时显示输出状态, 第一时间就想到了arduino。 和朋友讨论后,朋友说很简单, 然后写了一段程序,程序如下。
- float ontime =100;
- float bps =50;
- float offtime =(1000000.0/bps)-ontime;
- int time=0;
- unsigned long currentMicros;
- long previousMicros = 0;
- int i=1;
- void setup(){
- pinMode(3,OUTPUT);//out put
- pinMode(9,INPUT);// input +ontime
- pinMode(8,INPUT);// input -ontime
- pinMode(10,INPUT);// input +bps
- pinMode(11,INPUT);// input -bps
- }
- void loop()
- {
- if(digitalRead(9)==LOW)
- {
- if(ontime<750)
- {
- ontime=ontime+0.1;
- offtime =(1000000.0/bps)-ontime;
- }
- }
-
- if(digitalRead(8)==LOW)
- {
- if(ontime>10)
- {
- ontime=ontime-0.1;
- offtime =(1000000.0/bps)-ontime;
- }
- }
-
- if(digitalRead(10)==LOW)
- {
- if(bps<1000)
- {
- bps=bps+0.05;
- offtime =(1000000.0/bps)-ontime;
- }
- }
-
- if(digitalRead(11)==LOW)
- {
- if(bps>10)
- {
- bps=bps-0.05;
- offtime =(1000000.0/bps)-ontime;
- }
- }
-
- currentMicros = micros();//read present time
- time = currentMicros - previousMicros;
-
- if(i==1)
- {
- if(time>ontime)
- {
- previousMicros = currentMicros;//clean time difference
- time=0;
- turnoff();
- i=0;
- }
- }
-
- if(i==0)
- {
- if(time>offtime)
- {
- previousMicros = currentMicros;//clean time difference
- time=0;
- turnon();
- i=1;
- }
- }
- }
- void turnon()
- {
- digitalWrite(3,HIGH);
- }
- void turnoff()
- {
- digitalWrite(3,LOW);
- }
复制代码
烧上去,的确能用了。 输出达到要求。
但是还差显示呢。。。
我自己弄了U8G的库 , 然后写好开机画面, 显示的内容。
然后,程序变成了这样。
- #include <U8glib.h>
- U8GLIB_ST7920_128X64_4X u8g(A0, 13, 12);
- int hold=0;
- float ontime =100;
- float bps =10;
- float offtime =(1000000.0/bps)-ontime;
- float duty =ontime/(1000000.0/bps)*100;
- int time=0;
- unsigned long currentMicros;
- long previousMicros = 0;
- int i=1;
- int output=3;
- int key_oadd=9;
- int key_osub=8;
- int key_badd=10;
- int key_bsub=11;
- const uint8_t L[] PROGMEM = {
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFD,0xF4,0x71,0x74,0x22,0x18,0x83,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x45,0xEF,0x75,0xF6,0xD3,0xEF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x44,0x4F,0x75,0xF6,0x99,0xEF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x45,0xCF,0x04,0x76,0x3C,0xEF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x45,0xEF,0x75,0xF6,0x9E,0x6F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x44,0x71,0x75,0xE2,0xD8,0xEF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x40,0x12,0x00,0x87,0x00,0x80,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,
- 0x44,0x00,0x02,0x00,0x82,0x00,0x80,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x42,0x47,0x97,0xB8,0x82,0x59,0xE6,0x2A,0xA2,0x59,0xC6,0x28,0x00,0x00,0x00,0x00,0x42,0x48,0x92,0x04,0x82,0x64,0x89,0x33,0x22,0x64,0x89,0x30,0x00,0x00,0x00,0x00,0x42,0x48,0x92,0x1C,0x82,0x44,0x8F,0x22,0x22,0x44,0x8F,0x20,0x00,0x00,0x00,0x00,
- 0x42,0x48,0x92,0x24,0x82,0x44,0x88,0x22,0x22,0x44,0x88,0x20,0x00,0x00,0x00,0x00,0x44,0x49,0x92,0x24,0x82,0x44,0x88,0x22,0x26,0x44,0x88,0x20,0x00,0x00,0x00,0x00,0x78,0x46,0x91,0x9C,0x87,0x44,0x67,0x22,0x1A,0x78,0x67,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- };
- void draw( )
- {
- u8g.drawStr(0,12,"Digital interrupter");
- u8g.drawLine(0,20,76,20); u8g.drawLine(0,21,76,21);
- u8g.drawLine(77,19,101,7); u8g.drawLine(77,20,101,8);
- u8g.drawLine(102,7,127,7); u8g.drawLine(102,8,127,8);
- u8g.drawStr(6,30,"bps:");
- u8g.setPrintPos( 85, 30);
- u8g.print(bps);
- u8g.drawStr(6,45,"ontime:");
- u8g.drawStr(118,45,"us");
- u8g.setPrintPos( 85, 45);
- u8g.print(ontime);
- u8g.drawStr(6,60,"duty");
- u8g.drawStr(28,60,"cycle:");
- u8g.drawStr(118,60,"%");
- u8g.setPrintPos( 85, 60);
- u8g.print(duty);
-
- }
- void turnon()
- {
- digitalWrite(output,HIGH);
- }
- void turnoff()
- {
- digitalWrite(output,LOW);
- }
- void setup(){
- pinMode(output,OUTPUT);//out put
- pinMode(key_oadd,INPUT);// input +ontime
- pinMode(key_osub,INPUT);// input -ontime
- pinMode(key_badd,INPUT);// input +bps
- pinMode(key_bsub,INPUT);// input -bps
- u8g.setFont(u8g_font_5x7);
- u8g.firstPage();
- do {
- u8g.drawBitmapP( 0, 0, 16, 64, L);
- }
- while( u8g.nextPage() );
- delay(5000);
- }
- void loop()
- {
- if(digitalRead(key_oadd)==LOW)
- {
- if(ontime<750)
- {ontime=ontime+0.05;
- offtime =(1000000.0/bps)-ontime;
- duty =ontime/(1000000.0/bps)*100;//refresh
- }
- }
-
- if(digitalRead(key_osub)==LOW)
- {
- if(ontime>10)
- {ontime=ontime-0.05;
- offtime =(1000000.0/bps)-ontime;
- duty =ontime/(1000000.0/bps)*100;//refresh
- }
- }
-
- if(digitalRead(key_badd)==LOW)
- {
- if(bps<1000)
- {bps=bps+0.05;
- offtime =(1000000.0/bps)-ontime;
- duty =ontime/(1000000.0/bps)*100;//refresh
- }
- }
-
- if(digitalRead(key_bsub)==LOW)
- {
- if(bps>10)
- {bps=bps-0.05;
- offtime =(1000000.0/bps)-ontime;
- duty =ontime/(1000000.0/bps)*100;//refresh
- }
- }
-
- currentMicros = micros();//read present time
- time = currentMicros - previousMicros;
-
- if(i==1)
- {
- if(time>ontime)
- {
- previousMicros = currentMicros;//clean time difference
- time=0;
- turnoff();
- i=0;
- }
- }
-
- if(i==0)
- {
- if(time>offtime)
- {
- previousMicros = currentMicros;//clean time difference
- time=0;
- turnon();
- i=1;
- }
- }
- if(hold==0)
- {
- u8g.firstPage( );
- do
- {
- draw( );
- }
- while( u8g.nextPage( ));
- }
- }
复制代码
然后,做出来效果是这样,
虽然显示是正常了,可是输出完全不是这么一回事(无输出? 或者各种奇怪的输出。。。)。。。
朋友说是要加上中断了,不然12864的刷新会影响输出。。。
大神求救\("▔□▔)/!!! |