📄 evido.c
字号:
//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 + -