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

📄 3kmenu1.c

📁 嵌入式开发 嵌入式开发 嵌入式开发
💻 C
📖 第 1 页 / 共 2 页
字号:
/******************************
文件:	3KMENU1.C
描述:	静止画面系统
DateTime: 2007-4-24 14:26:26 
JOB-TODO: 为了解决在静止画面下修改微调值后死机的问题 
   在Menu1的修改微调值部分加上REC_sub1com标志 不在修改部分存储而在换屏时保存微调值
DateTime: 2007-4-16 10:54 
JOB-TODO:    对用户处理键盘中断 造成的死机 现认为加入了新的处理
    假设 处理 [齿轮齿数、打开文件、保存文件]时进入了CAN信息处理
    复用bCANProcessing标志 
DateTime: 2007-4-29 16:15:33
JOB-TODO:  在menu1() 函数中注销了bProcessUserInterrupt  解决了上电后找不到视频源的问题
******************************/
#include <alloc.h>
#include <math.h>
#include "ST3000.H"
#include "STRUC_3K.H"
#include "CORE_VGA.H"
#include "CORE_COM.H"
#include "3KDEFN.H"

#define SERIAL_COMM     0x3f8
#define XMEMS_USED 5 // 分配5M的图像内存

/**************** local constants ****************/
const int XiStart=0,YiStart=0,XoStart=220,YoStart=100;
    /* 变量中含有i的表示input; 变量中含有o的表示outport
       即: 输入窗口位置和输出窗口位置 */
const int nVideoWinWid=768,nVideoWinHei=576;
    /* 图像输入大小 768x576 点阵面 */
const int nViewWinWid=768,nViewWinHei=576;
    /* 图像显示大小 768x576 点阵面 */

/**************** local variables ****************/
typedef struct {
    int nBytesPerPixel;
    int bSample;
    int nWho;
    int source;
    int bright;
    int contrast;
    int hue;
    int saturation;
    int bFrameField;
    int bShowMemIMG;
    int bMask;
    int nMaxMemIMGNum;
    int nViewedMemIMGNum;
} SampleStatus;
SampleStatus status;

unsigned char bCANProcessing;

WORD g_xms=0;
WORD g_hxms=0;
WORD g_hTrigMenu=0;
DWORD lineaddr=0;
BYTE far *pMask;
int n878=0; // VideoCard ID.
int bright,nMaskWid,nMaskHei;
int flag,flag1,flag2;
int captureflag,loadflag,saveflag;
int vNewCNL_M1,vOldCNL_M1;
long dwTotalFrames=0;
iRect rectMask;
time_t time0,time3;
unsigned char gfMatrixOffList[20]={0};
    /* 显示所依据的索引标志数组 */
unsigned char Dispbz,compressbz=0;
unsigned char Bright_Flag=0;
unsigned char pflag[20],sbuf[20][10];
unsigned char para[2]={0};
unsigned char far bbf[3072],bbf1[3072],bbf2[3072];

struct{
    unsigned _jzCmdListFlag:1;
    unsigned uID:4;
    unsigned uCC:11;
} _jzCmdList[80];
int jzCmdList_r=0,jzCmdList_w=0;
int REC_sub1com=0;
/**************** extern variables ****************/
extern int BitsOfPixel;
extern time_t tmsLastREC;
extern int OldMouseCol,OldMouseRow,MouseFlag,CursorDrawing;
/**************** local constants matrix for charsetlib ****************/
const unsigned char hz_buff[] = {
    0x08,0x08,0x0b,0xfc,0x0a,0x08,0x12,0x08,0x12,0x08,0x33,0xf8,0x32,0x40,0x50,0x44,
    0x9f,0xfe,0x10,0x40,0x10,0xe0,0x11,0x50,0x12,0x48,0x14,0x4e,0x18,0x44,0x10,0x40, //[保]  0
    0x02,0x00,0x02,0x04,0xff,0xfe,0x04,0x00,0x08,0x00,0x0b,0xf8,0x10,0x10,0x10,0x20,
    0x30,0x44,0x5f,0xfe,0x90,0x40,0x10,0x40,0x10,0x40,0x10,0x40,0x11,0x40,0x10,0x80, //[存]  1
    0x02,0x00,0x01,0x00,0x01,0x04,0xff,0xfe,0x10,0x10,0x08,0x10,0x08,0x20,0x04,0x20,
    0x04,0x40,0x02,0x80,0x01,0x00,0x02,0x80,0x04,0x60,0x08,0x10,0x30,0x0e,0xc0,0x04, //[文]  2
    0x10,0x40,0x10,0x40,0x12,0x40,0x22,0x48,0x23,0xfc,0x64,0x40,0xa4,0x40,0x28,0x40,
    0x20,0x44,0x3f,0xfe,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x40, //[件]  3
    0x10,0x00,0x10,0x00,0x10,0x04,0x13,0xfe,0xfc,0x20,0x10,0x20,0x14,0x20,0x18,0x20,
    0x30,0x20,0xd0,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x50,0xa0,0x20,0x40, //[打]  4
    0x00,0x08,0x7f,0xfc,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x24,0xff,0xfe,
    0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x10,0x20,0x10,0x20,0x20,0x20,0x40,0x20, //[开]  5
    0x01,0x00,0x11,0x20,0x11,0xf0,0x11,0x00,0x11,0x00,0x11,0x04,0xff,0xfe,0x00,0x00,
    0x21,0x08,0x21,0x08,0x22,0x88,0x24,0x68,0x28,0x28,0x20,0x08,0x3f,0xf8,0x20,0x08, //[齿]  6
    0x10,0x40,0x10,0x40,0x20,0xa0,0xfc,0xa0,0x21,0x10,0x51,0x08,0x52,0x0e,0xfd,0x04,
    0x11,0x10,0x11,0x30,0x1d,0xc0,0xf1,0x00,0x51,0x04,0x11,0x04,0x10,0xfc,0x10,0x00, //[轮]  7
    0x08,0x40,0x49,0x40,0x2a,0x40,0x08,0x84,0xff,0xfe,0x19,0x08,0x2c,0x88,0x4a,0x88,
    0x10,0x88,0xfe,0x90,0x22,0x50,0x22,0x20,0x14,0x50,0x18,0x88,0x25,0x0e,0x42,0x04, //[数]  8
    0x02,0x00,0x02,0x40,0x04,0x20,0x1f,0xf0,0x02,0x04,0xff,0xfe,0x04,0x40,0x08,0xa0,
    0x13,0x10,0x2c,0x4e,0xc1,0x84,0x0e,0x10,0x00,0x60,0x01,0x80,0x0e,0x00,0x70,0x00, //[参]  9
    0x01,0xf0,0x21,0x10,0x11,0x10,0x11,0x10,0x01,0x10,0x02,0x0e,0xf4,0x00,0x13,0xf8,
    0x11,0x08,0x11,0x10,0x10,0x90,0x10,0xa0,0x14,0x40,0x18,0xb0,0x13,0x0e,0x0c,0x04, //[设] 10
    0x3f,0xf8,0x24,0x48,0x3f,0xf8,0x01,0x00,0x7f,0xfc,0x01,0x00,0x1f,0xf0,0x10,0x10,
    0x1f,0xf0,0x10,0x10,0x1f,0xf0,0x10,0x10,0x1f,0xf0,0x10,0x14,0xff,0xfe,0x00,0x00, //[置] 11
    0x00,0xf0,0x3f,0x00,0x01,0x00,0x01,0x00,0x01,0x10,0x3f,0xf8,0x01,0x00,0x01,0x00,
    0x01,0x04,0xff,0xfe,0x02,0x00,0x04,0x00,0x08,0x20,0x10,0x10,0x3f,0xf8,0x00,0x08, //[丢] 12
    0x01,0x00,0x11,0x00,0x11,0x00,0x11,0x10,0x1f,0xf8,0x21,0x00,0x41,0x00,0x01,0x04,
    0xff,0xfe,0x01,0x00,0x02,0x80,0x02,0x80,0x04,0x40,0x08,0x30,0x10,0x0e,0x60,0x04, //[失] 13
    0x11,0x10,0x11,0x10,0x21,0x10,0x21,0x10,0x45,0x10,0xf9,0x10,0x11,0x10,0x21,0x10,
    0x41,0x10,0xfd,0x10,0x42,0xa8,0x02,0xa8,0x1c,0x48,0xe4,0x44,0x48,0x82,0x11,0x00, //[纵] 14 
    0x11,0x10,0x11,0x10,0x17,0xfc,0x11,0x10,0xfd,0x14,0x17,0xfe,0x30,0x48,0x3b,0xfc,
    0x56,0x48,0x53,0xf8,0x92,0x48,0x13,0xf8,0x10,0x00,0x11,0x10,0x13,0x0c,0x14,0x04, //[横] 15
    0x02,0x00,0x04,0x00,0x08,0x04,0x7f,0xfe,0x40,0x04,0x40,0x24,0x4f,0xf4,0x48,0x24,
    0x48,0x24,0x48,0x24,0x48,0x24,0x4f,0xe4,0x48,0x24,0x40,0x04,0x40,0x14,0x40,0x08  //[向] 16
};
/*
void ___SERIAL_FUNCS___(void)
*/

/******************************
 描述: 将从通讯口COM1接收到的数据放入程序指定的缓冲数组中
******************************/
void PushKBuffer_JZ(const unsigned char inB)
{
    if( inB==0xff || inB==0xfc )
    {
        sbuf[flag][flag1]=inB;
        pflag[flag]=1;
        flag1=0;
        if( ++flag==20 ) {   flag=0;}
    }
    else
    {
        sbuf[flag][flag1]=inB;
        if( ++flag1==10 ) {   flag1=0;}
    }
}

void interrupt far (*asyncvect)(void);
/******************************
 描述: 处理通讯口COM1接收数据的中断服务程序
******************************/
void interrupt far asyncint(void)
{
    unsigned char B;
    disable();
    B=inportb(SERIAL_COMM);
    if( B==0xfc ) 
    {   
    	 if(captureflag==0)  captureflag=1;
    }
    else PushKBuffer_JZ(B);
    outportb(0x20, 0x20);
    enable();
}

/******************************
 描述: 通讯口COM1初始化 (9600bps N 8 1)
******************************/
void InitCOM1(void)
{
    unsigned char B;
    outportb(SERIAL_COMM+3, 0x80); // DLAB=1; set div rate
    outportb(SERIAL_COMM, 0x0C); // low baud
    outportb(SERIAL_COMM+1, 0x00); // high baud
    outportb(SERIAL_COMM+3, 0x03); // DLAB=0; set data format
    outportb(SERIAL_COMM+4, 0x0b);
    outportb(SERIAL_COMM+1, 0x01); // interrupt enable
    /* install affair-routine for serial communications */
    asyncvect=getvect(0x0C);
    disable();
    inportb(SERIAL_COMM);
    inportb(SERIAL_COMM+6);
    inportb(SERIAL_COMM+3);
    inportb(SERIAL_COMM+2);
    outportb(SERIAL_COMM+4, 0x0B);
    outportb(SERIAL_COMM+1, 0x01);
    B=inportb(0x21)&0xEF; // 1110 1111
    outport(0x21, B);
    setvect(0x0C, asyncint);
    enable();
}

/******************************
 描述: 禁止通讯口COM1接收任何数据
******************************/
void DisableCOM1(void)
{
    disable();
    outportb(SERIAL_COMM+1, 0x00);
    outportb(SERIAL_COMM+4, 0x00);
    outportb(0x21, inportb(0x21)&0x10);
    enable();
    setvect(0x0C, asyncvect);
}

/*
void ___JZHM_FUNCS___(void)
*/

/******************************
 描述: 直接显示内存字库中文
 参数:
    -x,y	起点位置
    -*ptr	显示内容
    -*idx	字库位置索引数组
    -lens 有效内容长度 (Default.100 表示空格)
    -r,g,b 字体颜色
******************************/
void ShowGB_CRT(int x, int y, unsigned char *idx, int lens, int r, int g, int b)
{
    int t,k,m=0,tindex=0;
    int ttx=x,tty=y;
    long fMatrixOffset=0L;
    unsigned char buffer[32]={0};
    for(tindex=0; tindex<lens; tindex++)
    {
        fMatrixOffset=idx[tindex]*32L;
        memcpy(buffer, hz_buff+fMatrixOffset, 32);
        m=0;
        for(t=0; t<16; t++)
        {
            for(k=0; k<8; k++)
            {
                if( buffer[m]&(0x80>>k) )
                {   PutPixel(ttx+k, tty+t, r, g, b);}
            }
            m++;
            for(k=0; k<8; k++)
            {
                if( buffer[m]&(0x80>>k) )
                {   PutPixel(ttx+8+k, tty+t, r, g, b);}
            }
            m++;
        }
        ttx+=16;
    }
}

/******************************
 描述: 显示窗口菜单中的标题文字
******************************/
void DispTrigMenu(const int ID, char *ptr)
{
    Bar(300+XoStart, 200+YoStart, 500+XoStart, 260+YoStart, 222, 222, 222);
    Rectangle(305+XoStart, 205+YoStart, 496+XoStart, 255+YoStart, 0, 200, 0);
    if( VarST3000.Language )
    {   // 英文显示

⌨️ 快捷键说明

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