⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 evido.c

📁 在atmega16用端口模拟电视视频信号输出
💻 C
📖 第 1 页 / 共 4 页
字号:

//atmega16-16pi 

//12Mhz 

//C.1 is sync:1000 ohm + diode to 75 ohm resistor 

//C.0 is video:330 ohm + diode to 75 ohm resistor 

//无隔直电容 

#include <iom16v.h> 

#include <macros.h> 

#define uchar unsigned char 

#define uint unsigned int 

#include "vini.h" 

#define led_run;      DDRD|=(1<<6);PORTD^=(1<<6);   //VIOED LED 



uchar syncON, syncOFF;                  //行同步 

uchar v1, v2, v3, v4, v5, v6, v7, v8;      //显示行数据 

uint i,LineCount; 

uchar framecount;                     //帧计数 

uchar flashcount;                     //画面计数 

uchar screen[800];                     //画面缓存 



#define lineTime 767                   //1行=1000000/25/625 US *12MHZ-1 

#define ScreenTop 40                  //定义显示区域顶行 

#define ScreenBot 240                  //定义显示区域底行 



#pragma interrupt_handler t1_cmpA:7 

void t1_cmpA(void)               //行同步中断 

{ 

   PORTC = syncON;               //开始Horizontal同步脉宽 

   //TCNT0=0;                  //ct0 at 1/usec??!! 

   LineCount ++ ;               //行计数 

   if (LineCount==298)            //开始反 synch after line 297 

   { 

      syncON = B00000010;         //同步=1 

      syncOFF = 0;            //同步=0 

   } 

   if (LineCount==301)            //back to regular sync after line 300 

   { 

      syncON = 0;               //同步=0 

      syncOFF = B00000010;      //同步=1 

   } 

   if (LineCount>=313) //start new frame after line 262 

   { 

      LineCount = 1; 

      framecount++; 

   } 

   //END sync pulse 

   PORTC = syncOFF; 

} 



void main(void) 

{ 

   CLI(); 

   delay100ms(); 

    watchdog(); 

    PORTA = 0xff; 

    DDRA = 0x00; 

    PORTB = 0xff; 

    DDRB = 0x00; 

    PORTD = 0xBf;      //LED 

    DDRD = 0x40; 

    PORTC = 0xFC; 

    DDRC = 0x03;      //video out and switches     

   //init timer 1 to generate sync 

   OCR1A = lineTime;    //One NTSC line(507) 

   TCCR1B = 9;       //全速; match ATC1-清零 

   TCCR1A = 0x00;      //关闭 pwm and oc lines wgm:0100 

   TIMSK = 0x10;      //enable interrupt 

   //init ports 

   //init timer 0 to 1/uSec  (8分频)??? 

   TCCR0 = 2; 

   //初始化同步行计数、 

   LineCount = 1; 

   framecount=0; 

   flashcount=0; 

   syncON = B00000000;//同步=0 

   syncOFF = B00000010;  //同步=1 

   //initialize画面缓存 

    for (i=0;i<=799;i=i+1) 

    {screen[i]=zk1[0][i];} 

    watchdog(); 

   MCUCR = B01000000;//sleep? 

    SEI();//开中断 

   while(1) 

   { 

      //precompute pixel index for next line 

      if ((LineCount<ScreenBot) && (LineCount>=ScreenTop)) 

      { 

         //left-shift 3 would be individual lines 

         // <<2 means line-double the pixels 

         //<<2使2行像素显示相同的信息 

         i=(LineCount-ScreenTop)<<2 & 0xfff8; //(0-199)<<2 

      } 

      //stall here until next line starts 

      //sleep enable; mode=idle 

      //使用休眠使进入同步中断入口时间统一 

      watchdog(); 

      MCUCR = B01000000;//sleep? 

      asm ("sleep"); //休眠 

      led_run; 

      //Put code here to execute once/line 

      //During the active portion of a line; 

      //--TCNT1 goes from about 130 to about 480 

      //--Usable lines 1 to about 240 

      //注意:以下代码每行执行一次,且时序严格,视频间隔相同 

      if ((LineCount<ScreenBot) && (LineCount>ScreenTop)) 

      { 

         //load the pixels into registers 

         v1 = screen[i]; 

         v2 = screen[i+1]; 

         v3 = screen[i+2]; 

         v4 = screen[i+3]; 

         v5 = screen[i+4]; 

         v6 = screen[i+5]; 

         v7 = screen[i+6]; 

         v8 = screen[i+7]; 

         screen_disp(); 

      } 

      //画面缓存刷新 

      if (framecount>=100) 

      { 

         framecount=0; 

         flashcount++; 

         if(flashcount>=9){flashcount=0;} 

         for (i=0;i<=799;i=i+1) 

          { 

            screen[i]=zk1[flashcount][i]; 

          } 

      } 

   }//while 

}//main 



vini.h 

#define B00000000   0x00 

#define B00000001       0x01 

#define B00000010    0x02  

#define B00000011       0x03  

#define B00000100    0x04  

#define B00000101       0x05  

#define B00000110    0x06  

#define B00000111       0x07  

#define B00001000    0x08  

#define B00001001       0x09  

#define B00001010    0x0A  

#define B00001011       0x0B  

#define B00001100   0x0C  

#define B00001101       0x0D  

#define B00001110   0x0E  

#define B00001111       0x0F  



#define B00010000   0x10  

#define B00010001       0x11  

#define B00010010   0x12  

#define B00010011       0x13  

#define B00010100   0x14  

#define B00010101       0x15  

#define B00010110   0x16  

#define B00010111       0x17  

#define B00011000   0x18  

#define B00011001       0x19  

#define B00011010   0x1A  

#define B00011011       0x1B  

#define B00011100   0x1C  

#define B00011101       0x1D  

#define B00011110   0x1E  

#define B00011111       0x1F  



#define B00100000   0x20  

#define B00100001       0x21  

#define B00100010   0x22  

#define B00100011       0x23  

#define B00100100   0x24  

#define B00100101       0x25  

#define B00100110   0x26  

#define B00100111       0x27  

#define B00101000   0x28  

#define B00101001       0x29  

#define B00101010   0x2A  

#define B00101011       0x2B  

#define B00101100   0x2C  

#define B00101101       0x2D  

#define B00101110   0x2E  

#define B00101111       0x2F 



#define B00110000   0x30  

#define B00110001       0x31  

#define B00110010   0x32  

#define B00110011       0x33  

#define B00110100   0x34  

#define B00110101       0x35  

#define B00110110   0x36  

#define B00110111       0x37  

#define B00111000   0x38  

#define B00111001       0x39  

#define B00111010   0x3A  

#define B00111011       0x3B  

#define B00111100   0x3C  

#define B00111101       0x3D  

#define B00111110   0x3E  

#define B00111111       0x3F  



#define B01000000   0x40  

#define B01000001       0x41  

#define B01000010   0x42  

#define B01000011       0x43  

#define B01000100   0x44  

#define B01000101       0x45  

#define B01000110   0x46  

#define B01000111       0x47  

#define B01001000   0x48  

#define B01001001       0x49  

#define B01001010   0x4A  

#define B01001011       0x4B  

#define B01001100   0x4C  

#define B01001101       0x4D  

#define B01001110   0x4E  

#define B01001111       0x4F  



#define B01010000   0x50  

#define B01010001       0x51  

#define B01010010   0x52  

#define B01010011       0x53  

#define B01010100   0x54  

#define B01010101       0x55  

#define B01010110   0x56  

#define B01010111       0x57  

#define B01011000   0x58  

#define B01011001       0x59  

#define B01011010   0x5A  

#define B01011011       0x5B  

#define B01011100   0x5C  

#define B01011101       0x5D  

#define B01011110   0x5E  

#define B01011111       0x5F  



#define B01100000   0x60  

#define B01100001       0x61  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -