📄 可视听诊器设计.c
字号:
#include <stdio.h>
#include <reg52.h>
#include <math.h>
#include <absacc.h>
#include <string.h> //头文件
#define uchar unsigned char
/*lcd函数声明*/
PR1();
PR11();
PR12();
void ST01(void);
void ST3(void);
INT_1 ();
CLEAR ();
CCW2_PR ();
void DRAW();
W_DOT ();
//ad函数声明
void collect();
void delay(uchar x);
uchar readadc(void);
void adcck(void);
void adc(void);
//键函数声明
uchar scankey(void);
void scan(void);
keydo(keyvalue);
tongxun();
exit();
//显示画面函数定义
display1();
display2();
display4();
display5();
display6();
display7();
display10();
void display();
/* lcd 地址定义 */
sbit cd=P1^7; //定义C/D
sbit wr=P3^6; //定义wr
sbit rd=P3^7; //定义rd
sbit yjcs=P2^7; //定义lcd 的cs
/* ad 地址定义 */
sbit adcdo=P3^2;
sbit adccs=P2^6;
sbit adcclk=P1^6;
sbit ramcs=P2^5;
/* 常数定义 */
#define para1 0x10; //显示宽度16个
/* 宏定义 */
uchar bei_data=6; //ad参数缩小倍数
uchar lcd_step=1; //读ram时的读数间隔
uchar average;//采集数据的中间点
/*标志位*/
char flag,flag1;
/*参数声明*/
bit a;
long int ram_wr=0;
unsigned int O_X,O_Y, com,dat1,dat2,adc_sum;//com为液晶屏的指令代码,dat2显示文本垂直位置
uchar code_1, wave_count=0, adc_t, lb_date, adc_date, keyvalue;
uchar xdata RAM[5120]_at_ 0xc400; //外部存储器,注意必须为0XCxxx,跟P2口有关
/******************************/
code uchar CCTAB [34] [32] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF, // 一,0x00
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xFE,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00, // 二,0x01
0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,
0x00,0x00,0x10,0xF8,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x04,0xFE,0x00,0x00,0x00,
0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x3F, // 三,0x02
0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,
0x00,0x08,0xFC,0x00,0x00,0x00,0x10,0xF8,
0x00,0x00,0x00,0x00,0x04,0xFE,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //空格,0x03
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x3F,0x21,0x21,0x21,0x3F,0x21,0x21, // 用,0x04
0x21,0x3F,0x21,0x21,0x21,0x41,0x41,0x80,
0x08,0xFC,0x08,0x08,0x08,0xF8,0x08,0x08,
0x08,0xF8,0x08,0x08,0x08,0x08,0x28,0x10,
0x00,0x1F,0x10,0x10,0x1F,0x10,0x10,0x1F, // 显,0x05
0x14,0x44,0x34,0x14,0x04,0x04,0xFF,0x00,
0x10,0xF8,0x10,0x10,0xF0,0x10,0x10,0xF0,
0x50,0x44,0x4C,0x50,0x40,0x44,0xFE,0x00,
0x00,0x3F,0x00,0x00,0x00,0x00,0xFF,0x01, // 示,0x06
0x01,0x09,0x19,0x21,0x41,0x01,0x05,0x02,
0x10,0xF8,0x00,0x00,0x00,0x04,0xFE,0x00,
0x00,0x20,0x18,0x0C,0x04,0x00,0x00,0x00,
0x00,0x40,0x30,0x17,0x04,0x84,0x44,0x0F, // 波,0x07
0x14,0x25,0xE4,0x24,0x28,0x29,0x32,0x24,
0x40,0x40,0x40,0xFC,0x44,0x48,0x40,0xF8,
0x08,0x10,0xA0,0x40,0xA0,0x10,0x0E,0x04,
0x00,0x7F,0x11,0x11,0x11,0x11,0x11,0xFF, // 形,0x08
0x11,0x11,0x11,0x11,0x21,0x21,0x41,0x01,
0x80,0xC4,0x0C,0x10,0x20,0x44,0x0C,0xD0,
0x20,0x42,0x06,0x08,0x10,0x20,0x40,0x80,
0x02,0x02,0xFF,0x04,0x08,0x0B,0x10,0x10, // 存,0x09
0x30,0x5F,0x90,0x10,0x10,0x10,0x11,0x10,
0x00,0x04,0xFE,0x00,0x00,0xF8,0x10,0x20,
0x44,0xFE,0x40,0x40,0x40,0x40,0x40,0x80,
0x10,0x10,0x18,0x25,0x24,0x60,0xBD,0x24, // 储,0x0a
0x25,0x26,0x24,0x25,0x26,0x24,0x20,0x20,
0x40,0x40,0x48,0xFC,0x50,0x64,0xFE,0x88,
0xFC,0x88,0x88,0xF8,0x88,0x88,0xF8,0x88,
0x40,0x27,0x24,0x04,0x05,0xE4,0x24,0x27, // 调,0x0b
0x24,0x25,0x25,0x2D,0x35,0x25,0x08,0x10,
0x04,0xFE,0x44,0x44,0xF4,0x44,0x54,0xFC,
0x04,0xF4,0x14,0x14,0xF4,0x04,0x14,0x08,
0x03,0x40,0x30,0x10,0x03,0x02,0xF2,0x13, // 通,0x0c
0x12,0x12,0x13,0x12,0x12,0x2A,0x44,0x03,
0xF8,0x10,0xA0,0x48,0xFC,0x48,0x48,0xF8,
0x48,0x48,0xF8,0x48,0x68,0x50,0x06,0xFC,
0x00,0x47,0x30,0x11,0x01,0x01,0xF1,0x11, // 讯,0x0d
0x17,0x11,0x11,0x11,0x15,0x19,0x11,0x01,
0x10,0xF8,0x10,0x10,0x10,0x10,0x10,0x50,
0xF0,0x10,0x10,0x10,0x0A,0x0A,0x06,0x00,
0x00,0x04,0xFE,0x10,0x11,0x23,0x25,0x7D, // 确,0x0e
0xA5,0x25,0x25,0x25,0x25,0x3D,0x22,0x04,
0x40,0x40,0x78,0x90,0x24,0xFE,0x24,0x24,
0xFC,0x24,0x24,0xFC,0x24,0x24,0x24,0x0C,
0x00,0x40,0x30,0x10,0x00,0x00,0xF0,0x10, // 认,0x0f
0x10,0x11,0x11,0x15,0x1A,0x12,0x04,0x08,
0x40,0x40,0x40,0x40,0x40,0x40,0xA0,0xA0,
0xA0,0x10,0x10,0x10,0x08,0x08,0x06,0x04,
0x00,0x00,0x7F,0x40,0x40,0x47,0x44,0x44, // 回,0x10
0x44,0x44,0x47,0x44,0x40,0x7F,0x40,0x00,
0x00,0x04,0xFE,0x04,0x44,0xE4,0x44,0x44,
0x44,0x44,0xC4,0x44,0x04,0xFC,0x04,0x00,
0x02,0x02,0x7F,0x04,0x09,0x11,0x21,0x3F, // 车,0x11
0x01,0x01,0xFF,0x01,0x01,0x01,0x01,0x01,
0x00,0x08,0xFC,0x00,0x00,0x00,0x20,0xF0,
0x00,0x04,0xFE,0x00,0x00,0x00,0x00,0x00,
0x00,0x40,0x33,0x12,0x02,0x02,0xF2,0x12, // 返,0x12
0x12,0x12,0x12,0x14,0x15,0x28,0x44,0x03,
0x08,0x1C,0xE0,0x00,0x00,0xF8,0x08,0x90,
0x50,0x20,0x50,0x8C,0x04,0x00,0x06,0xFC,
0x20,0x10,0x10,0x00,0xFF,0x20,0x24,0x3E, // 放,0x13
0x24,0x24,0x24,0x24,0x44,0x54,0x89,0x02,
0x40,0x40,0x40,0x84,0xFE,0x08,0x88,0x88,
0x50,0x50,0x20,0x50,0x50,0x88,0x0E,0x04,
0x01,0x01,0x01,0x01,0x01,0xFF,0x01,0x02, // 大,0x14
0x02,0x02,0x04,0x04,0x08,0x10,0x60,0x00,
0x00,0x00,0x00,0x00,0x04,0xFE,0x00,0x80,
0x80,0x40,0x40,0x20,0x10,0x0E,0x04,0x00,
0x20,0x20,0x27,0x44,0x49,0xF1,0x12,0x26, // 缩,0x15
0x4A, 0xFA, 0x42, 0x02, 0x1A, 0xE2, 0x42, 0x02,
0x40,0x20,0xFE,0x02,0x04,0xFE,0x20,0x44,
0xFE,0x84,0x84,0xFC,0x84,0x84,0xFC,0x84,
0x01,0x01,0x01,0x01,0x01,0x05,0x05,0x09, // 小,0x16
0x09,0x11,0x21,0x41,0x01,0x01,0x05,0x02,
0x00,0x00,0x00,0x00,0x00,0x40,0x20,0x10,
0x08,0x04,0x04,0x00,0x00,0x00,0x00,0x00,
0x10,0x10,0x10,0x13,0xFC,0x11,0x15,0x19, // 拉,0x17
0x30,0xD0,0x10,0x10,0x10,0x10,0x57,0x20,
0x80,0x40,0x48,0xFC,0x00,0x08,0x08,0x08,
0x90,0x90,0x90,0xA0,0x20,0x44,0xFE,0x00,
0x08,0x08,0x08,0x17,0x14,0x34,0x54,0x97, // 伸,0x18
0x14,0x14,0x14,0x17,0x14,0x10,0x10,0x10,
0x40,0x40,0x44,0xFE,0x44,0x44,0x44,0xFC,
0x44,0x44,0x44,0xFC,0x44,0x40,0x40,0x40,
0x00,0x3F,0x20,0x20,0x20,0x20,0x20,0x2F, // 压,0x19
0x20,0x20,0x20,0x20,0x40,0x40,0x9F,0x00,
0x08,0xFC,0x80,0x80,0x80,0x80,0x88,0xFC,
0x80,0xA0,0x98,0x88,0x80,0x84,0xFE,0x00,
0x00,0x00,0x7F,0x00,0x11,0x08,0x01,0x01, // 采,0x1a
0xFF,0x03,0x05,0x09,0x11,0x61,0x01,0x01,
0x08,0x7C,0x80,0x08,0x18,0xA0,0x00,0x04,
0xFE,0x80,0x40,0x30,0x0E,0x04,0x00,0x00,
0x09,0x08,0x1F,0x31,0x5F,0x91,0x1F,0x11, // 集,0x1b
0x1F,0x11,0xFF,0x05,0x09,0x11,0x61,0x01,
0x00,0x90,0xF8,0x00,0xF0,0x00,0xF0,0x00,
0xF8,0x00,0xFE,0x40,0x20,0x1C,0x08,0x00,
0x02,0x44,0x2F,0x28,0x0F,0x08,0xEF,0x28, // 谢,0x1c
0x28,0x3F,0x21,0x2A,0x34,0x28,0x12,0x01,
0x08,0x88,0xC8,0x88,0x88,0xFE,0x88,0x88,
0xC8,0xA8,0xA8,0x88,0x88,0x88,0xA8,0x10,
0x10,0x10,0x1F,0x20,0x27,0x64,0xA4,0x24, // 使,0x1e
0x27,0x24,0x22,0x21,0x20,0x21,0x26,0x28,
0x40,0x44,0xFE,0x40,0xFC,0x44,0x44,0x44,
0xFC,0x44,0x40,0x80,0xC0,0x30,0x0E,0x04,
0x00,0x3F,0x21,0x21,0x21,0x3F,0x21,0x21, // 用,0x1f
0x21,0x3F,0x21,0x21,0x21,0x41,0x41,0x80,
0x08,0xFC,0x08,0x08,0x08,0xF8,0x08,0x08,
0x08,0xF8,0x08,0x08,0x08,0x08,0x28,0x10,
0x03,0x42,0x32,0x13,0x02,0x02,0xF3,0x12, // 退,0x20
0x12,0x12,0x12,0x13,0x12,0x28,0x44,0x03,
0xF8,0x08,0x08,0xF8,0x08,0x08,0xFC,0x08,
0xD0,0x20,0x90,0x0C,0x04,0x00,0x06,0xFC,
0x01,0x01,0x21,0x21,0x21,0x21,0x3F,0x21, // 出,0x21
0x01,0x41,0x41,0x41,0x41,0x41,0x7F,0x40,
0x00,0x00,0x08,0x08,0x08,0x08,0xF8,0x08,
0x00,0x04,0x04,0x04,0x04,0x04,0xFC,0x04,
0x00,0x00,0x7F,0x44,0x44,0x44,0x44,0x44, // 四,0x21
0x44,0x44,0x48,0x50,0x40,0x7F,0x40,0x00,
0x00,0x04,0xFE,0x44,0x44,0x44,0x44,0x44,
0x44,0x3C,0x04,0x04,0x04,0xFC,0x04,0x00
};
/*------------------------------------------------
The main C function. Program execution starts
here after stack initialization.
------------------------------------------------*/
main()
{ unsigned int i=0;
yjcs=0;
INT_1(); /* 屏幕初始化函数 */
CLEAR(); /* 清屏函数 */
for(i=0;i<5120;i++)
{RAM[i]=0x00;} //对外部RAM初始化
display1(); //显示开机画面
do //等待S6确定
{scan();
if (keyvalue==0x3d) exit();
}while (keyvalue!=0x1f);
while(1)
{INT_1();
CLEAR();
display2(); //显示菜单选择画面
flag=1;
do
{ scan();
if(keyvalue==0x3b)//s4上移
{ if (dat2>=7) dat2=1; //光标垂直方向赋值
else dat2=dat2+2;
if (flag>=4) flag=1; //光标标志赋值
else flag++;
display4(); /* 显示光标纵向移*/
}
else if(keyvalue==0x37)//s3下移
{ if (dat2<=1) dat2=7;
else dat2=dat2-2;
if (flag<=1) flag=4;
else flag--;
display4();
}
} while (keyvalue!=0x1f);//S6确认
switch(flag)
{case 1:collect();break;
case 2:display(); break;
case 3:tongxun();break;
case 4:exit();break;}
}
}
void collect(void)
{ CLEAR();
display5(); //显示通讯中画面
ram_wr=0;
TCON=0x40; //T1记时停
TMOD=0x00; //T1工作方式为0模式,
TH1=0X00;
TL1=0X00;
IE=0x88; //开中断,定时器1开中断
while(ram_wr<5120)
{a=0;
TH1=0xe7; //按照香农定理,采样频率大于1200HZ,就是时间要小于0.83ms,
TL1=0x00; //即低于830us 取0.8ms
TR1=1; //启动定时器1
while(a==0)
{;} }
TR1=0;//关闭定时器1
ram_wr=0; //存贮地址的第1个
yjcs=1;
yjcs=0;
IE=0X00;
}
void TIMER(void) interrupt 3 //采集并存储数据
{ adc();
//yjcs=1; /*lcd的cs值为1LCD不工作*/
//ramcs=1; //打开存储器6264
RAM[ram_wr]=adc_date; //wave赋值给ram
ram_wr++; //ram 数组下标
a=1;
}
/*****************************/
/*图像显示*/
/****************************/
void display()
{ram_wr=0;
DRAW();
do
{scan();
{if(keyvalue==0x3e)
{bei_data++;
if (bei_data==8) bei_data=0;
DRAW();}
else if(keyvalue==0x2f)
{ram_wr=ram_wr+128;
if(ram_wr>=1024) ram_wr=0;
DRAW();}
}
}while(keyvalue!=0x3d);
}
/**************************/
/* 屏幕初始化函数 */
/**************************/
INT_1()
{ dat1=0x00; /*设文本显示区域首地址*/
dat2=0x00;
com=0x40;
PR1();
dat1=para1; /*设文本显示区域宽度*/
dat2=0x00;
com=0x41;
PR1();
dat1=0x00; /*设图形显示区域首地址*/
dat2=0x08;
com=0x42;
PR1();
dat1=para1; /*设图形显示区域宽度*/
dat2=0x00;
com=0x43;
PR1();
com=0xa3; /*光标形状设置*/
PR12();
com=0x80; /*显示方式设置逻辑"或"合成*/
PR12();
com=0x9c; /*显示开关设置 开文本和图形显示*/
PR12();
}
/***************************/
/* 清显示函数 */
/***************************/
CLEAR()
{ unsigned int i;
dat1=0x00;
dat2=0x00;
com=0x24; /* 设置显示地址 */
PR1();
com=0xb0; /* 设置自动写方式 */
PR12();
for(i=0;i<8200;i++) /* 清8K存储器 */
{ ST3();
cd=0;
P0=0xff;
P0=0x00;
wr=0;
//NOP();
wr=1;
}
com=0xb2; /* 设置自动写方式结束*/
PR12();
}
/********************************/
/* 汉字写入(图形方式)函数 */
/********************************/
CCW2_PR()
{ unsigned int i,j,count1;
i=para1;
j=i*O_Y+O_X+0x0800; /* 图形显示区首地址为0x0800*/
for(count1=0;count1<16;count1++)
{dat1=j%256; /* 显示地址设置 */
dat2=j/256;
com=0x24;
PR1();
dat2=CCTAB[code_1][count1];
com=0xc0;
PR11();
dat2=CCTAB[code_1][count1+16];
PR11();
j=j+i;
}
}
/**************************/
/* 绘点函数 */
/****************************/
W_DOT()
{ uchar j;
unsigned int k;
j=O_X%8;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -