欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
脈搏測試儀(電子設計競賽試題)
[打印本頁]
作者:
fuliang
時間:
2017-7-17 12:14
標題:
脈搏測試儀(電子設計競賽試題)
脈搏測試儀(電子設計競賽試題)
0.png
(61.01 KB, 下載次數: 35)
下載附件
2017-7-18 00:37 上傳
單片機源程序如下:
#include <MSP430x14x.h> //F149的頭文件
#include "LCD12864.h"
#include "key.h"
#define uchar unsigned char
#define uint unsigned int
void put(char x,char y,int c); //電壓顯示
void put_time(char x,char y,char z);//時間顯示
void put_HZ(char A,char B,char shu);
void put_one(char A,char B,char shu);
void draw(double a);
void pict(uint n);
void count();
void clear();
void huaxian();
void key_action();
uint minute=0,second=0,second_1=0;
uint n=0,number=0,temp0=0,temp2=0;//定義周期個數,邊沿
double u,fanhui=0;
uint data[128],save[128],z[128];
uint y,start=0,time_flag=0;
uint basic_flag=0; //基本模式標志
uchar key_val,jilu=0;
uint cont_flag=0;
uint comp_max,comp_min;//最大值和最小值上限下限
uint key1_val=0,key2_val=0;//按鍵鍵值 (代表按鍵按幾次)
uint ceshi[128]={
23,25,18,10,5,2,8,12,23,25,18,10,5,2,8,12,
23,25,18,10,5,2,8,12,23,25,18,10,5,2,8,12,
23,25,18,10,5,2,8,12,23,25,18,10,5,2,8,12,
23,25,18,10,5,2,8,12,23,25,18,10,5,2,8,12,
23,25,18,10,5,2,8,12,23,25,18,10,5,2,8,12,
23,25,18,10,5,2,8,12,23,25,18,10,5,2,8,12,
23,25,18,10,5,2,8,12,23,25,18,10,5,2,8,12,
23,25,18,10,5,2,8,12,23,25,18,10,5,2,8,12
};
//系統時鐘初始化
void sys_Init()
{
volatile unsigned int i;
BCSCTL1&=~XT2OFF; //打開XT2振蕩器
do
{
IFG1 &= ~OFIFG; // 清除振蕩器失效標志
for (i = 0xFF; i > 0; i--); // 延時,等待XT2起振
} while ((IFG1 & OFIFG) != 0); // 判斷XT2是否起振
BCSCTL2 =SELM_2+SELS; //選擇MCLK=SMCLK為XT2
}
//定時器A初始化
void timer0()
{
TACTL = TASSEL_2 + MC_2; // 設置定時器A使用MCLK,不分頻,連續計數模式
CCR0 = 40000; //CCR0初值
CCTL0 = CCIE; // 允許CCR0 中斷
}
//ADC初始化
void ADC_Init()
{
P6SEL |= 0x02; // P6.1為ADC輸入
ADC12CTL0 = REFON+ REF2_5V; // REFON為打開內部電壓發生器的意思,REF2_5V為設置參考電壓選擇為2.5v的意思
ADC12CTL0 |= SHT0_2 + ADC12ON; // 設置采樣保持時間為4個ADC12CLK(SHT_2),開啟ADC12模塊(ADC12ON)
ADC12CTL1 = SHP;
ADC12MCTL0 = INCH_1+SREF_1; // Vr+=Vref+=2.5V
ADC12IE = 0x01; // 設置ADC12的中斷使能,不用對應A1通道
ADC12CTL0 |= ENC; // // 使能AD轉換
}
uchar flag=0;
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT,關閉看門狗定時器
sys_Init();
timer0();
ADC_Init();
P2DIR |=0XFF;
LCD_init(); //液晶模塊的初始化
Write_Cmd(0x01);
GUI_Fill_GDRAM(0x00); //清屏函數
LCD_write_string(0,0,"系統啟動。。");
LCD_write_string(0,1,"通信工程系fu!!");
LCD_write_string(0,2,"通工系fu!!");
LCD_write_string(0,3,"系統啟動fu。。");
_EINT(); //開啟總中斷(fuliang)
//_BIS_SR(LPM0_bits + GIE); // 進入 LPM0 低功耗模式,允許中斷,CPU停止工作,單片機等待
while(1)
{
if(start==1) //每20ms判斷成立一次,下面的句子才能運行
{
switch(key2_val) //每20ms運行一次,switch這些句子能否運行要取決于“shart=1”
{
case 1: //本按鍵按一次的情況
if(flag==1) //設置flag變量目的只讓這里面的程序執行一次,
{
LCD_write_string(0,0,"回放模式"); //雖然程序只執行一次,但下面并沒有清屏,所以只要按
//鍵不再一次按下,字符不會消失
for(int i=0;i<128;i++)
{
z[i]=save[i];
}
count();//顯示次數
for(int i=0;i<128;i+=16)
{
pict(i);
}
flag=0;
}
break;
case 2: //本按鍵再次按下情況
LCD_write_string(0,0,"光電脈搏動態顯示");
for(int i=0;i<128;i++)
{
z[i]=save[i];
}
for(int i=0;i<128;i+=16)
{
pict(i);
}
break;
case 3: //本按鍵第三次按下情況
LCD_write_string(0,0,"監護模式");
time_flag=1;//倒計時標志
put_time(7,1,60-second_1);
count();//顯示次數
put_HZ(0,3,cont_flag);
default: break;
}
start=0; //最后要記得清零
}
}
}
// Timer A0 interrupt service routine
//CCR0比較捕捉中斷服務函數
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A0 (void)
{
static uchar temp;
CCR0 += 40000; //8M/40000=200Hz==>5ms//計時
if(++temp==200) //5ms*200=1s
{
P2OUT ^=BIT0;
temp=0;
if(time_flag==1) //監護模式倒計時標志
{
second_1++;
if(second_1>59)
{
time_flag=0;
second_1=0;
cont_flag=0;
}
}
else second_1=0;
second++;
if(basic_flag==1&&second_1>58)//測試完成判斷
{
Write_Cmd(0x01);
LCD_write_string(0,0,"完成!");
basic_flag=0;
time_flag=0;
}
if(basic_flag==1&&(second<10))
{
Write_Cmd(0x01);
LCD_write_string(0,0,"請重新放入!");
}
if(second==1&&minute==0)
{
Write_Cmd(0x01);
LCD_write_string(0,0,"系統已工作ABC!");
LCD_write_string(0,1,"光纖通信一班符亮");
}
if(second>59)
{
second=0;
minute++;
if(minute>19)
{
minute=0;
}
}
}
if(temp%4==0) //每5ms*4==20ms運行一次按鍵程序,對應下面的"start"標志
{
key_action();
}
if(temp%10==0)
{
cont_flag++;
ADC12CTL0 |= ADC12SC; //啟動ADC12轉換,讓ADC12每隔50ms轉換一次,
}
}
//AD中斷
#pragma vector=ADC_VECTOR
__interrupt void ADC12_ISR (void)
{
static double d=0;
static int x=0;
d=ADC12MEM0;//累加ad轉換的值,多次轉換可以保證轉換的精度
u=d*25*100/4096;
y=(int)((u/2500.0)*32);
save[x]=31-y;
x++;
if(x>127)
{
x=0;
}
}
/*********************************************************
函數名稱:display()
函數功能:在1602指定位置顯示兩位數,被顯示的數值應在0~99之間
***********************************************************/
void put(char x,char y,int c)
{
uchar ch[]=":0.000V";
ch[1]=c/1000%10+'0';
ch[3]= c/100%10+'0';
ch[4]= c/10%10+'0';
ch[5]= c%10+'0';
LCD_write_string(x,y,ch); //顯示千位,v的單位為mV
}
void put_time(char x,char y,char z)
{
uchar time[]=" ";
time[0]=z/10%10+'0';
time[1]=z%10+'0';
LCD_write_string(x,y,time);
}
void put_HZ(char A,char B,char shu)
{
uchar hz[]="次數: ";
hz[5]=shu/100%10+'0';
hz[6]=shu/10%10+'0';
hz[7]=shu%10+'0';
LCD_write_string(A,B,hz);
}
void put_one(char A,char B,char shu)
{
uchar hz[]="個數: ";
hz[5]=shu/100%10+'0';
hz[6]=shu/10%10+'0';
hz[7]=shu%10+'0';
LCD_write_string(A,B,hz);
}
/*********************/
//畫線//
/********************/
void pict(uint n)
{
uint i,j;
uint d[32],k;
//Write_Cmd(0x34); //設置為8 位MPU 接口,擴充指令集,繪圖模式關
LCD_en_command(0x36);
for(i=0;i<32;i++)
d[i]=0;
k=0x8000;
for(i=n;i<n+16;i++)
{
if(z[i]<=z[i+1])
{
for(j=z[i];j<=z[i+1];j++)
{
d[j]|=k;
}
}
else
{
for(j=z[i+1];j<=z[i];j++)
{
d[j]|=k;
}
}
k>>=1;
}
for(j=0;j<32;j++)
{
LCD_en_command(0x80+j); //垂直地址Y
LCD_en_command(0x88+(n/16)); //水平地址X
LCD_en_dat(d[j]>>8);
LCD_en_dat(d[j]&0x00ff);
}
// Write_Cmd(0x36); //打開繪圖模式
LCD_en_command(0x30); //恢復基本指令集,關閉繪圖模式
}
void key_action() //按鍵函數,每20ms運行一次這個函數
{
start=1; //按鍵按下的情況為“1”,每20ms運行一次(定時器里面是這么設置的)
key_val=inkey();
if(key_val!=0xff) //如果按鍵按下的情況,0xff表沒有按鍵按下
Write_Cmd(0x01); //清除顯示
if(key_val==1) //第一個按鍵按下
{
key2_val++;
if(key2_val==1)
{
flag=1;
}
if(key2_val==4)
key2_val=0;
}
if(key_val==2) //當第二個按鍵按下情況
{
// exit_flag++;
key2_val=0;
Write_Cmd(0x01);
LCD_write_string(0,1,"基本模式");
LCD_write_string(0,2,"請等待!");
basic_flag=1; //基本模式標志
time_flag=1;
}
}
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
脈搏.zip
(492.68 KB, 下載次數: 17)
2017-7-17 12:13 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1