A major societal challenge for the decades to come will be the delivery of effective medical services while at the same time curbing the growing cost of healthcare. It is expected that new concepts-particularly electronically assisted healthcare will provide an answer. This will include new devices, new medical services as well as networking. On the device side, impressive innovation has been made possible by micro- and nanoelectronics or CMOS Integrated Circuits. Even higher accuracy and smaller form factor combined with reduced cost and increased convenience of use are enabled by incorporation of CMOS IC design in the realization of biomedical systems. The compact hearing aid devices and current pacemakers are good examples of how CMOS ICs bring about these new functionalities and services in the medical field. Apart from these existing applications, many researchers are trying to develop new bio-medical solutions such as Artificial Retina, Deep Brain Stimulation, and Wearable Healthcare Systems. These are possible by combining the recent advances of bio-medical technology with low power CMOS IC technology.
上傳時間: 2017-02-06
上傳用戶:linyj
程序流程語句 1、 if 語句 2、 switch 語句 3、 while 語句 4、 for 語句 5、循環的嵌套 6、其他流程控制語句
上傳時間: 2017-03-10
上傳用戶:qlxxx
1.Describe a Θ(n lg n)-time algorithm that, given a set S of n integers and another integer x, determines whether or not there exist two elements in S whose sum is exactly x. (Implement exercise 2.3-7.) #include<stdio.h> #include<stdlib.h> void merge(int arr[],int low,int mid,int high){ int i,k; int *tmp=(int*)malloc((high-low+1)*sizeof(int)); int left_low=low; int left_high=mid; int right_low=mid+1; int right_high=high; for(k=0;left_low<=left_high&&right_low<=right_high;k++) { if(arr[left_low]<=arr[right_low]){ tmp[k]=arr[left_low++]; } else{ tmp[k]=arr[right_low++]; } } if(left_low<=left_high){ for(i=left_low;i<=left_high;i++){ tmp[k++]=arr[i]; } } if(right_low<=right_high){ for(i=right_low;i<=right_high;i++) tmp[k++]=arr[i]; } for(i=0;i<high-low+1;i++) arr[low+i]=tmp[i]; } void merge_sort(int a[],int p,int r){ int q; if(p<r){ q=(p+r)/2; merge_sort(a,p,q); merge_sort(a,q+1,r); merge(a,p,q,r); } } int main(){ int a[8]={3,5,8,6,4,1,1}; int i,j; int x=10; merge_sort(a,0,6); printf("after Merging-Sort:\n"); for(i=0;i<7;i++){ printf("%d",a[i]); } printf("\n"); i=0;j=6; do{ if(a[i]+a[j]==x){ printf("exist"); break; } if(a[i]+a[j]>x) j--; if(a[i]+a[j]<x) i++; }while(i<=j); if(i>j) printf("not exist"); system("pause"); return 0; }
上傳時間: 2017-04-01
上傳用戶:糖兒水嘻嘻
/*================================================================= 4掃16*16下入上出C語言程序, 低位起筆,數據反相。 預定義 **************************************************************/ #include #include //可使用其中定義的宏來訪問絕對地址? bit ture=1; // 使能正反相位選擇 bit false=0; // 使能反相 sbit SCK=P3^6; // EQU 0B6H ; 移位 sbit RCK=P3^5; //EQU 0B5H ; 并行鎖存 //sbit P1_3=P1^3; //外RAM擴展讀寫控制,不能重復申明 sbit EN1=P1^7; //BIT sbit FB=0xD8; // FB作為標志 sfr BUS_SPEED=0xA1; //訪問片外RAM速度設置寄存器 sfr P4SW=0xBB; //P4SW寄存器設置P4.4,P4.5,P4.6的功能 sfr P4=0xC0; // P4 EQU 0C0H sbit NC=P4^4; sbit CS=P4^6; //片選 sfr WDT_CONTR=0xC1; // 0C1H ;看門狗寄存器 sfr AUXR=0x8E; // EQU 08EH ;附件功能控制寄存器 sfr16 DPTR=0x82; sfr CLK_DIV=0x97 ; //時鐘分頻寄存器 const unsigned int code All_zk =256 ; // 0E11H ;原數據總字節 const unsigned int code am_zk =128 ; // 0E13H ;單幕數據量 const unsigned char code asp = 255; // asp數據相位字,如果是正相字,那么asp=0 bit basp=1; // asp數據相位字標記,如果是正相字,那么basp=0 const unsigned char code font[]= // 晶科電子LED數碼(反相字) {0xBD,0x81,0xEF,0xFF,0xBD,0x81,0xF7,0xFF,0xEF,0xEB,0x80,0x9F,0xEF,0x8F,0xEF,0xEF,0x7F,0x7B,0x7B,0x7F,0xBF,0xEF,0xEF,0xFF,0x7F,0x00,0xFF,0xFF,0xFF,0x80,0xFE,0xFF, 0x81,0xBD,0x0F,0x0F,0x81,0xBD,0xF0,0xF0,0xEF,0xED,0xE7,0xE1,0xEF,0xE1,0xEE,0xEE,0x7F,0x7B,0x7B,0x7F,0xBF,0xEF,0xEF,0xFF,0x7F,0x7F,0x7F,0x03,0xFF,0xFF,0xFF,0xF0, 0xBD,0x81,0xEF,0xEF,0xBD,0x81,0xF7,0xF7,0xEF,0x2E,0xC7,0xEF,0xEF,0xEE,0xED,0xED,0xFF,0x03,0x03,0x7F,0x80,0xE0,0xE0,0xFF,0x5F,0x7F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFB, 0xFF,0xBD,0xFF,0x0F,0xFF,0xBD,0xFF,0xF0,0xEF,0xEF,0xAB,0xEF,0xEF,0xEF,0xED,0xED,0xFF,0x7B,0x7B,0x03,0xFF,0xEF,0xEF,0xE0,0xBF,0x7F,0x7F,0xFF,0xFF,0xFF,0xDF,0xFD, 0xBD,0xFD,0xFD,0xFF,0xBD,0xED,0xBD,0xFF,0xDD,0xBD,0xDD,0xFF,0xFF,0xFF,0xFF,0xFF,0xCF,0xEF,0x00,0xEF,0xEB,0xEB,0x81,0xFB,0xC3,0xDA,0xF7,0xFF,0xDF,0xDF,0xEE,0xFF, 0x80,0xFD,0xFD,0xFF,0xC0,0xED,0xED,0xFF,0xE0,0xBD,0xBD,0xFF,0xFF,0xFF,0xFF,0xFF,0xB3,0x00,0xC7,0x6D,0x8D,0xEB,0xDD,0xF3,0xDB,0xDB,0xFB,0x40,0xDF,0xDF,0xEE,0xE0, 0xFF,0xFD,0xFD,0xFF,0xFF,0xFD,0xED,0xFF,0xFF,0xBD,0xBD,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0xB7,0x2B,0xAB,0xDE,0xF7,0xDD,0xFB,0xFB,0x5B,0xC3,0xF7,0xEB,0xD0,0xEE,0xEF, 0xFF,0xFD,0xFD,0xF8,0xFF,0xBD,0xE1,0xC0,0xFF,0xBD,0xBD,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0xD3,0xED,0xC7,0xFF,0xF7,0xDC,0xFB,0xFF,0xDB,0xD9,0xF7,0xF7,0xDF,0xC0,0xEE}; const unsigned char data xzL_data =0x08; //0603H;一幕一行字節數 const unsigned int data aL_data =0x20; //單幕單號線(單組線)數據量 const unsigned char data mov =0x03A ; //移動速度 const unsigned int data t_T =0x040A ; //0E0AH ; 05FAH; ;停留時間 const unsigned char data mu_num=0x02 ; //0602H ;幕數 unsigned int m; //m幕長變量<=am_zk unsigned char data_z; //數據寄存器 unsigned int xd; //數據指針寄存器 /*********************************************************************** 數據轉移子函數 ===============================================================*/ char MOVD() { unsigned char f,nm; //nm幕數控制 unsigned char code *dptr; unsigned char xdata *xdptr = 0; f = asp ; for (m=0; m
上傳時間: 2017-05-04
上傳用戶:sbfd010
PL0語言是與pascal類似的語言,但是比pascal語言的詞法、語法更加嚴格苛刻。 在PL0語言中,只有五種類型的單詞:關鍵字、用戶自定義標識符、數字、特殊符號以及非法標識符。 根據題目給出的PL0的文法,關鍵字只有如下幾個: Const——用來聲明常量; Var——用來聲明變量; Procedure——用來聲明過程; Begin——聲明過程的開始; End——聲明過程的結束; Ood——單目運算符,聲明為關鍵字; If——條件語句; Then——條件語句; Call——聲明調用函數; while——循環語句; Read——讀文件語句; Write——寫文件語句; 對于用戶自定義標識符應該滿足:以字母開頭,其后是字母和數字的組合,即:字母(字母|數字)* 數字則是數字字符(0——9)組成的數字串; 特殊符號有如下幾個: +,-,*,/,=<>,<,>=,<=,:= 把關鍵字、算符和界符稱為語言固有的單詞,標識符、常量稱為用戶自定義的單詞。 為此設置三個全程量:SYM,ID,NUM。 SYM:存放每個單詞的類別,為內部編碼的表示形式; ID:存放用戶所定義的標識符的值,即標識符字符串的機內表示; NUM:存放用戶定義的數。
上傳時間: 2017-06-20
上傳用戶:lbxxx
/****************temic*********t5557***********************************/ #include <at892051.h> #include <string.h> #include <intrins.h> #include <stdio.h> #define uchar unsigned char #define uint unsigned int #define ulong unsigned long //STC12C2051AD的SFR定義 sfr WDT_CONTR = 0xe1;//stc2051的看門狗?????? /**********全局常量************/ //寫卡的命令 #define write_command0 0//寫密碼 #define write_command1 1//寫配置字 #define write_command2 2//密碼寫數據 #define write_command3 3//喚醒 #define write_command4 4//停止命令 #define TRUE 1 #define FALSE 0 #define OK 0 #define ERROR 255 //讀卡的時間參數us #define ts_min 250//270*11.0592/12=249//取近似的整數 #define ts_max 304//330*11.0592/12=304 #define t1_min 73//90*11.0592/12=83:-10調整 #define t1_max 156//180*11.0592/12=166 #define t2_min 184//210*11.0592/12=194 #define t2_max 267//300*11.0592/12=276 //***********不采用中斷處理:采用查詢的方法讀卡時關所有中斷****************/ sbit p_U2270B_Standby = P3^5;//p_U2270B_Standby PIN=13 sbit p_U2270B_CFE = P3^3;//p_U2270B_CFE PIN=6 sbit p_U2270B_OutPut = P3^7;//p_U2270B_OutPut PIN=2 sbit wtd_sck = P1^7;//SPI總線 sbit wtd_si = P1^3; sbit wtd_so = P1^2; sbit iic_data = P1^2;//lcd IIC sbit iic_clk = P1^7; sbit led_light = P1^6;//測試綠燈 sbit led_light1 = P1^5;//測試紅燈 sbit led_light_ok = P1^1;//讀卡成功標志 sbit fengmingqi = P1^5; /***********全局變量************************************/ uchar data Nkey_a[4] = {0xA0, 0xA1, 0xA2, 0xA3};//初始密碼 //uchar idata card_snr[4]; //配置字 uchar data bankdata[28] = {1,2,3,4,5,6,7,1,2,3,4,5,6,7,1,2,3,4,5,6,7,1,2,3,4,5,6,7}; //存儲卡上用戶數據(1-7)7*4=28 uchar data cominceptbuff[6] = {1,2,3,4,5,6};//串口接收數組ram uchar command; //第一個命令 uchar command1;// //uint temp; uchar j,i; uchar myaddr = 8; //uchar ywqz_count,time_count; //ywqz jishu: uchar bdata DATA; sbit BIT0 = DATA^0; sbit BIT1 = DATA^1; sbit BIT2 = DATA^2; sbit BIT3 = DATA^3; sbit BIT4 = DATA^4; sbit BIT5 = DATA^5; sbit BIT6 = DATA^6; sbit BIT7 = DATA^7; uchar bdata DATA1; sbit BIT10 = DATA1^0; sbit BIT11 = DATA1^1; sbit BIT12 = DATA1^2; sbit BIT13 = DATA1^3; sbit BIT14 = DATA1^4; sbit BIT15 = DATA1^5; sbit BIT16 = DATA1^6; sbit BIT17 = DATA1^7; bit i_CurrentLevel;//i_CurrentLevel BIT 00H(Saves current level of OutPut pin of U2270B) bit timer1_end; bit read_ok = 0; //緩存定時值,因用同一個定時器 union HLint { uint W; struct { uchar H;uchar L; } B; };//union HLint idata a union HLint data a; //緩存定時值,因用同一個定時器 union HLint0 { uint W; struct { uchar H; uchar L; } B; };//union HLint idata a union HLint0 data b; /**********************函數原型*****************/ //讀寫操作 void f_readcard(void);//全部讀出1~7 AOR喚醒 void f_writecard(uchar x);//根據命令寫不同的內容和操作 void f_clearpassword(void);//清除密碼 void f_changepassword(void);//修改密碼 //功能子函數 void write_password(uchar data *data p);//寫初始密碼或數據 void write_block(uchar x,uchar data *data p);//不能用通用指針 void write_bit(bit x);//寫位 /*子函數區*****************************************************/ void delay_2(uint x) //延時,時間x*10us@12mhz,最小20us@12mhz { x--; x--; while(x) { _nop_(); _nop_(); x--; } _nop_();//WDT_CONTR=0X3C;不能頻繁的復位 _nop_(); } ///////////////////////////////////////////////////////////////////// void initial(void) { SCON = 0x50; //串口方式1,允許接收 //SCON =0x50; //01010000B:10位異步收發,波特率可變,SM2=0不用接收到有效停止位才RI=1, //REN=1允許接收 TMOD = 0x21; //定時器1 定時方式2(8位),定時器0 定時方式1(16位) TCON = 0x40; //設定時器1 允許開始計時(IT1=1) TH1 = 0xfD; //FB 18.432MHz 9600 波特率 TL1 = 0xfD; //fd 11.0592 9600 IE = 0X90; //EA=ES=1 TR1 = 1; //啟動定時器 WDT_CONTR = 0x3c;//使能看門狗 p_U2270B_Standby = 0;//單電源 PCON = 0x00; IP = 0x10;//uart you xian XXXPS PT1 PX1 PT0 PX0 led_light1 = 1; led_light = 0; p_U2270B_OutPut = 1; } /************************************************/ void f_readcard()//讀卡 { EA = 0;//全關,防止影響跳變的定時器計時 WDT_CONTR = 0X3C;//喂狗 p_U2270B_CFE = 1;// delay_2(232); //>2.5ms /* // aor 用喚醒功能來防碰撞 p_U2270B_CFE = 0; delay_2(18);//start gap>150us write_bit(1);//10=操作碼讀0頁 write_bit(0); write_password(&bankdata[24]);//密碼block7 p_U2270B_CFE =1 ;// delay_2(516);//編程及確認時間5.6ms */ WDT_CONTR = 0X3C;//喂狗 led_light = 0; b.W = 0; while(!(read_ok == 1)) { //while(p_U2270B_OutPut);//等一個穩定的低電平?超時判斷? while(!p_U2270B_OutPut);//等待上升沿的到來同步信號檢測1 TR0 = 1; //deng xia jiang while(p_U2270B_OutPut);//等待下降沿 TR0 = 0; a.B.H = TH0; a.B.L = TL0; TH0 = TL0 = 0; TR0 = 1;//定時器晚啟動10個周期 //同步頭 if((324 < a.W) && (a.W < 353)) ;//檢測同步信號1 else { TR0 = 0; TH0 = TL0 = 0; goto read_error; } //等待上升沿 while(!p_U2270B_OutPut); TR0 = 0; a.B.H = TH0; a.B.L = TL0; TH0 = TL0 = 0; TR0 = 1;//b.N1<<=8; if(a.B.L < 195);//0.5p else { TR0 = 0; TH0 = TL0 = 0; goto read_error; } //讀0~7塊的數據 for(j = 0;j < 28;j++) { //uchar i; for(i = 0;i < 16;i++)//8個位 { //等待下降沿的到來 while(p_U2270B_OutPut); TR0 = 0; a.B.H = TH0; a.B.L = TL0; TH0 = TL0 = 0; TR0 = 1; if(t2_max < a.W/*)&&(a.W < t2_max)*/)//1P { b.W >>= 2;//先左移再賦值 b.B.L += 0xc0; i++; } else if(t1_min < a.B.L/*)&&(a.B.L < t1_max)*/)//0.5p { b.W >>= 1; b.B.L += 0x80; } else { TR0 = 0; TH0 = TL0 = 0; goto read_error; } i++; while(!p_U2270B_OutPut);//上升 TR0 = 0; a.B.H = TH0; a.B.L = TL0; TH0 = TL0 = 0; TR0 = 1; if(t2_min < a.W/*)&&(a.W < t2_max)*/)//1P { b.W >>= 2; i++; } else if(t1_min < a.B.L/*a.W)&&(a.B.L < t1_max)*/)//0.5P //else if(!(a.W==0)) { b.W >>= 1; //temp+=0x00; //led_light1=0;led_light=1;delay_2(40000); } else { TR0 = 0; TH0 = TL0 = 0; goto read_error; } i++; } //取出奇位 DATA = b.B.L; BIT13 = BIT7; BIT12 = BIT5; BIT11 = BIT3; BIT10 = BIT1; DATA = b.B.H; BIT17 = BIT7; BIT16 = BIT5; BIT15 = BIT3; BIT14 = BIT1; bankdata[j] = DATA1; } read_ok = 1;//讀卡完成了 read_error: _nop_(); } } /***************************************************/ void f_writecard(uchar x)//寫卡 { p_U2270B_CFE = 1; delay_2(232); //>2.5ms //psw=0 standard write if (x == write_command0)//寫密碼:初始化密碼 { uchar i; uchar data *data p; p = cominceptbuff; p_U2270B_CFE = 0; delay_2(31);//start gap>330us write_bit(1);//寫操作碼1:10 write_bit(0);//寫操作碼0 write_bit(0);//寫鎖定位0 for(i = 0;i < 35;i++) { write_bit(1);//寫數據位1 } p_U2270B_CFE = 1; led_light1 = 0; led_light = 1; delay_2(40000);//測試使用 //write_block(cominceptbuff[4],p); p_U2270B_CFE = 1; bankdata[20] = cominceptbuff[0];//密碼存入 bankdata[21] = cominceptbuff[1]; bankdata[22] = cominceptbuff[2]; bankdata[23] = cominceptbuff[3]; } else if (x == write_command1)//配置卡參數:初始化 { uchar data *data p; p = cominceptbuff; write_bit(1);//寫操作碼1:10 write_bit(0);//寫操作碼0 write_bit(0);//寫鎖定位0 write_block(cominceptbuff[4],p); p_U2270B_CFE= 1; } //psw=1 pssword mode else if(x == write_command2) //密碼寫數據 { uchar data*data p; p = &bankdata[24]; write_bit(1);//寫操作碼1:10 write_bit(0);//寫操作碼0 write_password(p);//發口令 write_bit(0);//寫鎖定位0 p = cominceptbuff; write_block(cominceptbuff[4],p);//寫數據 } else if(x == write_command3)//aor //喚醒 { //cominceptbuff[1]操作碼10 X xxxxxB uchar data *data p; p = cominceptbuff; write_bit(1);//10 write_bit(0); write_password(p);//密碼 p_U2270B_CFE = 1;//此時數據不停的循環傳出 } else //停止操作碼 { write_bit(1);//11 write_bit(1); p_U2270B_CFE = 1; } p_U2270B_CFE = 1; delay_2(560);//5.6ms } /************************************/ void f_clearpassword()//清除密碼 { uchar data *data p; uchar i,x; p = &bankdata[24];//原密碼 p_U2270B_CFE = 0; delay_2(18);//start gap>150us //操作碼10:10xxxxxxB write_bit(1); write_bit(0); for(x = 0;x < 4;x++)//發原密碼 { DATA = *(p++); for(i = 0;i < 8;i++) { write_bit(BIT0); DATA >>= 1; } } write_bit(0);//鎖定位0:0 p = &cominceptbuff[0]; write_block(0x00,p);//寫新配置參數:pwd=0 //密碼無效:即清除密碼 DATA = 0x00;//停止操作碼00000000B for(i = 0;i < 2;i++) { write_bit(BIT7); DATA <<= 1; } p_U2270B_CFE = 1; delay_2(560);//5.6ms } /*********************************/ void f_changepassword()//修改密碼 { uchar data *data p; uchar i,x,addr; addr = 0x07;//block7 p = &Nkey_a[0];//原密碼 DATA = 0x80;//操作碼10:10xxxxxxB for(i = 0;i < 2;i++) { write_bit(BIT7); DATA <<= 1; } for(x = 0;x < 4;x++)//發原密碼 { DATA = *(p++); for(i = 0;i < 8;i++) { write_bit(BIT7); DATA >>= 1; } } write_bit(0);//鎖定位0:0 p = &cominceptbuff[0]; write_block(0x07,p);//寫新密碼 p_U2270B_CFE = 1; bankdata[24] = cominceptbuff[0];//密碼存入 bankdata[25] = cominceptbuff[1]; bankdata[26] = cominceptbuff[2]; bankdata[27] = cominceptbuff[3]; DATA = 0x00;//停止操作碼00000000B for(i = 0;i < 2;i++) { write_bit(BIT7); DATA <<= 1; } p_U2270B_CFE = 1; delay_2(560);//5.6ms } /***************************子函數***********************************/ void write_bit(bit x)//寫一位 { if(x) { p_U2270B_CFE = 1; delay_2(32);//448*11.0592/120=42延時448us p_U2270B_CFE = 0; delay_2(28);//280*11.0592/120=26寫1 } else { p_U2270B_CFE = 1; delay_2(92);//192*11.0592/120=18 p_U2270B_CFE = 0; delay_2(28);//280*11.0592/120=26寫0 } } /*******************寫一個block*******************/ void write_block(uchar addr,uchar data *data p) { uchar i,j; for(i = 0;i < 4;i++)//block0數據 { DATA = *(p++); for(j = 0;j < 8;j++) { write_bit(BIT0); DATA >>= 1; } } DATA = addr <<= 5;//0地址 for(i = 0;i < 3;i++) { write_bit(BIT7); DATA <<= 1; } } /*************************************************/ void write_password(uchar data *data p) { uchar i,j; for(i = 0;i < 4;i++)// { DATA = *(p++); for(j = 0;j < 8;j++) { write_bit(BIT0); DATA >>= 1; } } } /*************************************************/ void main() { initial(); TI = RI = 0; ES = 1; EA = 1; delay_2(28); //f_readcard(); while(1) { f_readcard(); //讀卡 f_writecard(command1); //寫卡 f_clearpassword(); //清除密碼 f_changepassword(); //修改密碼 } }
標簽: 12345
上傳時間: 2017-10-20
上傳用戶:my_lcs
在本課中,我們要用一個按鍵來實現跑馬燈的 10 級調速。這又會涉及到鍵的去抖的問 題。 本課的試驗結果是,每按一次按鍵,跑馬速度就降低一級,共 10 級。 這里我們又增加了一個變量 speedlever,來保存當前的速度檔次。 在按鍵里的處理中,多了當前檔次的延時值的設置。 請看程序: ―――――――――――――――― #define uchar unsigned char //定義一下方便使用 #define uint unsigned int #define ulong unsigned long #include <reg52.h> //包括一個 52 標準內核的頭文件 sbit P10 = P1^0; //頭文件中沒有定義的 IO 就要自己來定義了 sbit P11 = P1^1; sbit P12 = P1^2; sbit P13 = P1^3; sbit K1= P3^2; bit ldelay=0; //長定時溢出標記,預置是 0 uchar speed=10; //設置一個變量保存默認的跑馬燈的移動速度 uchar speedlever=0; //保存當前的速度檔次 char code dx516[3] _at_ 0x003b;//這是為了仿真設置的 //一個按鍵控制的 10 級變速跑馬燈試驗 void main(void) // 主程序 { uchar code ledp[4]={0xfe,0xfd,0xfb,0xf7};//預定的寫入 P1 的值 uchar ledi; //用來指示顯示順序 uint n; RCAP2H =0x10; //賦 T2 的預置值 0x1000,溢出 30 次就是 1 秒鐘 RCAP2L =0x00; TR2=1; //啟動定時器 ET2=1; //打開定時器 2 中斷 EA=1; //打開總中斷 while(1) //主程序循環 { if(ldelay) //發現有時間溢出標記,進入處理 { ldelay=0; //清除標記 P1=ledp[ledi]; //讀出一個值送到 P1 口 ledi++; //指向下一個 if(ledi==4) { ledi=0; //到了最后一個燈就換到第一個 } } if(!K1) //如果讀到 K1 為 0 { for(n=0;n<1000;n++); //等待按鍵穩定 while(!K1); //等待按鍵松開 for(n=0;n<1000;n++); //等待按鍵穩定松開 speedlever++; if(speedlever==10)speedlever=0; speed=speedlever*3; //檔次和延時之間的預算法則,也可以用查表方法,做出 不規則的法則 } } } //定時器 2 中斷 timer2() interrupt 5 { static uchar t; TF2=0; t++; if((t==speed)||(t>30)) //比較一個變化的數值,以實現變化的時間溢出,同時限制了最慢速 度為 1 秒 { t=0; ldelay=1;//每次長時間的溢出,就置一個標記,以便主程序處理 } } ―――――――――――――――――――――― 請打開 lesson11 目錄的工程,編譯,運行,看結果: 按 K1,速度則降低一次,總共 10 個檔次。
上傳時間: 2017-11-06
上傳用戶:szcyclone
LED 一般是恒流操作的,如何改變 LED 的亮度呢?答案就是 PWM 控制。在一定的 頻率的方波中,調整高電平和低電平的占空比,即可實現。比如我們用低電平點亮一個 LED 燈,我們假設把一個頻率周期分為 10 個時間等份,如果方波中的高低電平占空比是 9:1, 這是就是一個比較暗的亮度,如果方波中高低電平占空比是 10:0,這時,全部是高電平, 燈是滅的。如果占空比是 5:5,就是一個中間亮度,如果高低比是 1:9,是一個比較亮的 亮度,如果高低是 0:10,這時全部是低電平,就是最亮的。 實際上應用中,電視屏幕墻中的幾十百萬 LED 象素都是這樣控制的,而且每一個象素 都有紅綠藍 3 個 LED,每個 LED 可以變化的亮度是幾百到幾萬或者更多的級別,以實現真 彩色的顯示。還有在您的手機中,背光燈的亮度如果是可以變化的,也應該是這種工作方式。 目前的城市彩燈也有很多都使用了 LED,需要控制亮度是也是 PWM 控制。 下面來分析我們的例程,在這個例程中,我們將定時器 2 溢出定為 1/1200 秒。每 10 次脈沖輸出一個 120HZ 頻率。這每 10 次脈沖再用來控制高低電平的 10 個比值。這樣,在 每個 1/120 秒的方波周期中,我們都可以改變方波的輸出占空比,從而控制 LED 燈的 10 個 級別的亮度。 為什么輸出方波的頻率要 120HZ 這么高?因為如果頻率太低,人眼就會看到閃爍感 覺。一般起碼要在 60HZ 以上才感覺好點,120HZ 就基本上看不到閃爍,只能看到亮度的變 化了。 下面請看程序,程序中有比較多的注釋: ――――――――――――――――――――――― #define uchar unsigned char //定義一下方便使用 #define uint unsigned int #define ulong unsigned long #include <reg52.h> //包括一個 52 標準內核的頭文件 sbit P10 = P1^0; //要控制的 LED 燈 sbit K1= P3^2; //按鍵 K1 uchar scale;//用于保存占空比的輸出 0 的時間份額,總共 10 份 char code dx516[3] _at_ 0x003b;//這是為了仿真設置的 //模擬 PWM 輸出控制燈的 10 個亮度級別 void main(void) // 主程序 { uint n; RCAP2H =0xF3; //賦 T2 的預置值,溢出 1 次是 1/1200 秒鐘 RCAP2L =0x98; TR2=1; //啟動定時器 ET2=1; //打開定時器 2 中斷 EA=1; //打開總中斷 while(1) //程序循環 { ;//主程序在這里就不斷自循環,實際應用中,這里是做主要工作 for(n=0;n<50000;n++); //每過一會兒就自動加一個檔次的亮度 scale++; if(scale==10)scale=0; } } //1/1200 秒定時器 2 中斷 timer2() interrupt 5 { static uchar tt; //tt 用來保存當前時間在一秒中的比例位置 TF2=0; tt++; if(tt==10) //每 1/120 秒整開始輸出低電平 { tt=0; if(scale!=0) //這里加這一句是為了消除滅燈狀態產生的鬼影 P10=0; } if(scale==tt) //按照當前占空比切換輸出高電平 P10=1; } ―――――――――――――――――― 在主程序中,每延時一段時間,就自動換一個占空比,以使亮度自動變化,方便觀察。 編譯,運行,看結果。 可以看到,LED 的亮度以每種亮度 1 秒左右不斷變化,共有 10 個級別。
上傳時間: 2017-11-06
上傳用戶:szcyclone
Lithium–sulfur batteries are a promising energy-storage technology due to their relatively low cost and high theoretical energy density. However, one of their major technical problems is the shuttling of soluble polysulfides between electrodes, resulting in rapid capacity fading. Here, we present a metal–organic framework (MOF)-based battery separator to mitigate the shuttling problem. We show that the MOF-based separator acts as an ionic sieve in lithium–sulfur batteries, which selectively sieves Li+ ions while e ciently suppressing undesired polysulfides migrating to the anode side. When a sulfur-containing mesoporous carbon material (approximately 70 wt% sulfur content) is used as a cathode composite without elaborate synthesis or surface modification, a lithium–sulfur battery with a MOF-based separator exhibits a low capacity decay rate (0.019% per cycle over 1,500 cycles). Moreover, there is almost no capacity fading after the initial 100 cycles. Our approach demonstrates the potential for MOF-based materials as separators for energy-storage applications.
上傳時間: 2017-11-23
上傳用戶:653357637
#include <stdio.h> #include <stdlib.h> ///鏈式棧 typedef struct node { int data; struct node *next; }Node,*Linklist; Linklist Createlist() { Linklist p; Linklist h; int data1; scanf("%d",&data1); if(data1 != 0) { h = (Node *)malloc(sizeof(Node)); h->data = data1; h->next = NULL; } else if(data1 == 0) return NULL; scanf("%d",&data1); while(data1 != 0) { p = (Node *)malloc(sizeof(Node)); p -> data = data1; p -> next = h; h = p; scanf("%d",&data1); } return h; } void Outputlist(Node *head) { Linklist p; p = head; while(p != NULL ) { printf("%d ",p->data); p = p->next; } printf("\n"); } void Freelist(Node *head) { Node *p; Node *q = NULL; p = head; while(p != NULL) { q = p; p = p->next; free(q); } } int main() { Node *head; head = Createlist(); Outputlist(head); Freelist(head); return 0; } 2.順序棧 [cpp] view plain copy #include <iostream> #include <stdio.h> #include <stdlib.h> ///順序棧 #define MaxSize 100 using namespace std; typedef
上傳時間: 2018-05-09
上傳用戶:123456..