?? heart0.c.c
字號(hào):
/****************************************************************************************/
/* Name: 心電圖儀顯示控制程序
/* Language: C51單片機(jī)編程語(yǔ)言
/* Platform:
/* Author: gjg
/* Date: 2005年8月8日星期一 19:20
/* Version:
/* Result:
/* Others: 外部ram(32K)地址分配:波形I存儲(chǔ)區(qū) 0x0000--0x3FFF
波形II存放區(qū) 0x4000--0x7FFF
/*Functions:采集心電信號(hào)輸入并控制其在示波器上顯示,據(jù)有波形存儲(chǔ)功能
/*Hardware link:
/*#######################################################################################*/
#include <AT89X55.h>
#include <absacc.h>
#define uchar unsigned char
#define uint unsigned int
/*-----------定義各端口地址-----------------*/
#define PA8255 XBYTE[0x8000]//8255
#define PB8255 XBYTE[0x8001]
#define PC8255 XBYTE[0x8002]
#define COM8255 XBYTE[0x8003]
#define XOUT XBYTE[0x9000]// D/A x
#define XCON XBYTE[0x9001]
#define YOUT XBYTE[0xa000]// D/A y
#define YCON XBYTE[0xa001]
#define SIZE_MENU 10//菜單長(zhǎng)度
/*----------------其他定義---------------------*/
uchar keycode;
uchar Ax=200,Ay=200; //示波器x,y軸幅度控制
/*------------------定義菜單------------------*/
void (*KeyFuncPtr)();
uchar KeyFuncIndex=0;
typedef struct //定義結(jié)構(gòu)體類(lèi)型
{
uchar Keyfuncstate; //當(dāng)前菜單位?
uchar Keydnstate; //按向下鍵轉(zhuǎn)向位置
uchar Keyupstate; //按向上鍵轉(zhuǎn)向位置
uchar Keycrstate; //按確認(rèn)鍵轉(zhuǎn)向位
uchar Keybkstate; //按返回鍵轉(zhuǎn)向位置
void (*CurrentOperation)(); //當(dāng)前狀態(tài)下要處理的操作程序
} KeyTabStruct;
/*--------------ds1302硬件連接-----------------*/
sbit T_CLK = P1^2; /*實(shí)時(shí)時(shí)鐘時(shí)鐘線引腳 */
sbit T_IO = P1^1; /*實(shí)時(shí)時(shí)鐘數(shù)據(jù)線引腳 */
sbit T_RST = P1^0; /*實(shí)時(shí)時(shí)鐘復(fù)位線引腳 */
sbit ACC_0=ACC^0;
sbit ACC_7=ACC^7;
/*-----------AD0809控制管腳定義-------------*/
sbit EOC=P1^3; //AD轉(zhuǎn)換結(jié)束信號(hào)
sbit START=P1^4;
sbit OE=P1^5;
sbit A0=P3^4;
uchar keycode;
uchar t_init[]={0x00,0x30,0x23,0x8,0x08,0x01,0x05};
/*------------------延時(shí)子程序1-------------------*/
void delay1(unsigned int t)
{
unsigned int i,j;
for(i=0;i<t;i++)
for(j=0;j<10;j++);
}
/*-------------------延時(shí)-------------------------*/
void delay(uint time)//延時(shí)time ms
{data uint i,j;
for(i=0;i<time;i++)
for(j=0;j<109;j++);
}
/*------------------------pc.n 置1---------------*/
void setpc(uchar n)
{ n=n<<1;
COM8255=0x01|n;
}
/*-----------------------pc.n 置0-----------------*/
void clrpc(uchar n)
{
COM8255=n<<1;
}
/**********************字符LCD顯示模塊**********************/
/*--------------------寫(xiě)數(shù)據(jù)到lcd-----------------*/
void putchar(uchar ch)
{
PA8255=ch;
setpc(6);//RS=1
clrpc(5);//RW=0
clrpc(4);//E=0
delay1(10);
setpc(4);//E=1
}
/*------------------寫(xiě)指令到lcd---------------------*/
void putcom(uchar com)
{ PA8255=com;
clrpc(6);//RS=0
clrpc(5);//RW=0
clrpc(4);//E=0
delay1(10);
setpc(4);//E=1
}
/*---------將指令數(shù)組寫(xiě)入lcd, n為數(shù)組長(zhǎng)度----------*/
void putir(uchar code *ir,uchar n)
{uchar i;
for(i=0;i<n;i++)
putcom(ir[i]);
}
/*-------將數(shù)組寫(xiě)入 lcd, n為數(shù)組長(zhǎng)度---------------*/
void putstr(uchar code *str,uchar n)
{ uchar i;
for(i=0;i<n;i++)
putchar(str[i]);
}
/************************************ds1302軟件包********************************************/
/************* v_RTInputByte-----往DS1302寫(xiě)入1Byte數(shù)據(jù)*******************/
void v_RTInputByte(uchar ucDa)
{
uchar i;
ACC = ucDa;
for(i=8; i>0; i--)
{
T_IO = ACC_0;
T_CLK = 1;
T_CLK = 0;
ACC = ACC >> 1;
}
}
/**********uchar uc_RTOutputByte---從DS1302讀取1Byte數(shù)據(jù)********************/
uchar uc_RTOutputByte(void)
{
uchar i;
for(i=8; i>0; i--)
{
ACC = ACC >>1;
ACC_7=T_IO;
T_CLK = 1;
T_CLK = 0;
}
return(ACC);
}
/**************v_W1302----往DS1302寫(xiě)入數(shù)據(jù)*******************************/
void v_W1302(uchar ucAddr, uchar ucDa)
{
T_RST = 0;
T_CLK = 0;
T_RST = 1;
v_RTInputByte(ucAddr); /* 地址,命令 */
v_RTInputByte(ucDa); /* 寫(xiě)1Byte數(shù)據(jù)*/
T_CLK = 1;
T_RST =0;
}
/***********uc_R1302---讀取DS1302某地址的數(shù)據(jù)*************************/
uchar uc_R1302(uchar ucAddr)
{
uchar ucDa;
T_RST = 0;
T_CLK = 0;
T_RST = 1;
v_RTInputByte(ucAddr); /* 地址,命令 */
ucDa = uc_RTOutputByte(); /* 讀1Byte數(shù)據(jù) */
T_CLK = 1;
T_RST =0;
return(ucDa);
}
/********************************************************************
*
* 名稱: v_Set1302
* 說(shuō)明:
* 功能: 設(shè)置初始時(shí)間
* 調(diào)用: v_W1302()
* 輸入: pSecDa: 初始時(shí)間地址。初始時(shí)間格式為: 秒 分 時(shí) 日 月 星期 年
* 7Byte (BCD碼) 1B 1B 1B 1B 1B 1B 1B
* 返回值: 無(wú)
***********************************************************************/
void v_Set1302(uchar *pSecDa)
{
uchar i;
uchar ucAddr = 0x80;
v_W1302(0x8e,0x00); /* 控制命令,WP=0,寫(xiě)操作?*/
for(i =7;i>0;i--)
{
v_W1302(ucAddr,*pSecDa); /* 秒 分 時(shí) 日 月 星期 年 */
pSecDa++;
ucAddr +=2;
}
v_W1302(0x8e,0x80); /* 控制命令,WP=1,寫(xiě)保護(hù)?*/
}
/********************************************************************
*
* 名稱: v_Get1302
* 說(shuō)明:
* 功能: 讀取DS1302當(dāng)前時(shí)間
* 調(diào)用: uc_R1302()
* 輸入: ucCurtime: 保存當(dāng)前時(shí)間地址。當(dāng)前時(shí)間格式為: 秒 分 時(shí) 日 月 星期 年
* 7Byte (BCD碼) 1B 1B 1B 1B 1B 1B 1B
* 返回值: 無(wú)
***********************************************************************/
void v_Get1302(uchar ucCurtime[])
{
uchar i;
uchar ucAddr = 0x81;
for (i=0;i<7;i++)
{
ucCurtime[i] = uc_R1302(ucAddr);/*格式為: 秒 分 時(shí) 日 月 星期 年 */
ucAddr +=2;
}
}
/*********************鍵盤(pán)掃描程序************************/
/*-----------------鍵盤(pán)掃描初始化程序---------------*/
void keyinit()
{
setpc(0);setpc(1);setpc(2);setpc(3);
PB8255=0xff;
}
/*------------- 鍵盤(pán)掃描程序---------------------*/
void keyscan(void)
{
uchar lcode=0,ccode=0,scode=0x01,a,i;
for(i=0;i<4;i++)
{
PB8255=scode;
a=PC8255;
if((a&0x0f)!=0x0f)
{if((a|0xfe)==0xfe);
else if ((a|0xfd)==0xfd) lcode=4;
else if ((a|0xfb)==0xfb) lcode=8;
else lcode=12;
keycode=lcode+ccode;
}
else
{scode=(scode<<1);
ccode=ccode+1;
}
}
keyinit(); //鍵盤(pán)初始化
}
/**********************顯示存儲(chǔ)區(qū)*************************************/
uchar code ir[5]={0x00,0x38,0x0c,0x06,0x83};
uchar code str[8]={"Welcome!"};
uchar code str0[16]={"LCD test begin.."};
uchar code str1[14]={"LCD test over!"};
uchar code str2[16]={"Key test begin.."};
uchar code str3[14]={"Key test over!"};
uchar code str4[15]={"Press any key.."};
uchar code str5[8]={"Keycode:"};
uchar code str6[16]={"Ram test begin.."};
uchar code str7[14]={"Ram test over!"};
uchar code str8[15]={"Clock testing.."};
uchar code str9[16]={"Clock test over!"};
uchar code str10[16]={"Rom test begin.."};
uchar code str11[14]={"Rom test over!"};
uchar code str12[11]={"SYSTEM TEST"};
uchar code str13[8]={"SINGLE 1"};
uchar code str14[8]={"SINGLE 2"};
uchar code str15[4]={"CHOP"};
uchar code str16[6]={"REVIEW"};
uchar code str17[11]={"Outputing.."};
/*uchar code str18[16]={""};
uchar code str19[16]={""};
uchar code str20[16]={""};
uchar code str21[16]={""};*/
uchar code test[13]={"Ram testing.."};
uchar code error[8]={"ERROR!"};
/***********************檢測(cè)服務(wù)程序************************/
/*--------------LCD檢測(cè)程序---------------*/
void lcd_test(void)
{uchar i;
putcom(0x00);putcom(0x80);//begin
putstr(str0,16);
delay(800);
putcom(0x80);
for(i=0;i<16;i++)
{putchar(0xff);}//檢測(cè)有無(wú)暗點(diǎn)
putcom(0xc0);
for(i=0;i<16;i++)
{putchar(0xff);}
delay(500);
putcom(0x80);
/*for(i=0;i<200;i++) //輸出所有可顯示字符
{putchar(i);
delay(10);
}*/
delay(300);
putcom(0x00);putcom(0x80);
putstr(str1,14);//over
delay(800);
}
/*------------鍵盤(pán)檢測(cè)程序---------------*/
void keyboard_test(void)
{ putcom(0x00);putcom(0x80);
putstr(str2,16);//begin
delay(800);
putcom(0x00);putcom(0x80);
putstr(str4,15);//press
putcom(0xc2);
putstr(str5,8);
keyinit(); //鍵盤(pán)初始化
do
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -