vga编程
① 显卡寄存器编程原理
目前在个人计算机上广泛使用的是采用阴极射线管(CRT)的光栅扫瞄显示器,我们在屏幕上所看到的颜色是由电子枪发出的电子束打在CRT屏幕背面的萤光层上的点形成的,通过控制点的亮度可以产生不同的颜色。电子束不断地从左到右、从上到下扫瞄整个屏幕,使屏幕显示出图案,电子束以大约每秒70次的速率在屏幕上重画这一图案,这个过程称为显示刷新或屏幕刷新,具体的扫瞄频率依赖于所用的显示适配器(又称为显示卡)。电子束从屏幕的左上角开始向右扫瞄,到达屏幕的右边缘后,电子束被关闭(水平断开),接着它又迅速地返回到屏幕的左边缘(水平回扫)开始进行下一行水平方向的扫瞄,在完成全部的水平方向的扫瞄后,电子束在屏幕的右下角结束,此时电子束被关闭(垂直断开),接着又迅速地返回到屏幕的左上角(垂直回扫),开始下一屏扫瞄。电子束就是这样周而复始地扫瞄整个屏幕。显示器在两种方式下工作:文本方式和图形方式,电脑游戏一般在图形方式下进行。
二.显示器的坐标系统
计算机屏幕上的坐标与我们通常使用的直角坐标系不同,坐标原点(0,0)在屏幕的左上角,向右是水平方向的坐标,向下是垂直方向的坐标,且坐标没有负值。
三.显示卡的结构
显示器上的显示卡负责将图形显示在屏幕上。显示存储器中存放着在屏幕上显示的图像数据,显示卡硬件不停地将显存中的内容显示在屏幕上。显示存储器实际上是安装在显示卡上的一块或几块大规模集成电路,其容量有1M、2M、4M、8M等,在DOS下我们可以访问的内存只有1MB空间(这就是DOS的局限性所在),地址从00000H到FFFFFH,这段内存根据用途又分为不同的块,系统分配给图形缓冲区(显示存储器)的地址在A0000H到BFFFFH之间,大小为128KB,其中,VGA占用了A0000H到AFFFFH段,共64KB,这段地址是内存映射地址,供我们访问显示存储器用。在VGA 13H图形模式下,显示内存使用A0000H到AF9FFH的一段线性内存空间,每个字节表示一个点,对应屏幕上的一个像点,320*200的屏幕分辨率共需要64000个字节,刚好64KB,因为一个字节可以表示的最大整数值为256,所以每个像点就可以表示256种颜色。
② C语言中vga和VGAHI是是什么意思
vga是video graphics array(视频图形阵列适配器)的缩写,是C语言所支持的一种显示器适配器.
VGAHI是vga的一种显示模式,为640*480的高分辨率显示方式.
另外,vga还有640*350的中分辨率显示方式(VGAMED),640*200的低分辨率显示方式(VGALO).
③ 现在电视无VGA接口RT809F怎么写程序
手动设置VGA线序,选择芯片型号,然后读取,最后保存。
编程器的VGA ISP接口通过VGA线和板子正确连接并接好供电,打开软件到主界面,设置VGA线序。
在读取完成以后,点击“保存”按钮,保存文件。填写文件名称时,文件名尽可能详细,包含厂商、板号、屏型号、主芯片型号、存储器型号。
④ 求大神帮我翻译一下这一段FPGA的编程语言~ 关于VGA显示的
entity vga is
Port ( clk : in STD_LOGIC;
clr : in STD_LOGIC;
hsync : out STD_LOGIC;
vsync : out STD_LOGIC;
RGB : out STD_LOGIC_VECTOR (2 downto 0));
end vga;
architecture Be
havioral of vga is
signal h_cnt,v_cnt : integer:=0; //中间变量申明;
signal q : std_logic_vector(2 downto 0) :="000";
signal h,v : std_logic :='0';
begin
process(clk,clr,h_cnt,v_cnt)
begin // 这个进程是对行和场的计数
if clr='1' then
h_cnt<=0; v_cnt<=0;
elsif clk'event and clk='1' then //时钟信号上升沿有效
h_cnt<=h_cnt+1; //行计数
if h_cnt=1039 then
if v_cnt<665 then
h_cnt<=0; v_cnt<=v_cnt+1; //场计数
elsif v_cnt=665 then //一帧结束
h_cnt<=0; v_cnt<=0;
end if;
end if;
end if;
end process;
process(clk,h_cnt) 此进程对行同步信号进行赋值
begin
if clk'event and clk='1' then
if h_cnt<120 then
h<='1';
else h<='0';
end if;
end if;
end process;
process(clk,v_cnt) 此进程对场同步信号进行赋值
begin
if clk'event and clk='1' then
if v_cnt<6 then
v<='1';
else v<='0';
end if;
end if;
end process;
process(clk,clr,h_cnt,v_cnt)
begin
if clr='1' then
q<="000";
elsif (h_cnt>=184 and h_cnt<984 and v_cnt>=29 and v_cnt<629) then //工作区域
if (h_cnt>=184 and h_cnt<284) then //进行区域颜色赋值
q <= "000";
elsif (h_cnt>=284 and h_cnt<384) then
q <= "001";
elsif (h_cnt>=384 and h_cnt<484) then
q <= "010";
elsif (h_cnt>=484 and h_cnt<584) then
q <= "011";
elsif (h_cnt>=584 and h_cnt<684) then
q <= "100";
elsif (h_cnt>=684 and h_cnt<784) then
q <= "101";
elsif (h_cnt>=784 and h_cnt<884) then
q <= "110";
elsif (h_cnt>=884 and h_cnt<984) then
q <= "111";
else q<="000";
end if;
else q<="000";
end if;
end process;
RGB<=q; hsync<=h; vsync<=v;
end Behavioral;
⑤ 跪求专业大神作答:VGA显示学号控制电路问题(硬件编程问题,具体要求如下)
问题4:
如果它不能正常显示模式=线取掉
改变:驱动程序=检测
initgraph(“&驱动器,及模式,”.. \ \ BGI) ;
注意:\ \ BGI是您的计算机c + +编程软件BGI一般默认路径为.. \ \ BGI
主题:学习putpixel画点。
1。程序分析:。
2源代码。
的#include“stdio.h中”
的#include“graphics.h的”
的main()
{
INT I,J,司机= VGA接口,模式= VGAHI ;
initgraph(&驱动器,及模式,“”);
setbkcolor(黄色);
就(i = 50; I <= 230,我+ = 20)
为(J = 50;<= 230; J + +)
putpixel(I,J,1);
为(J = 50;<= 230,J + = 20)就(i = 50; I <= 230; i + +)
putpixel(I,J,1);
}
主题:画椭圆椭圆
1方案分析:。
2源代码。
的#include“stdio.h中”
#包括“图形。H”
的#include“conio.h的”
的main()
{
整型X = 360,Y = 160,驱动器= VGA接口,模式= VGAHI;
整型数= 20,I;
整数顶部,底部;
initgraph(&驱动器,与模式“,” );
顶级= Y-30;
底= Y -30;
就(i = 0;我<民,我+ +)
{
椭圆(250,250,0,360,顶部,底部);
顶= 5;
底+ = 5;
}
的getch();
}
主题:使用椭圆和矩形绘图。 。
1程序分析:
2源代码。
的#include“stdio.h中”
的#include“graphics.h的”
的#include“conio.h的”
的main()
{
整型驱动程序= VGA接口,模式= VGAHI;
INT I,编号= 15,顶部= 50;
整数左边= 20,右边= 50;
initgraph(&驱动器,及模式,“ “);
就(i = 0;我<民,我+ +)
{
椭圆(250,250,0,360,右,左);
椭圆(250,250,0,360 ,20,顶部);
矩形(20-2 * I ,20-2 * I 10 *(I 2),10 *(I 2));
右+ = 5;
左+ = 5;
上衣+ = 10;
}
的getch();
}
主题:其中一个最美丽的设计。 。
1程序分析:
2源代码。
的#include“graphics.h的”
的#include“math.h中”
#包括“DOS.H”
的#include“conio.h的”
#包括“stdlib.h中”
的#include“stdio.h中”
#包括“stdarg头文件。H”
#定义MAXPTS 15
#定义PI 3.1415926
结构分{
整数的x,y;
};
双AspectRatio = 0.85;
无效LineToDemo(无效)
{
结构viewporttype副总裁; 结构PTS点[MAXPTS];
INT I,J,H,W,X中心值,ycenter;
整数半径,角度,步骤;
双拉德;
printf(“请MOVETO / lineTo的示范“);
getviewsettings(&VP);
H = VP。底部 - vp.top;
W = vp.right - vp.left;
X中心值= W / 2; / *判断圆* /
ycenter = H / 2的中心; 半径=(H - 30)/(AspectRatio * 2);
步= 360 / MAXPTS; / *判断#增量* /
角= 0; / *开始在零摄氏度* /
就(i = 0; I <MAXPTS; + I){/ *判断圆拦截* /
拉德=(双)角* PI / 180.0; / *转换角度为弧度* /
点[I] X = X中心值+(int)的(COS(拉德)*半径);
点[I] Y = ycenter - (int)的(罪(拉德)*半径* AspectRatio .. );
角度+ =步骤; / *移动到下一个增量* /
圆(X中心值,ycenter,半径); / *绘制边界圆* /
为( I = 0我“MAXPTS; + I){/ *绘制线到圆* /
为(J =;<MAXPTS; + + J){/ *对于每个剩余的相交* /
MOVETO(点由[i]×,点[I] Y ..); / *移动到的线* /
lineTo的开始(..点[J]×,点[J] Y) ; / *绘制的线* /
}}}
的main()
{诠释驱动程序,模式;
驱动程序= CGA;模式= CGAC0;
initgraph(与司机,及模式,“”);
的setColor(3);
setbkcolor(绿色);
LineToDemo();}
主题:?绘画,画派与圆轮。 。
1程序分析:
2源代码。
/ *循环* /
的#include“graphics.h的”
的main()
{诠释驱动程序,模式,I;
持股量J = 1,K = 1;
驱动程序= VGA;模式= VGAHI;
initgraph(&驱动器,及模式,“”);
setbkcolor(黄色);
就(i = 0;我<= 25; i + +)
{
的setColor(8);
圆(310,250,K);
K = K + J;
当J = J +0.3;
}
}
主题:绘画,学习用线画一条直线。
1程序分析:
2源代码:..
的#include“graphics.h的”
的main()
{诠释驱动程序,模式,I;
持股量X0,Y0,Y1,X1;
持股量J = 12,K;
驱动程序= VGA;模式= VGAHI;
initgraph(&驱动器,及模式,“”);
setbkcolor(绿色);
X0 = 263; Y0 = 263; Y1 = 275; X1 = 275;
就(i = 0; I <= 18; i + +)
{
的setColor(5);
线( X0,Y0,X0,Y1);
X0 = X0-5;
Y0 = Y0-5;
X 1 = X 5;
Y1 = Y1 5; 当J = J +10;
}
X0 = 263; Y1 = 275; Y0 = 263;
就(i = 0; I {
的setColor(5);
线(X0,Y0,X0,Y1);
X0 = X0 +5;
Y0 = Y0 +5; Y1 = Y1-5;
}
}
主题:素描,绘画学校,一个长方形广场。
1方案解析:100-999用于闭环控制数和各比特数分解,十,百。
2的源代码:
的#include“graphics.h的”
的main()
{诠释X0,Y0,Y1,X1,驱动程序,模式,I; 驱动程序= VGA;模式= VGAHI;
initgraph(&驱动器,及模式,“”);
setbkcolor(黄色);
X0 = 263; Y0 = 263; Y1 = 275; X1 = 275;
就(i = 0; I <= 18; i + +)
{
的setColor(1);
矩形(X0,Y0,X1 ,Y1);
X0 = X0-5;
Y0 = Y0-5;
X1 = X1 +5;
Y1 = Y1 +5;
} settextstyle(DEFAULT_FONT,HORIZ_DIR,2);
outtextxy(150,40,“好美啊!”);
线(130,60,480,60);
的setColor( 2);
圆(269269137);
}
主题:素描,全面的例子。 。
1程序分析:
2源代码。
#定义PAI 3.1415926
#定义了B 0.809
的#include“graphics.h的”
的#include“math.h中”
的main()
{
INT I,J,K,X0,Y0,X,Y,驱动程序,方式;
浮起;
驱动程序= CGA;模式= CGAC0;
initgraph(&驱动器,&模式,“”);
的setColor(3);
setbkcolor(绿色);
X0 = 150; Y0 = 100;
圈(X0,Y0,10) ;
圈(X0,Y0,20);
圈(X0,Y0,50);
就(i = 0; I <16; i + +)
{
一=(2 * PAI/16)* I;
X = CEIL(X0 +48 * COS(a)条);
为y = CEIL(Y0 +48 *罪(一) * B);
的setColor(2);线(X0,Y0,X,Y);}
的setColor(3);圈(X0,Y0,60);
/ *使0时间正常大小字母* /
settextstyle(DEFAULT_FONT,HORIZ_DIR,0);
outtextxy(10,170,“按一键”);
的getch();
setfillstyle(HATCH_FILL ,黄色);
FLOODFILL(202,100,白色);
的getch();
为(K = 0,K <= 500,K +)
{的setColor(3);
就(i = 0; I <= 16; i + +)
{
一=(2 * PAI/16)* I +(2 * PAI / 180)* K;
X = CEIL(X0 +48 * COS(a)条);
为y = CEIL(Y0 +48 + SIN(A)* B);
的setColor( 2);线(X0,Y0,X,Y);
}
为(J = 1;<= 50; J + +)
{
为a =( 2 * PAI/16)* I +(2 * PAI/180)* k-1个;
X = CEIL(X0 48 * COS(一));
为y = CEIL(Y0 48 * SIN(A)* B);
线(X0,Y0,X,Y);
}
}
restorecrtmode();
} 主题:素描,全面的例子。 。
1程序分析:
2源代码。
的#include“graphics.h的”
#定义左0
#定义TOP 0
#定义右639
#定义BOTTOM 479
#define语句400
#定义MAXCOLOR 15
的main()
{
整数驱动程序,模式,错误;
整数X1,Y1;
整数X2,Y2;
整数DX1,DY1,DX2,DY2,I = 1;
诠释计数= 0;
整型色= 0;
驱动程序= VGA;
模式= VGAHI ;
initgraph(&驱动器,及模式,“”);
X 1 = X = Y1 = Y2 = 10;
DX1 = DY1 = 2;
DX2 = DY2 = 3 ;
而
{
线(X1,Y1,X2,Y2)(的kbhit()!);
X1 + = DX1; Y1 + = DY1;
X2 + = DX2; Y2 + DY2;
如果(X1 = RIGHT)
DX1 = - DX1;
如果(Y1 =底部)
DY1 =-DY1;
如果(X2 = RIGHT)
DX2 =-DX2;
如果(Y2 = BOTTOM)
DY2 =-DY2;
如果(+ +计数>线)
{
的setColor(彩色);
颜色=(颜色> = MAXCOLOR )0:? + +的颜色;
}
}
closegraph();
}
⑥ 怎么用根VGA的线刷显示屏
需要VGA编程器
将编程器连到要刷机的显示器VGA口,加电开机,然后操作编程器刷写程序即可。
⑦ VGA彩条信号显示控制器的实验原理是什么
VGA时序信号是图象显示的关键,行场扫描时序的产生,是利用逻辑编程的方法实现的,即用VHDL编写分频器,计时器模块,来获得T1、T2、T3、T4 时序。当输出数字、彩条信号和棋盘格图象时,由外部12M有源晶振提供时钟输入,其中行频HS:12MHZ ÷13÷29=31830Hz、场频VS:31830Hz÷480×0.93=61.67Hz、T1=1/31830Hz×4/29=25.96us、 T2=1/31830Hz×5/29=6.04us、T3为两个行周期(T1+T2),T4为480个行周期。
图象信号包括数字、彩条、棋盘格,和ROM中定制的图形等。数字信号和彩条信号的产生是按行场方向将屏幕各进行8等分,相当于一个8×8的点阵,在对应位置显示相应颜色即可获得所需图像信号;棋盘格信号是将横彩条和竖彩条相异或获得。ROM中定制的较为复杂的彩色图像,需采用像素点输出,即将图像各像素点的信息存储于ROM中,再以一定的频率输出。FPGA器件ROM的定制有两种方法:第一种方法是利用FPGA器件的嵌入式存储器定制LPM_ROM, 用.MIF文件或.HEX文件对其进行初始化,这种方法获得的ROM最大寻址空间为2 12,可以存储一幅分辨率为64×64的图像信息;第二种方法是在FPGA逻辑资源的限度内用VHDL语言定制一个ROM,采用CASE语句对其进行初始化,这种方法获得的ROM在存储深度较大时,编译时对时间的开销较大。ROM初始化完成后,在25MHz的时钟频率下输出存储的图像信息。其图象颜色种类的多少取决于存储空间的大小。
ROM定制的图象信息是利用FPGA嵌入的存储器定制LPM_ROM,可以用于存储一幅64×64分辨率的图像信息,数据线宽为3位,地址线12根,采用组合寻址方式,即行地址HSADDRESS占低6位,场地址VSADDRESS占高6位;若要显示更为复杂的图象信息,只需扩展存储器及寻址的数据线宽度,为了保证行地址信号输出与行扫描信号输出同步,场地址信号输出与场扫描信号输出同步,在VHDL编程时,可用25MHz时钟作为进程的启动信号。输出信号的时序波形如图6所示。各种图象信号的输出是由数据选择器通过VHDL编程实现的。
