3_25.c
来自「浙大《C语言设计基础课程设计》中的例程 有些比较好的代码!」· C语言 代码 · 共 80 行
C
80 行
/*-------例程3-25 -------*/
#include<dos.h>
#include<conio.h>
#include<stdio.h>
#define TEXT_MODE 0x03
#define GRAP_MODE 0x13
char hanzi[][72]={
/* 以下是“写”的24点阵华文行楷点阵字模,72 byte */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x02,0x1F,0xC0,0x03,0xF8,0x60,0x03,
0x00,0xF0,0x07,0x21,0xE0,0x0E,0x3F,0x00,
0x0E,0x3F,0x00,0x04,0x3E,0x00,0x00,0x20,
0x00,0x00,0x6F,0xC0,0x00,0x78,0x60,0x00,
0x60,0x60,0x00,0x1E,0x60,0x06,0xFE,0x60,
0x07,0xE0,0xE0,0x07,0x20,0xC0,0x00,0x1F,
0xC0,0x00,0x07,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/* 以下是“屏”的24点阵华文行楷点阵字模,72 byte */
0x00,0x07,0x80,0x00,0x3F,0xC0,0x00,0x5D,
0xC0,0x00,0x63,0x80,0x00,0x5F,0x80,0x00,
0xFF,0x80,0x00,0xF1,0x80,0x01,0xAF,0xC0,
0x01,0xB3,0x00,0x01,0x27,0x80,0x03,0x7F,
0x00,0x02,0x3D,0x00,0x06,0x31,0xF0,0x04,
0x3F,0xF8,0x0C,0xF1,0x00,0x0F,0xE1,0x00,
0x18,0x21,0x00,0x30,0x21,0x00,0x20,0x61,
0x00,0x40,0x41,0x00,0x00,0x01,0x00,0x00,
0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
};
/*初始化屏幕为图形模式*/
void InitScreen()
{
union REGS regs;
regs.h.ah=0; /* 功能号为0 */
regs.h.al=GRAP_MODE;/* 定义为VGA256色320×200图形模式 */
int86(0x10,®s,®s); /*调用中断0x10******/
}
void CloseScreen()
{ /*将屏幕设置成文本模式*/
union REGS regs;
regs.h.ah=0;
regs.h.al=TEXT_MODE; /*定义为文本模式*/
int86(0x10,®s,®s);
}
void PutPixel(int x,int y,int color)
{ /*直接在屏幕(x,y)点坐标上画一个颜色为color的点.*/
char far *addr=(char far*)0xA0000000L;
/*************************************************************************** VGA256色320*200图形模式的VRAM从A000:0000 到 A000:F9FF 为止,总共320*200=64000 个字节。
***************************************************************************/
*(addr + (y<<8)+(y<<6) + x)=color; /* 直接显示*/
/***************************************************************************
相当于*(addr+y*320+x)=color;但这样速度慢。因为320=256+64 所以用移位的方法加速显示。
***************************************************************************/
}
void drawmat(char *mat,int matsize,int x,int y,int color)
{ /*依次:字模指针、点阵大小、起始坐标(x,y)、颜色*/
int i,j,k,n;
n=(matsize-1)/8+1;
for(j=0;j<matsize;j++)
for(i=0;i<n;i++)
for(k=0;k<8;k++)
if(mat[j*n+i]&(0x80>>k)) /*测试为1的位则显示*/
PutPixel(x+i*8+k,y+j,color);
}
int main()
{
int i;
InitScreen(); /* 初始化屏幕 */
for(i=0;i<2;i++)
drawmat(hanzi[i],24,120+i*40,80,i+1);
getch();
CloseScreen();/* 还原为文本模式 */
return 0;
}
/*-------例程3-25 -------*/
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?