📄 zhjc.c
字号:
/*======================================
程序名称:达爱思实验装置综合检测程序
程序设计:高敏杰 Jerry0513@126.com
----------------------------------------
源文件名:dete51c.c
创建时间:2004-12-07
编程语言:KEIL/Franklin C51
编译选项:BANK 0, OPTIMIZE(0), SMALL
开发环境:Dais集成开发环境 V3.0
运行环境:Dais-958PT+ & 综合检测状态
======================================*/
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
#define NoDisp 0
#define NeedDisp 1
//#define RecPlayCs 0x8e18
/* LCD液晶显示器 */
#define wrcode 0
#define wrdata 1
#define x1 0x80
#define x2 0x88
#define y 0x80
#define LCD_X 0x30
#define LCD_Y 0x31
#define LCD_X1 0x32
#define LCD_Y1 0x33
#define COUNT 0x34
#define COUNT1 0x35
#define COUNT2 0x36
#define COUNT3 0x37
#define LCD_DATA 0x38
#define LCD_DATA1 0x39
#define LCD_DATA2 0x3A
uchar xdata *WRCODE = 0x8e08; //0x80e4; /*写命令*/
uchar xdata *WRDATA = 0x8e09; //0x80e5; /*写数据*/
uchar xdata *RDSTAT = 0x8e0a; //0x80e6; /*读状态*/
uchar xdata *RDDATA = 0x8e0b; //0x80e7; /*读数据*/
/* 8255并行口 */
uchar xdata *CS8255 = 0xffff; //0x8063; /*控制命令*/
uchar xdata *OUTSEG = 0xfffc; //0x8060; /*字形控制口*/
uchar xdata *OUTBIT = 0xfffd; //0x8061; /*字位/键扫控制口*/
uchar xdata *IN_KEY = 0xfffe; //0x8062; /*键盘读入口*/
/* 左边16个数字键定义 */
#define kbA0 5
#define kbA1 1
#define kbA2 9
#define kbA3 17
#define kbA4 4
#define kbA5 12
#define kbA6 20
#define kbA7 0
#define kbA8 8
#define kbA9 16
#define kbAA 24
#define kbAB 28
#define kbAC 25
#define kbAD 29
#define kbAE 21
#define kbAF 13
/* 右边16个功能键定义 */
#define kbB0 7
#define kbB1 3
#define kbB2 11
#define kbB3 19
#define kbB4 6
#define kbB5 14
#define kbB6 22
#define kbB7 2
#define kbB8 10
#define kbB9 18
#define kbBA 26
#define kbBB 30
#define kbBC 27
#define kbBD 31
#define kbBE 23
#define kbBF 15
/* ADC0809 */
uchar xdata *CS0809 = 0x8e28; //0x80e8;
/* DAC0832 */
uchar xdata *CS0832 = 0x8c00; //0x80c0;
#define DA_0V 0x80
#define DA_2V5 0xc0
#define DA_5V 0xff
/* I/O, 244/273 */
uchar xdata *CS_IO = 0x8e00; //0x80e0;
/*闭环,374*/
uchar xdata *cs_374 = 0x8E0C;
/* 8253 */
uchar xdata *CS8253 = 0x8203; //0x8023;
uchar xdata *CS8253CNT0 = 0x8200; //0x8020;
/* 16x16端口地址及字形代码 */
uchar xdata *HROW = 0x8a03; //0x80ab; /*列代码高八位字形 273(4)*/
uchar xdata *LROW = 0x8a00; //0x80a8; /*列代码低八位字形 273(1)*/
uchar xdata *HLINE = 0x8a02; //0x80aa; /*行扫描高八位字位 273(3)*/
uchar xdata *LLINE = 0x8a01; //0x80a9; /*行扫描低八位字位 273(2)*/
uchar code FontData_DA[32] =
{ /*达*/
0x00,0x00,0x40,0x80,0x30,0x80,0x10,0x80,
0x0F,0xFC,0x00,0x80,0x00,0x80,0xE0,0x80,
0x21,0x40,0x21,0x20,0x22,0x18,0x24,0x0C,
0x28,0x08,0x50,0x02,0x8F,0xFC,0x00,0x00
};
uchar code FontData_AI[32] =
{ /*爱*/
0x00,0xF8,0x3F,0x90,0x12,0x10,0x09,0x20,
0x3F,0xFE,0x22,0x02,0x42,0x00,0x3F,0xFC,
0x04,0x00,0x07,0xF0,0x0C,0x20,0x0B,0x40,
0x10,0xC0,0x63,0x30,0x8C,0x0E,0x30,0x04
};
uchar code FontData_SI[32] =
{ /*思*/
0x00,0x00,0x1F,0xF8,0x11,0x08,0x11,0x08,
0x1F,0xF8,0x11,0x08,0x11,0x08,0x1F,0xF8,
0x00,0x00,0x01,0x00,0x08,0x88,0x48,0x84,
0x48,0x16,0xC8,0x12,0x07,0xF0,0x00,0x00
};
uchar code FontData_CHAN[32] =
{ /*产*/
0x01,0x00,0x00,0x80,0x7F,0xFE,0x08,0x10,
0x06,0x20,0x24,0x44,0x3F,0xFE,0x20,0x00,
0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,
0x40,0x00,0x40,0x00,0x80,0x00,0x00,0x00
};
uchar code FontData_PIN[32] =
{ /*品*/
0x00,0x00,0x0F,0xF0,0x08,0x10,0x08,0x10,
0x08,0x10,0x0F,0xF0,0x08,0x10,0x00,0x00,
0x7E,0xFC,0x42,0x84,0x42,0x84,0x42,0x84,
0x42,0x84,0x7E,0xFC,0x42,0x84,0x00,0x00
};
uchar code FontData_JI[32] =
{ /*技*/
0x10,0x20,0x10,0x20,0x10,0x20,0xFD,0xFE,
0x10,0x20,0x14,0x20,0x19,0xFC,0x31,0x08,
0xD0,0x88,0x10,0x90,0x10,0x60,0x10,0x60,
0x10,0x90,0x11,0x0E,0x56,0x04,0x20,0x00
};
uchar code FontData_SHU[32] =
{ /*术*/
0x01,0x00,0x01,0x20,0x01,0x10,0x01,0x00,
0xFF,0xFE,0x01,0x00,0x03,0x80,0x05,0x40,
0x05,0x20,0x09,0x10,0x11,0x18,0x21,0x0E,
0xC1,0x04,0x01,0x00,0x01,0x00,0x00,0x00
};
uchar code FontData_DE[32] =
{ /*的*/
0x10,0x80,0x10,0x80,0x20,0x80,0x7C,0xFC,
0x45,0x04,0x45,0x04,0x46,0x04,0x7C,0x84,
0x44,0x44,0x44,0x64,0x44,0x24,0x44,0x04,
0x7C,0x04,0x44,0x28,0x40,0x10,0x00,0x00
};
uchar code FontData_DIAN[32] =
{ /*典*/
0x02,0x40,0x02,0x40,0x02,0x40,0x1F,0xF8,
0x12,0x48,0x12,0x48,0x1F,0xF8,0x12,0x48,
0x12,0x48,0x12,0x48,0x7F,0xFE,0x04,0x20,
0x06,0x10,0x0C,0x18,0x18,0x0C,0x20,0x08
};
uchar code FontData_FAN[32] =
{ /*范*/
0x04,0x20,0x04,0x20,0xFF,0xFE,0x04,0x60,
0x40,0x00,0x31,0xF8,0x91,0x08,0x61,0x08,
0x49,0x08,0x09,0x38,0x11,0x10,0xE1,0x00,
0x21,0x04,0x21,0x04,0x20,0xFC,0x20,0x00
};
uchar code FontData_ZHI[32] =
{ /*质*/
0x00,0x7C,0x3F,0x80,0x20,0x80,0x2F,0xF8,
0x20,0x80,0x21,0x00,0x27,0xF0,0x24,0x10,
0x24,0x90,0x24,0x90,0x24,0x90,0x24,0x90,
0x21,0x40,0x42,0x30,0x44,0x18,0x88,0x10
};
uchar code FontData_BAO[32] =
{ /*保*/
0x10,0x00,0x1B,0xF8,0x12,0x08,0x22,0x08,
0x32,0x08,0x63,0xF8,0xA0,0x40,0x2F,0xFE,
0x20,0xE0,0x21,0x60,0x21,0x50,0x22,0x58,
0x24,0x4E,0x28,0x44,0x20,0x40,0x00,0x00
};
uchar code FontData_ZHENG[32] =
{ /*证*/
0x00,0x00,0x40,0x00,0x27,0xFE,0x30,0x20,
0x20,0x20,0x00,0x20,0xE2,0x20,0x22,0x20,
0x22,0x3C,0x22,0x20,0x22,0x20,0x22,0x20,
0x2A,0x20,0x32,0x20,0x2F,0xFE,0x00,0x00
};
uchar code FontData_COMMA[32] =
{ /*,*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,
0x30,0x00,0x10,0x00,0x20,0x00,0x00,0x00
};
uchar code FontData_EXCMARK[32] =
{ /*!*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,
0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,
0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00
};
/* 串并转换 */
uchar code S2PTab[10] = {0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x09};
/* 音频驱动 */
sbit Speaker = P1^7;
/*语音录放单元*/
uchar xdata *RecCs = 0x8e18;
uchar code RecTab[20] =
{
0x40,0x42,0x44,0x46,0x48,0x4a,0x4c,0x4e,0x50,0x52,
0x54,0x56,0x58,0x5a,0x5c,0x5e,0x60,0x62,0x64,0x66
};
uchar code PlayTab[40] =
{0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,
0xd0,0xd1,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xdb,0xdc,0xdd,0xde,0xdf,
0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7
};
/* 键盘扫描、LED八段数码管显示 */
uchar LedBuf[8];
uchar code LedMap[16] = /*LED字形代码表*/
{
0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8,
0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e
};
uchar code KeyTab[32] = /*键盘阵列表*/
{
0x07, 0x01, 0x10, 0x18, 0x04, 0x00, 0x11, 0x19,/*A7,A1,B7,B1,A4,A0,B4,B0*/
0x08, 0x02, 0x12, 0x1a, 0x05, 0x0f, 0x13, 0x1b,/*A8,A2,B8,B2,A5,AF,B5,BF*/
0x09, 0x03, 0x14, 0x1c, 0x06, 0x0e, 0x15, 0x1d,/*A9,A3,B9,B3,A6,AE,B6,BE*/
0x0a, 0x0c, 0x16, 0x1e, 0x0b, 0x0d, 0x17, 0x1f /*AA,AC,BA,BC,AB,AD,BB,BD*/
};
/* LCD液晶显示器显示的菜单 */
uchar code *DispMsg0 =
"按键选择实验项目"
"2.I/O 3.键&显"
"0.A/D 1.D/A "
"首页 按F2转下页";
uchar code *DispMsg1 =
"按键选择实验项目"
"6.直流 7.温控 "
"4.压力 5.步进 "
"F1回上页F2转下页";
uchar code *DispMsg2 =
"按键选择实验项目"
"A.串并 B.音频 "
"8.8253 9.16x16 "
"F1回上页F2转下页";
uchar code *DispMsg3 =
"按键选择实验项目"
"E.IC 卡读写实验"
"C.录音 D.放音 "
"末页 按F1回上页";
/*IC卡读写程序,详见IC.asm*/
void IC_Main();
/*写命令或数据*/
void LCD_Write(uchar CodeOrData,uchar val)
{
uchar vstat;
do /*检测LCD忙闲状态*/
vstat=*RDSTAT;
while(vstat&0x80);
if(!CodeOrData) *WRCODE = val;
else *WRDATA = val;
}
/*清DDRAM*/
void LCD_ClrRam(void)
{
LCD_Write(wrcode,0x30);
LCD_Write(wrcode,0x01);
}
/*LCD初始化*/
void LCD_Init()
{
LCD_Write(wrcode,0x30); /*基本指令操作*/
LCD_Write(wrcode,0x01); /*清除显示*/
LCD_Write(wrcode,0x06); /*指定在读写数据时光标的移动方向*/
LCD_Write(wrcode,0x0c); /*开显示,关光标,不闪烁*/
}
/*显示汉字或字符*/
void LCD_DispStr(uchar code *chn)
{
uchar i,j;
LCD_Write(wrcode,0x30);
LCD_Write(wrcode,0x80);
for(j=0;j<4;j++) for(i=0;i<16;i++) LCD_Write(wrdata,chn[j*16+i]);
}
/*显示点阵*/
void LCD_DispLat(uchar data1,uchar data2)
{
uchar i,j,k,x;
x=x1;
for(k=0;k<2;k++)
{
for(j=0;j<16;j++)
{
for(i=0;i<8;i++)
{
LCD_Write(wrcode,0x34);
LCD_Write(wrcode,y+j*2);
LCD_Write(wrcode,x+i);
LCD_Write(wrcode,0x30);
LCD_Write(wrdata,data1);
LCD_Write(wrdata,data1);
}
for(i=0;i<8;i++)
{
LCD_Write(wrcode,0x34);
LCD_Write(wrcode,y+j*2+1);
LCD_Write(wrcode,x+i);
LCD_Write(wrcode,0x30);
LCD_Write(wrdata,data2);
LCD_Write(wrdata,data2);
}
}
x=x2;
}
LCD_Write(wrcode,0x36);
}
/*当data1=0xff,data2=0xff时,在x0,y0处反白显示16xl*yl.*/
void LCD_DispCon(uchar data1,uchar data2,uchar x0,uchar y0,uchar xl,uchar yl)
{
uchar i,j;
for(j=0;j<yl;j++)
{
for(i=0;i<xl;i++)
{
LCD_Write(wrcode,0x34);
LCD_Write(wrcode,y0+j);
LCD_Write(wrcode,x0+i);
LCD_Write(wrcode,0x30);
LCD_Write(wrdata,data1);
LCD_Write(wrdata,data2);
}
}
LCD_Write(wrcode,0x36);
}
/* 延时程序 */
void Delay(uint count)
{
uchar i;
while(count-- != 0) for(i=0;i<120;i++);
}
/* 延时程序 */
void RecPlayDelay(uint count)
{
uchar i;
while(count-- != 0) for(i=0;i<255;i++);
}
/* 字节倒序,用于16x16列代码高八位字形 */
uchar ByteRevOrd(uchar sbyte)
{
uchar cnt, r, i = 0, sbuf[8];
for(cnt=0,r=0x80;cnt<8;cnt++,r>>=1) sbuf[cnt]=sbyte&r?1:0;
for(cnt=8,r=0x80;cnt>0;cnt--,r>>=1) if(sbuf[cnt-1]) i|=r;
return(i);
}
/* LED 16x16显示函数 */
void Disp16Led(uchar fontdata[32])
{
uchar cnt, i = 0, r = 1;
for(cnt=0;cnt<8;cnt++) /*显示上半部分字形*/
{
*HROW = ByteRevOrd(fontdata[i]);
*LROW = fontdata[i+1];
*HLINE = r;
Delay(1);
*HLINE = 0;
r <<= 1;
i += 2;
}
r = 1;
for(cnt=0;cnt<8;cnt++) /*显示下半部分字形*/
{
*HROW = ByteRevOrd(fontdata[i]);
*LROW = fontdata[i+1];
*LLINE = r;
Delay(1);
*LLINE = 0;
r <<= 1;
i += 2;
}
}
/* LED七段码显示函数 */
void DispLed()
{
uchar i, pos=0x80; /*pos为最高字位*/
for(i=0; i<8; i++) /*一次扫描8个LED*/
{
*OUTSEG = LedBuf[i]; /*写字形代码*/
*OUTBIT = pos; /*写字位控制*/
Delay(2); /*延时*/
pos>>=1; /*移位显示*/
}
}
/* 读取键盘状态(高4位不用) */
uchar TestKey()
{
*OUTBIT = 0; /*置输出线为0*/
return(~(*IN_KEY) & 0xf);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -