📄 mode.c
字号:
/*
********************************************************************************
*
* LCD控制程序
*
* 这个头文件定义了系统所能支持的显示模式,并可以设定要支持的模式
*
* 文件名 : MODE.H
* 设计者 : Terry
********************************************************************************
* 功 能 描 述
*
* 1、定义显示模式表格搜索时的误差门限
* 2、定义系统实际需要去支持的显示模式
* 3、系统全部能支持的显示模式表格
* 4、有几组显示模式的同步信号参数是接近的,因此不同时支持这些显示模式
* 这在应用上要注意,那么这些模式分别是:
* (1) 848 X 480 640 X 480
* (2) 1280 X 768 1360 X 768
* (3) 1680 X 1050 1400 X 1050
* (4) 1920 X 1200 1600 X 1200
*
* 相冲突的模式是有规律的,一组是4:3的,另一组是16:9的
*
* 5、为了能适应更多的显示模式,必须增加对同步极性的判别
* 6、不要改动以下显示模式数据的排列顺序
********************************************************************************
*/
#include "global.h"
#if EN_85HZ_FRAME_RATE
#include "mode_85.h"
#else
#include "mode.h"
#endif
/********************************** End ***************************************/
// 这个表定义了显示模式的所有相关参数
// 这个数据表存放的项目顺序, 水平计数值, 垂直计数值, 垂直极性+水平极性,
// 水平分辨率,垂直分辨率,水平所有像素,垂直所有像素,分辨率字符串
// 要注意的是极性一项, 水平极性在第1位, 垂直极性在第0位. 1表示正极性
/*
================================================================================
= 这个表格中包含了水平和垂直的位置参数,这些参数都是在MIK的信号基础上调出来
= 的,一旦信号源更换,就会有轻微的差别。
=
= 另外一个需要特别注意的就是,水平位置和寄存器0x0D5的bit3有很大的关系,对于这
= 个位目前的设置规律是,逐行信号设置为0,隔行信号设置为1,一旦统一为0,有些
= 隔行的显示模式AUTO调整不成功,而且0x199的bit0和bit1的设置,也是和0x0D5的bit3
= 相关联的。
================================================================================
*/
//第七位为1时,不检测极性;为0时,检测极性 //08-05-23
DPMODE code ModeAttr[]={
{HSCNT(15.625),VSCNT(50.000),0x80,720,288,864,0x3F,0x13,
HsErr(HSCNT(15.625)), VsErr(VSCNT(50.000))}, // 00
//{HSCNT(15.625),VSCNT(60.000),0x80,720,240,858,0x33,0x0F,
//HsErr(HSCNT(15.625)), VsErr(VSCNT(60.000))}, // 01
{HSCNT(15.734),VSCNT(60.000),0x80,720,240,858,0x33,0x0F,
HsErr(HSCNT(15.734)), VsErr(VSCNT(60.000))}, // 01
/*--------------------- 640X350 -------------------------*/
// 31.469kHz/50.030Hz,+/-, 640X350/50Hz, 25.175MHz
#if EN_M640X350_50
{HSCNT(31.469),VSCNT(50.030),0x02,640,350,800,0xA8,0x1B,
HsErr(HSCNT(31.469)), VsErr(VSCNT(50.030))}, // 00
#endif
// 31.469kHz/59.941Hz,+/-, 640X350/60Hz, 25.175MHz
#if EN_M640X350_60
{HSCNT(31.469),VSCNT(59.941),0x02,640,350,800,0x9A,0x61,
HsErr(HSCNT(31.469)), VsErr(VSCNT(59.941))}, // 01
#endif
// 31.469kHz/70.087Hz,+/-, 640X350/70Hz, 25.175MHz
#if EN_M640X350_70
{HSCNT(31.469),VSCNT(70.087),0x02,640,350,800,0x89,0x3B,
HsErr(HSCNT(31.469)), VsErr(VSCNT(70.087))}, // 02
#endif
// 37.861kHz/85.080Hz,+/-, 640X350/85Hz, 31.500MHz
#if EN_M640X350_85
{HSCNT(37.861),VSCNT(85.080),0x02,640,350,832,0x98,0x3C,
HsErr(HSCNT(31.469)), VsErr(VSCNT(70.087))}, // 03
#endif
/*--------------------- 640X400 -------------------------*/
// 31.469kHz/50.030Hz,-/+, 640X400/50Hz, 25.175MHz
#if EN_M640X400_50
{HSCNT(31.469),VSCNT(50.030),0x01,640,400,800,0xA8,0x1B,
HsErr(HSCNT(31.469)), VsErr(VSCNT(50.030))}, // 04
#endif
// 31.469kHz/59.941Hz,-/+, 640X400/60Hz, 25.175MHz
#if EN_M640X400_60
{HSCNT(31.469),VSCNT(59.941),0x02,640,400,784,0x89,0x48,
HsErr(HSCNT(31.469)), VsErr(VSCNT(59.941))}, // 05
#endif
// 31.469kHz/70.087Hz,-/+, 640X400/70Hz, 25.175MHz
#if EN_M640X400_70
{HSCNT(31.469),VSCNT(70.087),0x02,640,400,800,0x89,0x22,
HsErr(HSCNT(31.469)), VsErr(VSCNT(70.087))}, // 06
#endif
// 37.861kHz/85.080Hz,-/+, 640X400/85Hz, 35.500MHz
#if EN_M640X400_85
{HSCNT(37.861),VSCNT(85.080),0x01,640,400,832,0x98,0x29,
HsErr(HSCNT(37.861)), VsErr(VSCNT(85.080))}, // 07
#endif
/*--------------------- 720X350 -------------------------*/
// 31.469kHz/50.030Hz,+/-, 720X350/50Hz, 28.322MHz
// 31.469kHz/70.087Hz,-/+, 640X400/70Hz, 25.175MHz
#if EN_M720X350_50
{HSCNT(31.469),VSCNT(50.030),0x02,720,350,900,0xA8,0x1B,
HsErr(HSCNT(31.469)), VsErr(VSCNT(50.030))}, // 08
#endif
// 31.469kHz/59.941Hz,+/-, 720X350/60Hz, 28.322MHz
#if EN_M720X350_60
{HSCNT(31.469),VSCNT(59.941),0x02,720,350,900,0x9B,0x61,
HsErr(HSCNT(31.469)), VsErr(VSCNT(59.941))}, // 09
#endif
// 31.469kHz/70.087Hz,+/-, 720X350/70Hz, 28.322MHz
#if EN_M720X350_70
{HSCNT(31.469),VSCNT(70.087),0x02,720,350,900,0x9B,0x3D,
HsErr(HSCNT(31.469)), VsErr(VSCNT(70.087))}, // 10
#endif
// 37.861kHz/85.080Hz,+/-, 720X350/85Hz, 35.500MHz
#if EN_M720X350_85
{HSCNT(37.861),VSCNT(85.080),0x02,720,350,936,0xAC,0x3C,
HsErr(HSCNT(37.861)), VsErr(VSCNT(85.080))}, // 11
#endif
/*--------------------- 720X400 -------------------------*/
// 31.469kHz/50.030Hz,-/+, 720X400/50Hz, 28.322MHz
#if EN_M720X400_50
{HSCNT(31.469),VSCNT(50.030),0x01,720,400,900,0xA8,0x1B,
HsErr(HSCNT(31.469)), VsErr(VSCNT(50.030))}, // 12
#endif
// 31.469kHz/59.941Hz,-/+, 720X400/60Hz, 28.322MHz
#if EN_M720X400_60
{HSCNT(31.469),VSCNT(59.941),0x01,720,400,900,0x9A,0x48,
HsErr(HSCNT(31.469)), VsErr(VSCNT(59.941))}, // 13
#endif
// 31.469kHz/70.087Hz,-/+, 720X400/70Hz, 28.322MHz
#if EN_M720X400_70
{HSCNT(31.469),VSCNT(70.087),0x01,720,400,900,0x9C,0x21,
HsErr(HSCNT(31.469)), VsErr(VSCNT(70.087))}, // 14
#endif
// 37.861kHz/85.080Hz,-/+, 720X400/85Hz, 31.500MHz
#if EN_M720X400_85
{HSCNT(37.861),VSCNT(85.080),0x01,720,400,936,0xAC,0x2A,
HsErr(HSCNT(37.861)), VsErr(VSCNT(85.080))}, // 15
#endif
/*--------------------- 720X480 -------------------------*/
// 29.820kHz/60.000Hz,-/+, 720X480/60Hz, 26.719MHz
#if EN_M720X480_60 //chen 08-05-24
{HSCNT(29.820),VSCNT(60.000),0x01,720,480,896,DEF_MODEHPOS,DEF_MODEVPOS,
HsErr(HSCNT(29.820)), VsErr(VSCNT(60.000))}, // 12
#endif
/*--------------------- 720X576 -------------------------*/
// 35.820kHz/60.000Hz,-/+, 720X576/60Hz, 32.668MHz
#if EN_M720X576_60 //chen 08-05-24
#if USE_MODE_GLS
{HSCNT(35.820),VSCNT(60.000),0x01,720,540,912,DEF_MODEHPOS,DEF_MODEVPOS,
HsErr(HSCNT(35.820)), VsErr(VSCNT(60.000))}, // 12
#else
{HSCNT(35.820),VSCNT(60.000),0x01,720,576,912,DEF_MODEHPOS,DEF_MODEVPOS,
HsErr(HSCNT(35.820)), VsErr(VSCNT(60.000))}, // 12
#endif
#endif
#if USE_MODE_GLS
/*--------------------- 848X480 -------------------------*/
#if EN_M800X480_60
{HSCNT(30.300),VSCNT(60.600),0x03,800,480,1056,0xD8,0x1C,
HsErr(HSCNT(30.300)), VsErr(VSCNT(60.600))},
#endif
#endif
/*--------------------- 848X480 -------------------------*/
// 60Hz刷新率模式的数据是根据VESA的标准校对的,其余模式没有处理
// 24.621kHz/49.540Hz,-/+, 848X480/50Hz, 26.000MHz
#if EN_M848X480_50
{HSCNT(24.621),VSCNT(49.540),0x01,848,480,1040,0xA8,0x1B,
HsErr(HSCNT(24.621)), VsErr(VSCNT(49.540))},
#endif
// 31.020kHz/60.000Hz,+/+, 848X480/60Hz, 31.500MHz
#if EN_M848X480_60
#if USE_MODE_GLS
{HSCNT(31.020),VSCNT(60.000),0x00,848,480,1056,0xD8,0x1C,
HsErr(HSCNT(31.020)), VsErr(VSCNT(60.000))},
#else
{HSCNT(31.020),VSCNT(60.000),0x03,848,480,1056,0xD8,0x1C,
HsErr(HSCNT(31.020)), VsErr(VSCNT(60.000))},
#endif
#endif
// 35.000kHz/70.000Hz,+/-, 848X480/70Hz, 37.520MHz
//与EN_M640X480_70很接近,无法区分,只能取舍 //chen 08-05-24
#if 0//EN_M848X480_70
{HSCNT(35.000),VSCNT(70.000),0x01,848,480,1072,0xA8,0x1B,
HsErr(HSCNT(35.000)), VsErr(VSCNT(70.000))}, // 18
#endif
// 36.072kHz/72.000,+/-, 848X480/72Hz, 39.246MHz
#if EN_M848X480_72 //chen 08-05-24
{HSCNT(36.072),VSCNT(72.000),0x01,848,480,1088,DEF_MODEHPOS,DEF_MODEVPOS,
HsErr(HSCNT(36.072)), VsErr(VSCNT(72.000))}, // 18
#endif
// 37.684kHz/74.769Hz,-/+, 848X480/75Hz, 41.000MHz
#if EN_M848X480_75
{HSCNT(37.684),VSCNT(74.769),0x01,848,480,1088,0xA8,0x1B,
HsErr(HSCNT(37.684)), VsErr(VSCNT(74.769))},
#endif
#if USE_MODE_GLS
#if EN_M852X480_60
{HSCNT(31.020),VSCNT(63.000),0x01,852,480,1100,0xD8,0x1C,
HsErr(HSCNT(31.020)), VsErr(VSCNT(63.000))},
#endif
#endif
#if USE_MODE_GLS
/*--------------------- 960X600 -------------------------*/
// 37.320kHz/60.000Hz,-/-, 960X600/60Hz, 45.978MHz
#if EN_M960X600_60
{HSCNT(37.320),VSCNT(60.000),0x03,960,600,1232,DEF_MODEHPOS,DEF_MODEVPOS,
HsErr(HSCNT(37.320)), VsErr(VSCNT(60.000))}, // 32
#endif
// 43.750kHz/70.000Hz,-/-, 960X600/70Hz, 54.600MHz
//与EN_M800X600_70很接近,无法区分,只能取舍 //chen 08-05-24
#if 0//EN_M960X600_70
{HSCNT(43.750),VSCNT(70.000),0x01,960,600,1248,DEF_MODEHPOS,DEF_MODEVPOS,
HsErr(HSCNT(43.750)), VsErr(VSCNT(70.000))}, // 32
#endif
// 45.072kHz/72.000Hz,-/-, 960X600/72Hz, 56.250MHz
#if EN_M960X600_72
{HSCNT(45.072),VSCNT(72.000),0x01,960,600,1248,DEF_MODEHPOS,DEF_MODEVPOS,
HsErr(HSCNT(45.072)), VsErr(VSCNT(72.000))}, // 32
#endif
// 47.025kHz/75.000Hz,-/-, 960X600/75Hz, 59.440MHz
#if EN_M960X600_75
{HSCNT(47.025),VSCNT(75.000),0x01,960,600,1264,DEF_MODEHPOS,DEF_MODEVPOS,
HsErr(HSCNT(47.025)), VsErr(VSCNT(75.000))}, // 32
#endif
#endif
#if USE_MODE_GLS
/*--------------------- 1024X640 -------------------------*/
// 39.780kHz/60.000Hz,-/-, 960X600/60Hz, 52.828MHz
#if EN_M1024X640_60
{HSCNT(39.780),VSCNT(60.000),0x00,1024,640,1328,DEF_MODEHPOS,DEF_MODEVPOS,
HsErr(HSCNT(39.780)), VsErr(VSCNT(60.000))}, // 32
#endif
#endif
#if USE_MODE_GLS
/*--------------------- 1024X576 -------------------------*/
// 45.150kHz/75.000Hz,-/-, 1024X576/60Hz, 60.682MHz
#if EN_M1024X576_75
{HSCNT(45.150),VSCNT(75.000),0x01,1024,576,1344,DEF_MODEHPOS,DEF_MODEVPOS,
HsErr(HSCNT(45.150)), VsErr(VSCNT(75.000))}, // 32
#endif
#endif
/*--------------------- 640X480 -------------------------*/
// 31.469kHz/50.030Hz,-/-, 640X480/50Hz, 25.175MHz
#if EN_M640X480_50
{HSCNT(31.469),VSCNT(50.030),0x00,640,480,800,0xA8,0x1B,
HsErr(HSCNT(31.469)), VsErr(VSCNT(50.030))}, // 16
#endif
// 31.469kHz/59.941Hz,-/-, 640X480/60Hz, 25.175MHz
#if EN_M640X480_60
{HSCNT(31.469),VSCNT(59.941),0x80,640,480,800,0x89,0x20,
HsErr(HSCNT(31.469)), VsErr(VSCNT(59.941))}, // 17
#endif
// 35.000kHz/66.667Hz,+/-, 640X480/67Hz, 30.240MHz
#if EN_M640X480_67
{HSCNT(35.000),VSCNT(66.667),0x82,640,480,864,0x98,0x27,
HsErr(HSCNT(35.000)), VsErr(VSCNT(66.667))}, // 18
#endif
// 35.000kHz/70.000Hz,+/-, 640X480/70Hz, 30.240MHz
#if EN_M640X480_70
{HSCNT(35.000),VSCNT(70.120),0x82,640,480,864,0xA8,0x1B,
HsErr(HSCNT(35.000)), VsErr(VSCNT(70.120))}, // 18
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -