📄 main.c
字号:
/*--------------------------------------------------------*\
|***************简易心电图仪源程序*************************|
|**********作者:李桃*******2007年3月**********************|
|**********************************************************|
|**********IOB低八位为数据口,第8--13位为控制线*************|
|*** P1_8 P1_9 P1_10 P1_11 P1_12 P1_13 ***|
|*** | | | | | | ***|
|*** DI RW E CS1 CS2 RST ***|
\*--------------------------------------------------------*/
#include "SPCE061V004.H"
#include "bit.h"
#define DI P1_8 //数据,指令选择:1数据,0指令
#define RW P1_9 //读,写选择:1读,0写
#define E P1_10 //读写使能1有效,下降沿锁定数/据
#define CS1 P1_11 //左半屏选择0有效
#define CS2 P1_12 //右半屏选择0有效
#define RST P1_13 //复位0有效
typedef unsigned int uint;
uint min=0,sec=0,count=0;
uint *min_a,*min_b,*sec_a,*sec_b;
uint huan[]=
{
/*-- 文字: 欢 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x14,0x24,0x44,0x84,0x64,0x1C,0x20,0x18,0x0F,0xE8,0x08,0x08,0x28,0x18,0x08,0x00,
0x20,0x10,0x4C,0x43,0x43,0x2C,0x20,0x10,0x0C,0x03,0x06,0x18,0x30,0x60,0x20,0x00,
};
uint ying[]=
{
/*-- 文字: 迎 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x40,0x41,0xCE,0x04,0x00,0xFC,0x04,0x02,0x02,0xFC,0x04,0x04,0x04,0xFC,0x00,0x00,
0x40,0x20,0x1F,0x20,0x40,0x47,0x42,0x41,0x40,0x5F,0x40,0x42,0x44,0x43,0x40,0x00,
};
uint shi[]=
{
/*-- 文字: 使 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x40,0x20,0xF0,0x1C,0x07,0xF2,0x94,0x94,0x94,0xFF,0x94,0x94,0x94,0xF4,0x04,0x00,
0x00,0x00,0x7F,0x00,0x40,0x41,0x22,0x14,0x0C,0x13,0x10,0x30,0x20,0x61,0x20,0x00,
};
uint yong[]=
{
/*-- 文字: 用 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x00,0xFE,0x22,0x22,0x22,0x22,0xFE,0x22,0x22,0x22,0x22,0xFE,0x00,0x00,
0x80,0x40,0x30,0x0F,0x02,0x02,0x02,0x02,0xFF,0x02,0x02,0x42,0x82,0x7F,0x00,0x00,
};
uint xin_1[]=
{
/*-- 文字: 心 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x80,0x00,0x00,0xF0,0x00,0x01,0x02,0x1C,0x08,0x00,0x40,0x80,0x00,0x00,0x00,
0x04,0x03,0x00,0x00,0x3F,0x40,0x40,0x40,0x40,0x40,0x40,0x78,0x00,0x07,0x02,0x00,
};
uint dian[]=
{
/*-- 文字: 电 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0xF8,0x48,0x48,0x48,0x48,0xFF,0x48,0x48,0x48,0x48,0xF8,0x00,0x00,0x00,
0x00,0x00,0x0F,0x04,0x04,0x04,0x04,0x3F,0x44,0x44,0x44,0x44,0x4F,0x40,0x70,0x00,
};
uint tu[]=
{
/*-- 文字: 图 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0xFE,0x42,0x42,0x22,0x1E,0xAA,0x4A,0xAA,0x9A,0x0A,0x02,0x02,0xFE,0x00,0x00,
0x00,0xFF,0x42,0x42,0x41,0x41,0x48,0x72,0x54,0x40,0x41,0x43,0x41,0xFF,0x00,0x00,
};
uint yi_1[]=
{
/*-- 文字: 仪 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x40,0x20,0xF0,0x0C,0x03,0x00,0x38,0xC0,0x01,0x0E,0x04,0xE0,0x1C,0x00,0x00,0x00,
0x00,0x00,0xFF,0x00,0x40,0x40,0x20,0x10,0x0B,0x04,0x0B,0x10,0x20,0x60,0x20,0x00,
};
uint cheng_1[]=
{
/*-- 文字: 成 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0xF8,0x48,0x48,0x48,0xC8,0x08,0xFF,0x08,0x09,0x0A,0xC8,0x88,0x08,0x00,
0x40,0x30,0x0F,0x00,0x08,0x50,0x4F,0x20,0x10,0x0B,0x0C,0x12,0x21,0x40,0xF0,0x00,
};
uint du[]=
{
/*-- 文字: 都 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x20,0x24,0x24,0xA4,0x7F,0x24,0x34,0x28,0x24,0x00,0xFE,0x22,0x52,0x8A,0x06,0x00,
0x04,0x02,0x7F,0x25,0x25,0x25,0x25,0x7F,0x00,0x00,0xFF,0x08,0x08,0x10,0x0F,0x00,
};
uint xin_2[]=
{
/*-- 文字: 信 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x80,0x40,0x30,0xFC,0x07,0x0A,0xA8,0xA8,0xA9,0xAE,0xAA,0xA8,0xA8,0x08,0x08,0x00,
0x00,0x00,0x00,0x7F,0x00,0x00,0x7E,0x22,0x22,0x22,0x22,0x22,0x7E,0x00,0x00,0x00,
};
uint xi[]=
{
/*-- 文字: 息 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x00,0xFC,0x54,0x54,0x56,0x55,0x54,0x54,0x54,0xFC,0x00,0x00,0x00,0x00,
0x00,0x20,0x38,0x01,0x3D,0x41,0x41,0x45,0x59,0x41,0x41,0x71,0x00,0x08,0x30,0x00,
};
uint gong[]=
{
/*-- 文字: 工 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x02,0x02,0x02,0x02,0x02,0xFE,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,
};
uint cheng_2[]=
{
/*-- 文字: 程 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x10,0x12,0xD2,0xFE,0x91,0x11,0x80,0xBF,0xA1,0xA1,0xA1,0xA1,0xBF,0x80,0x00,0x00,
0x04,0x03,0x00,0xFF,0x00,0x41,0x44,0x44,0x44,0x7F,0x44,0x44,0x44,0x44,0x40,0x00,
};
uint xue[]=
{
/*-- 文字: 学 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x40,0x30,0x10,0x12,0x5C,0x54,0x50,0x51,0x5E,0xD4,0x50,0x18,0x57,0x32,0x10,0x00,
0x00,0x02,0x02,0x02,0x02,0x02,0x42,0x82,0x7F,0x02,0x02,0x02,0x02,0x02,0x02,0x00,
};
uint yuan[]=
{
/*-- 文字: 院 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0xFE,0x02,0x32,0x4A,0x86,0x0C,0x24,0x24,0x25,0x26,0x24,0x24,0x24,0x0C,0x04,0x00,
0xFF,0x00,0x02,0x04,0x83,0x41,0x31,0x0F,0x01,0x01,0x7F,0x81,0x81,0x81,0xF1,0x00,
};
uint ji[]=
{
/*-- 文字: 级 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x20,0x30,0xAC,0x63,0x20,0x18,0x02,0x82,0x7E,0x82,0x42,0x72,0x4E,0xC0,0x40,0x00,
0x10,0x13,0x11,0x49,0x29,0x91,0x8C,0x43,0x40,0x23,0x14,0x18,0x66,0xC1,0x40,0x00,
};
uint yi_2[]=
{
/*-- 文字: 医 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0xFE,0x42,0xA2,0x9E,0x92,0x92,0x92,0xF2,0x92,0x92,0x92,0xD2,0x82,0x00,0x00,
0x00,0x7F,0x40,0x40,0x50,0x48,0x44,0x43,0x40,0x41,0x42,0x5C,0x48,0x40,0x40,0x00,
};
uint liao[]=
{
/*-- 文字: 疗 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x10,0x60,0x80,0xFC,0x04,0x24,0x24,0x25,0x26,0x24,0xA4,0x64,0x24,0x06,0x04,0x00,
0x82,0x61,0x18,0x07,0x00,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,
};
uint zi[]=
{
/*-- 文字: 子 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x02,0x02,0x02,0x02,0x02,0xE2,0x12,0x0A,0x06,0x02,0x00,0x80,0x00,0x00,
0x01,0x01,0x01,0x01,0x01,0x41,0x81,0x7F,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,
};
uint er[]=
{
/*-- 文字: 二 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x06,0x04,0x00,0x00,0x00,
0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x18,0x10,0x00,
};
uint ban[]=
{
/*-- 文字: 班 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x42,0x42,0xFE,0x42,0x42,0xE0,0x00,0xFF,0x00,0x42,0x42,0xFE,0x42,0x42,0x42,0x00,
0x10,0x10,0x0F,0x88,0x49,0x20,0x18,0x07,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x00,
};
uint li[]=
{
/*-- 文字: 李 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x80,0x84,0x44,0xC4,0xA4,0x94,0x8C,0xFF,0x8C,0x94,0xA4,0x24,0x44,0xC4,0x40,0x00,
0x00,0x04,0x04,0x04,0x04,0x44,0x84,0x7E,0x05,0x04,0x04,0x04,0x04,0x04,0x04,0x00,
};
uint tao[]=
{
/*-- 文字: 桃 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x88,0x68,0xFF,0x28,0x48,0x00,0x10,0x20,0xFF,0x00,0xFF,0x80,0x20,0x18,0x08,0x00,
0x01,0x00,0x7F,0x00,0x40,0x42,0x22,0x19,0x07,0x00,0x3F,0x40,0x43,0x46,0x70,0x00,
};
uint nian[]=
{
/*-- 文字: 年 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x40,0x20,0x10,0x0C,0xE3,0x22,0x22,0x22,0xFE,0x22,0x22,0x22,0x22,0x02,0x00,0x00,
0x04,0x04,0x04,0x04,0x07,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x04,0x04,0x00,
};
uint san[]=
{
/*-- 文字: 三 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x04,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x04,0x00,0x00,
0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,
};
uint yue[]=
{
/*-- 文字: 月 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x00,0x00,0x00,0xFF,0x11,0x11,0x11,0x11,0x11,0xFF,0x00,0x00,0x00,0x00,
0x00,0x40,0x20,0x10,0x0C,0x03,0x01,0x01,0x01,0x21,0x41,0x3F,0x00,0x00,0x00,0x00,
};
uint zero[]=
{
/*-- 文字: 0 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,
};
uint one[]=
{
/*-- 文字: 1 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,
};
uint two[]=
{
/*-- 文字: 2 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,
};
uint three[]=
{
/*-- 文字: 3 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,
};
uint four[]=
{
/*-- 文字: 4 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,
};
uint five[]=
{
/*-- 文字: 5 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,
};
uint six[]=
{
/*-- 文字: 6 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,
};
uint seven[]=
{
/*-- 文字: 7 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,
};
uint eight[]=
{
/*-- 文字: 8 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,
};
uint nine[]=
{
/*-- 文字: 9 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,
};
uint gang[]=
{
/*-- 文字: - --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
};
uint maohao[]=
{
/*-- 文字: : --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,
};
static void delay(uint i)
{ //延时
while(i--)
*P_Watchdog_Clear=C_WDTCLR;
}
static void write_instr(uint idat)
{ //写指令
E=RW=DI=0;
P1_Lowbyte=idat;
E=1;E=0;
}
static void write_dat(uint ddat)
{ //写数据
E=RW=0;
DI=1;
P1_Lowbyte=ddat;
E=1;E=0;
}
static void write_word(uint cs,uint page,uint column,uint *p,uint rd)
{ //写一个16*16的汉字
uint i,j;
if(0==cs) //选择左半屏
{CS1=0,CS2=1;}
else //选择右半屏
{CS1=1,CS2=0;}
for(j=0;j<2;j++)
{
write_instr(0xb8|page++); //写字页地址
write_instr(0x40|column); //写字列地址
if(0==rd) //正常显示
{
for(i=0;i<16;i++)
write_dat(*(p+i+j*16));
}
else //反白显示
{
for(i=0;i<16;i++)
write_dat(~*(p+i+j*16));
}
}
*P_Watchdog_Clear=C_WDTCLR; //喂狗
}
static void write_char(uint cs,uint page,uint column,uint *p,uint rd)
{ //写一个8*16的字符
uint i,j;
if(0==cs) //选择左半屏
{CS1=0,CS2=1;}
else //选择右半屏
{CS1=1,CS2=0;}
for(j=0;j<2;j++)
{
write_instr(0xb8|page++); //写字符页地址
write_instr(0x40|column); //写字符列地址
if(0==rd) //正常显示
{
for(i=0;i<8;i++)
write_dat(*(p+i+j*8));
}
else //反白显示
{
for(i=0;i<8;i++)
write_dat(~*(p+i+j*8));
}
}
*P_Watchdog_Clear=C_WDTCLR; //喂狗
}
static void initial(void)
{ //单片机初始化及液晶复位
asm("int off");//关中断
*P_INT_Ctrl=C_IRQ5_2Hz;//设置时基信号
P1_Dir=0xffff;
P1_Attrib=0xffff;
P1=0xffff; //very very important!! ^_^
E=0;
RST=0;
delay(5);
RST=1;
write_instr(0x3f);
write_instr(0xc0);
asm("irq on");//开中断
}
static void lcd_clr(void)
{ //清屏
int i,j;
CS1=0;CS2=1;
for(i=0;i<8;i++)
{
write_instr(0xb8|i);
for(j=0;j<64;j++)
write_dat(0x00);//0不显示
}
CS1=1;CS2=0;
for(i=0;i<8;i++)
{
write_instr(0xb8|i);
for(j=0;j<64;j++)
write_dat(0x00);
}
}
static uint *num(uint n)
{
switch(n)
{
case 0:return zero;
case 1:return one;
case 2:return two;
case 3:return three;
case 4:return four;
case 5:return five;
case 6:return six;
case 7:return seven;
case 8:return eight;
case 9:return nine;
default:break;
}
}
main()
{
initial();
lcd_clr();
while(1)
{ //第一行
write_word(0,0,0,huan,0);//欢
write_word(0,0,16,ying,0);//迎
write_word(0,0,32,shi,0);//使
write_word(0,0,48,yong,0);//用
write_word(1,0,0,xin_1,0);//心
write_word(1,0,16,dian,0);//电
write_word(1,0,32,tu,0);//图
write_word(1,0,48,yi_1,0);//仪
//第二行
write_word(0,2,0,cheng_1,0);//成
write_word(0,2,16,du,0);//都
write_word(0,2,32,xin_2,0);//信
write_word(0,2,48,xi,0);//息
write_word(1,2,0,gong,0);//工
write_word(1,2,16,cheng_2,0);//程
write_word(1,2,32,xue,0);//学
write_word(1,2,48,yuan,0);//院
//第三行
write_char(0,4,0,zero,0);//0
write_char(0,4,8,three,0);//3
write_word(0,4,16,ji,0);//级
write_word(0,4,32,yi_2,0);//医
write_word(0,4,48,liao,0);//疗
write_word(1,4,0,dian,0);//电
write_word(1,4,16,zi,0);//子
write_word(1,4,32,er,0);//二
write_word(1,4,48,ban,0);//班
/* //第四行
write_word(0,6,0,li,0);//李
write_word(0,6,16,tao,0);//桃
write_char(0,6,32,gang,0);//-
write_char(0,6,40,gang,0);//-
write_char(0,6,48,two,0);//2
write_char(0,6,56,zero,0);//0
write_char(1,6,0,zero,0);//0
write_char(1,6,8,seven,0);//7
write_word(1,6,16,nian,0);//年
write_word(1,6,32,san,0);//三
write_word(1,6,48,yue,0);//月
*P_Watchdog_Clear=C_WDTCLR;//喂狗*/
min_a=num(min/10);
min_b=num(min%10);
sec_a=num(sec/10);
sec_b=num(sec%10);
write_char(0,6,0,min_a,1);
write_char(0,6,8,min_b,1);
write_char(0,6,16,maohao,1);
write_char(0,6,24,sec_a,1);
write_char(0,6,32,sec_b,1);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -