版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
新概念51單片機C語言教程一一入門、提高、開發(fā)、拓展全攻略郭天祥編著電子工業(yè)出版社例2.2.1編寫程序,點亮第一個發(fā)光二極管(part2_l.cP27)include<reg52.h>//52系列單片機頭文件sbitledl=PlAO; 〃聲明單片機Plロ的第一位voidmain() 〃主函數(shù)(led1=0; /?點亮第一個發(fā)光二極管*/)例2.2.2編寫程序,點亮P1口的若干二極管(part2_2.cP39)include<reg52.h>//52系列單片機頭文件voidmain() 〃主函數(shù)(Pl=0xaa;//while(l);)例2.5.1利用for語句延時特性,編寫第一個發(fā)光二極管以間隔1S亮滅閃動的程序(part2.3.CP42)#include<reg52.h> //52系列單片機頭文件#defineuintunsignedint〃宏定義sbitledl=PlA0; 〃聲明單片機Pl□的第一位uinti,j;voidmain() 〃主函數(shù)(while(1)〃大循環(huán)(led1=0; /?點亮第一個發(fā)光二極管*/for(i=l;i>0;i—) 〃延時for(j=110;j>0;j-);ledl=l; /?關(guān)閉第一個發(fā)光二極管*/for(i=1000;i>0;i-) 〃延時for(j=110;j>0;j-);
#include<reg52.h>#defineuintunsignedintsbitledl=PlA0;voiddelayls();#include<reg52.h>#defineuintunsignedintsbitledl=PlA0;voiddelayls();voidmain()while(l)〃宏定義〃聲明單片機P1口的第一位〃聲明子函數(shù)〃主函數(shù)led1=0;delayls();ledl=l;delayls();/?點亮第一個發(fā)光二極管?/〃調(diào)用延時子函數(shù)/?關(guān)閉第一個發(fā)光二極管?/〃調(diào)用延時子函數(shù)voiddelayls()〃子函數(shù)體uinti,j;led1=0;delayls();ledl=l;delayls();/?點亮第一個發(fā)光二極管?/〃調(diào)用延時子函數(shù)/?關(guān)閉第一個發(fā)光二極管?/〃調(diào)用延時子函數(shù)voiddelayls()〃子函數(shù)體uinti,j;for(i=500;i>0;i-)for(j=110;j>0;j-);例2.フ.1編寫程序使第一個二極管以亮200ms、滅800ms的方式閃動。(part2_5.cP49)#include<reg52.h>#defineuintunsignedintsbitledl=PlA0;voiddelayms(uint);voidmain()//52系列單片機頭文件〃宏定義〃聲明單片機P1口的第一位〃聲明子函數(shù)〃主函數(shù)while(l)〃大循環(huán)led1=0;delayms(200);ledl=l;delayms(800);/?點亮第一個發(fā)光二極管*/〃延時200毫秒/?關(guān)閉第一個發(fā)光二極管*/〃延時800毫秒voiddelayms(uintxms)uinti,j;for(i=xms;i>0;i-)//i=xms即延時約xms亳秒for(j=110;j>0;j-);#include<reg52.h>#include<reg52.h>#include<intrins.h>#defineuintunsignedint#defineucharunsignedcharvoiddelayms(uint);ucharaa;voidmain()(aa=0xfe;while(l){Pl=aa;delayms(500);aa=_crol_(aa,1);}}voiddelayms(uintxms)(uinti,j;for(i=xms;i>0;i—)forG=110;j>0;j-);例2.8.3利用C51自帶庫ーcrol_(),以間隔500ms,實現(xiàn)流水燈程序//52系列單片機頭文件〃宏定義〃聲明子函數(shù)〃主函數(shù)〃賦初值11111110〃大循環(huán)〃延時500毫秒〃將aa循環(huán)左移1位后再賦給〃i=xms即延時約xms毫秒例3.2.1編寫程序使第一個數(shù)碼管顯示8(part2.1_.lcP59)#include<reg52.h>sbitdula=P2A6;sbitwela=P2A7;voidmain()I//52系列單片機頭文件〃申明U1鎖存器的鎖存端〃申明U2鎖存器的鎖存端wela=l;〃打開U2鎖存器P0=0xFE;〃送入位選信號wela=0;〃關(guān)閉U2鎖存器dula=l;〃打開U1鎖存器P0=0x7F;〃送入段選信號dula=0;〃關(guān)閉U2鎖存器whiled);)〃程序停止到這里例322讓實驗板上6個數(shù)碼管同時點亮,依次顯示。到F,時間間隔為0.5ms,循環(huán)下去。(part2.1_2.cP61)#include<reg52.h> //52系列單片機頭文件#defineucharunsignedchar#defineuintunsignedintsbitdula=P2A6J 〃申明U!鎖存器的鎖存端sbitwela=P2A7; 〃申明U2鎖存器的鎖存端ucharnum;uncharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71);voiddelayms(uint);voidmain()(wela=l:〃打開U2鎖存端P0=0xco:〃送入位選信號wela=0:〃關(guān)閉U2鎖存端while(l)(for(num=0;num<16;num++) //16個數(shù)循環(huán)顯示{dula=l;〃打開U1鎖存端P0=table[num]; 〃送入段選信號dula=0;〃關(guān)閉U!鎖存端delay(500);〃延時0.5秒voiddelayms(uintxms)uinti,j;for(i=xms;i>0;i—)//i=xms即延時約xms毫秒forG=110;j>0;j-);例3.3.1第一個數(shù)碼管顯示1,時間為0.5s,然后關(guān)閉它,立即讓第二個數(shù)碼管顯示2,時間為0.5s,在關(guān)閉它……一直到最后ー個數(shù)碼管顯示6,時間同樣為0.5s,關(guān)閉它之后再回來顯示第一個數(shù)碼管,一直循環(huán)下去。(part2.1_3.cP62)例3.5.2用定時器0的方式1實現(xiàn)第一個發(fā)光二極管以200ms間隔閃爍,用定時器1的方式1實現(xiàn)數(shù)碼管前兩位59s循環(huán)計時。(part2.1_5.cP75)例4.1.1用數(shù)碼管前兩位顯示ー個十進制數(shù),變化范圍為〇〇?59,開始時顯示00,每按下S2鍵一次,數(shù)值加1;每按下S3鍵一次,數(shù)值減1;每按下S4鍵一次,數(shù)值歸零;按下S5鍵ー次,利用定時器功能使數(shù)值開始自動每秒加!,再次按下S5鍵,數(shù)值停止加!,保持顯示原數(shù)。(part2.2_l.cP82)#include<reg52.h> //52系列單片機頭文件#defineucharunsignedchar#defineuintunsignedintsbitkeyl=P3A4;sbitkey2=P3A5;sbitkey3=P3A6;sbitkey4=P3A7;sbitdula=P2A6i 〃申明U!鎖存器的鎖存端sbitwela=P2A7; 〃申明U2鎖存器的鎖存端ucharcodetable[J={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};voiddelayms(uint);ucharnumt0,num;voiddisplay(ucharnumdis)〃顯示子函數(shù)(ucharshi,ge; 〃分離兩個分別要顯示的數(shù)shi=numdis/10;ge=numdis%10;dula=l;P0=table[shi]; 〃送十位段選數(shù)據(jù)dula=0;P0=0xffi 〃送位選數(shù)據(jù)前關(guān)閉所有顯示,防止打開位選鎖存時wela=l; 〃原來段選數(shù)據(jù)通過位選鎖存器造成混亂P0=0xfeJ 〃送位選數(shù)據(jù)wela=0;delayms(5);〃延時dula=l;P0=table[ge];〃送個位段選數(shù)據(jù)dula=0;PO=Oxff;wela=1;PO=Oxfd;wela=0;delayms(5);voiddelayms(uintxms)uinti,j;for(i=xms;i>0;i-) //i=xms即延時約xms毫秒for(j=110;j>0;j-);)voidinito 〃初始化函數(shù)(TMOD=0x01;//設(shè)置定時器。為工作方式!(00000001)TH0=(65536-45872)/256;//裝初值50ms一次中斷TL0=(65536-45872)%256;EA=1;〃開總中斷ET0=l;〃開定時器〇中斷Ivoidkeyscan()(if(keyl==O)(delayms(lO);if(keyl==O){num++;if(num==60)〃當(dāng)至リ60時重新歸〇num=0;while(!keyl);〃等待按鍵釋放})if(key2==0)(delayms(lO);if(key2==0){if(num==0)〃當(dāng)至リ0時重:新歸60num=60;num—;while(!key2);)}if(key3==0)(delayms(lO);if(key3==0)num=0;〃清0while(!key3);)if(key4==0)(delayms(lO);if(key4==0)(while(!key4);TRO=~TRO;〃啟動或停止定時器〇)))voidmain()(init();〃初始化函數(shù)while(l)(keyscan();display(num);)}voidT0_time()interrupt1(TH0=(65536?45872)/256;〃重裝初值TL0=(65536-45872)%256;numtO++;if(numt0==20)〃如果到了20次,說明1秒時間到(numt0=0;〃然后把num清〇重新再計20次num++;if(num==60)num=0;}例4.2.1實驗班上電時,數(shù)碼管不顯示,順序按下矩陣鍵盤后,數(shù)碼管上依次顯示〇?F,六個數(shù)碼管同時靜態(tài)顯示即可。(part2.2_2.cP87)#include<reg52.h> //52系列單片機頭文件#defineucharunsignedchar#defineuintunsignedintsbitdula=P2A6; 〃申明UI鎖存器的鎖存端sbitwela=P2A7; 〃申明U2鎖存器的鎖存端ucharcodetable[J={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};voiddelayms(uintxms)(uinti,j;for(i=xms;i>0;i—) //i=xms即延時約xms毫秒for(j=110;j>0;j-);)voiddisplay(ucharnum)(P0二table[num];〃顯示函數(shù)只送段選數(shù)據(jù)dula=l;dula=0;)voidmatrixkeyscan()(uchartemp,key;P3=0xfe;temp=P3;temp=temp&OxfO;if(temp!=OxfO)(delayms(lO);temp=P3;temp=temp&OxfO;if(temp!=OxfO)(temp=P3;switch(temp)(caseOxee:key=O;break;caseOxde:key=1;break;caseOxbe:key=2;break;case0x7e:key=3;break;while(temp!=OxfO)(temp=P3;temp=temp&OxfO;}display(key);))P3=0xfd;temp=P3;temp=temp&OxfO;if(temp!=OxfO)(delayms(lO);temp=P3;temp=temp&OxfO;if(temp!=OxfO)(temp=P3;switch(temp){caseOxed:key=4;break;caseOxdd:key=5;break;caseOxbd:key=6;break;caseOx7d:key=7;break;)while(temp!=OxfO)(temp=P3;temp=temp&OxR);)display(key);P3=Oxfb;temp=P3;temp=temp&OxfO;if(temp!=OxfO)(delayms(lO);temp=P3;temp=temp&OxfO;if(temp!=OxfO)(temp=P3;switch(temp){caseOxeb:key=8;break;caseOxdb:key=9;break;caseOxbb:key=l0;break;case0x7b:key=ll;break;)while(temp!=OxfiO)(temp=P3;temp=temp&OxfO;)display(key);))P3=Oxf7;temp=P3;temp=temp&OxfO;if(temp!=OxfO)(delayms(10);temp=P3;temp=temp&OxfO;if(temp!=OxfO)temp二P3;switch(temp)case0xe7:key=12;break;caseOxd7:key=13;break;caseOxb7:key=14;break;case0x77:key=15;break;}while(temp!=0xf0)(temp=P3;temp=temp&0xf0;)display(key);)))voidmain()(P0=0;〃關(guān)閉所有數(shù)碼管段選dula=l;dula=0;P0=0xc0;〃位選中所有數(shù)碼管wela=1;wela=0;while(l)matrixkeyscan();〃不停調(diào)用鍵盤掃描程序
例531用單片機控制ADC0804進行數(shù)模轉(zhuǎn)換,當(dāng)擰動實驗板上A/D旁邊的電位時,在數(shù)碼管的前三位以十進制方式顯示出A/D轉(zhuǎn)換后的數(shù)字量(8位A/D轉(zhuǎn)換后數(shù)值在0?255變化)。(part2.3_l.cP107)#include<reg52.h>#include<intrins.h>#include<reg52.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedint//52系列單片機頭文件sbitdula=P2A6;sbitwela=P2A7;sbitadwr=P3A6;sbitadrd=P3Asbitdula=P2A6;sbitwela=P2A7;sbitadwr=P3A6;sbitadrd=P3A7;ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71);voiddelayms(uintxms)〃申明UI鎖存器的鎖存端〃申明U2鎖存器的鎖存端〃定義AD的WR端口〃定義AD的RD端口uinti,j;for(i=xms;i>0;i-)for(j=110;j>0;j-);〃i=xms即延時約xms毫秒voiddisplay(ucharbai.ucharshi,ucharge)〃顯示子函數(shù)dula=l;PO=table[bai];dula=O;PO=Oxff;wela=l;PO=Ox7e;wela=0;delayms(5);〃送段選數(shù)據(jù)〃送位選數(shù)據(jù)前關(guān)閉所有顯示,防止打開位選鎖存時〃原來段選數(shù)據(jù)通過位選鎖存器造成混亂〃送位選數(shù)據(jù)〃延時dula=l;PO=table[shi];dula=0;PO=Oxff;wela=1;P0=0x7d;wela=O;delayms(5);dula=l;PO=table[ge];dula=O;PO=Oxff;wela=l;P0=0x7b;wela=O;delayms(5);voidmain()//主程序(uchara,Al,A2,A3,adval;wela=l;P0=0x7f; 〃置CSAD為〇,選通ADCS以后不必再管ADCSwela=0;while(l)(adwr=1;_nop_();adwr=0i 〃啟動AD轉(zhuǎn)換_nop_();adwr=I;for(a=10;a>0;a-) //TX-1C實驗板AD工作頻率較低,所以啟動轉(zhuǎn)換后要多留點時間用來轉(zhuǎn)換{ 〃這里把顯示部分放這里的原因也是為了延長轉(zhuǎn)換時間display(Al,A2,A3);Pl=Oxff;〃讀取Pl口之前先給其寫全!adrd=l;〃選通ADCS_nop_();adrd=O;//AD讀使能_nop_();adval=Pl;//AD數(shù)據(jù)讀取賦給P1ロadrd=1;Al=adval/100;〃分出百,十,和個位A2=adval%100/10;A3=adval%10;
例5.5.I用單片機控制DAC0832芯片輸出電流,讓發(fā)光二級管D12由火均勻變到最亮,再由最亮均勻熄滅。在最亮和最暗時使用蜂鳴器分別警報一聲,完成整個周期時間控制在5S左右,循環(huán)變化。(part2.3_2.cP121)#include<reg52.h>#defineucharunsignedchar#defineuintunsignedintsbitdula=P2A6;sbitwela=P2A7;sbitdawr=P3A6;sbitdacs=P3A2;sbitbeep=P2A3;voiddelayms(uintxms)〃申明U1sbitdula=P2A6;sbitwela=P2A7;sbitdawr=P3A6;sbitdacs=P3A2;sbitbeep=P2A3;voiddelayms(uintxms)uinti,j;//i=xms即//i=xms即延時約xms毫秒for(j=l10;j>0;j-);voidmain()(ucharvaLflag;dula=0;wela=0;dacs=0;dawr=0;P0=0;while(l)(if(flag==0){val+=5;P0=val: 〃通過PO口給DA數(shù)據(jù)口賦值if(val==255){flag=l;beep=0;delayms(lOO);beep=1;}delayms(50);}else(val-=5;PO=val;〃通過P0口給DA數(shù)據(jù)口賦值if(val==O){flag=O;beep=O;delayms(lOO);beep=1;}delayms(5O);例6.5.1在上位機上用串口調(diào)試助手發(fā)送ー個字符X,單片機收到字符后返回給上位機“1getX”,串口波特率設(shè)為9600bps。(part2.4_l.cP137)#include<reg52.h>#defineucharunsignedchar#defineuintunsignedintunsignedcharflag,a,i;ucharcodetable[]="IgetH;//ucharcodetable[]={]'ソvoidinit()(TMOD=0x20;THl=0xfd;TLl=0xfd;TR1=1;REN=1;SM0=0;SM1=1;EA=1;ES=1;)voidmain()(init();while(l)(if(flag==l)|ES=0;for(i=0;iv6;i++)(SBUF=table[i];while(!TI);TI=0;)SBUF=a;while(!TI);TI=0;ES=1;flag=0;)))voidser()interrupt4RI=O;a=SBUF;flag=l;例6.6.1單片機上電后等待從上位機串口發(fā)來的命令,同時在數(shù)碼管的前三位以十進制方式顯示A/D采集的數(shù)值,在未收到上位機發(fā)送來的啟動A/D轉(zhuǎn)換命令之前數(shù)碼管始終顯示〇〇〇〇當(dāng)收到上位機以十六進制發(fā)送來的01后,向上位機發(fā)送字符串“Turnonad!”同時間隔1s讀取一次A/D的值,然后把A/D采集回來的8位二進制轉(zhuǎn)換成卜進制表示的實際電壓浮點數(shù),并且從串口發(fā)送給上位機,形式如“Thevoltageis3.398438V”,發(fā)送周期也是一秒一次,同時在數(shù)碼管上也要每秒刷新現(xiàn)實的數(shù)值。當(dāng)收到上位機以十六進制發(fā)送過來的02后,向上位機發(fā)送字符串“Turnoffad!”,然后停止發(fā)送電壓值,數(shù)碼管上顯示上次結(jié)束時保持的值。當(dāng)收到上位機發(fā)來的其他任何數(shù)時,向上位機發(fā)送字符串“Error!”。(part2.4_2.cP140)#include<reg52.h>#include<intrins.h>#include<stdio.h>#defineucharunsignedchar#defineuintunsignedintsbitdula=P2ハ6;〃申明UI鎖存器的鎖存端sbitwela=P2A7;〃申明U2鎖存器的鎖存端sbitadwr=P3A6; 〃定義AD的WR端口sbitadrd=P3A7; 〃定義AD的RD端口ucharflag,a;unsignedcharflag_uart,flag_time,flag_on,a,i,tO_num,ad_val;floatad_vo;ucharcodetable[J={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71);voiddelayms(uintxms)(uinti,j;for(i=xms;i>0;i-) //i=xms即延時約xms毫秒for(j=110;j>0;j-);}voidinit()(TMOD=0x21;//SCON=0x50;THO=(65536-5OOOO)/256;TL0=(65536-50000)%256;THl=Oxfd;TLl=Oxfd;TR1=1;ETO=1;SMO=O;SM1=1;REN=1;EA=1;ES=1;}voiddisplay(ucharvalue)〃顯示子函數(shù)(ucharbai,shi,ge;bai=value/100;〃分出百,十,和個位shi=value%100/10;ge=value%10;dula=l;PO=table[bai];〃送段選數(shù)據(jù)dula=0;P0=0xff; 〃送位選數(shù)據(jù)前關(guān)閉所有顯示,防止打開位選鎖存時wela=l; 〃原來段選數(shù)據(jù)通過位選鎖存器造成混亂P0=0x7e; 〃送位選數(shù)據(jù)wela=0;delayms⑸; 〃延時dula=l;PO=table[shi];dula=0;P0=0xff;wela=l;P0=0x7d;wela=0;delayms(5);dula=l;PO=table[ge];dula=0;P0=0xff;wela=1;P0=0x7b;wela=0;delayms(5);ucharget_ad()ucharadval;adwr=l;_nop_();adwr=O: 〃啟動AD轉(zhuǎn)換_nop_();adwr=l;Pl=Oxff; 〃讀取Pl口之前先給其寫全1adrd=l;_nop_();adrd=O; //AD讀使能_nop_();adval=Pl; //AD數(shù)據(jù)讀取adrd=l;returnadval;}voidmain()(init();wela=l;P0=0x7f; 〃置CSAD為0?選通ADCS以后不必再管ADCSwela=0;while(l)(if(flag_uart==1)(flag_uart=O;ES=0;TI=1;switch(flag_on){case0:puts("Tumonad!\n");TR0=l;break;printf(nTumoffad!\nn);TR0=0;break;puts("Error!\nH);break;}while(!TI);〃必須要加TI=0;ES=1;}if(flag_time==l)flag_time=O;ad_val=get_ad();ad_vo=(float)ad_val*5.0/256.0;ES=O;TI=1;printf("Thevoltageis%fV\n,,,ad_vo);while(!TI);TI=0;ES=1;}display(ad_val);voidtimerOOinterrupt1(TH0=(65536-50000)/256;TL0=(65536-50000)%256;tO_num++;if(t0_num==20)(t0_num=0;flag_time=l;)}voidser()interrupt4(RI=0;a=SBUF;flag_uart=l;if(a==l)flag_on=0;elseif(a==2)flag_on=1;elseflag_on=2;例7.2.1實現(xiàn)1602液晶的第一行顯示"LOVEMCU!”,在第二行顯示W(wǎng)WW.TXMCU.COM。(part2.5_l.cP152)#include<reg52.h>#defineucharunsignedchar#defineuintunsignedintucharcodetable[]="ILOVEMCU!”;ucharcodetable1[]=”WWW.TXMCU.COM”;sbitlcden=P3A4;〃液晶使能端sbitlcdrs=P3A5; 〃液晶數(shù)據(jù)命令選擇端sbitdula=P2A6; 〃申明U1鎖存器的鎖存端sbitwela=P2A7; 〃申明U2鎖存器的鎖存端ucharnum;voiddelay(uintz)(uintx,y;for(x=z;x>O;x-)for(y=110;y>0;y—);)voidwrite_com(ucharcom)(lcdrs=O;P0=com;delay⑸;lcden=l;delay⑸;lcden=O;)voidwrite_data(uchardate)(lcdrs=1;PO=date;delay(5);lcden=l;delay⑸;lcden=O;)voidinit()(dula=O;wela=0;lcden=O;write_com(0x38);〃設(shè)置!6X2顯示,5X7點陣,8位數(shù)據(jù)接口write_com(0x0c);〃設(shè)置開顯示,不顯示光標(biāo)write_com(0x06);〃寫ー個字符后地址指針加1write一com(0x01)〃顯示清零,數(shù)據(jù)指針清零Ivoidmain()(init();write_com(0x80);for(num=0;num<l1;num++)(write_data(table[num]);delay(5);)write_com(Ox80+0x40);for(num=0;num<13;num++)(write_data(table1[num]);delay⑸;}while(l);)例フ.2.2實現(xiàn)1602第一行從左側(cè)移入"Helloeveryone!”同時第二行從右側(cè)移入“Welcometohere!",移入速度自定,然后停留在屏幕上。(part2.5_2.cP154)#include<reg52.h>#defineucharunsignedchar#defineuintunsignedintucharcodetable[]=*'Helloeveryone!*';ucharcodetable1[j="Welcometohere!";sbitlcden=P3A4;〃液晶使能端sbitlcdrs=P3A5; 〃液晶數(shù)據(jù)命令選擇端sbitdula=P2A6; 〃申明U1鎖存器的鎖存端sbitwela=P2A7;〃申明U2鎖存器的鎖存端ucharnum;voiddelay(uintz)(uintx,y;for(x=z;x>0;x—)for(y=110;y>0;y-);)voidwrite_com(ucharcom)lcdrs=0;P0=com;delay⑸;lcden=1;delay(5);lcden=O;Ivoidwrite_data(uchardate)(lcdrs=1;P0=date;delay(5);lcden=1;delay(5);lcden=0;)voidinit()(dula=0;wela=O;lcden=0;write_com(0x38)ル設(shè)置16X2顯示,5X7點陣,8位數(shù)據(jù)接口write_com(0x0c);〃設(shè)置開顯示,不顯示光標(biāo)write_com(0x06);〃寫ー個字符后地址指針加1wrile_com(0x01)ノ顯示清零,數(shù)據(jù)指針清零)voidmain()(init();write_com(0x80+0x10);for(num=0;num<15;num++)(write_data(table[num]);delay(5);)write_com(0x80+0x50);for(num=0;num<16;num++)(write_data(tablel[num]);delay⑸;}for(num=0;num<16;num++)(write_com(0xl8);delay(200);}while(l);例?.3.1實現(xiàn)12232液晶的第一行顯示“ILOVEMCU!”,第二行顯示“我愛單片機”。(part2.5_3.cP160)#include<REG52.h>#defineuintunsignedint#defineucharunsignedcharsbitCS=P1A2;sbitSID=P1A1;sbitSCLK=P1AO;ucharcodedisps[]={,'ILOVEMCU!n};ucharcodedispxロ={"我愛單片機!”};voiddelay_lms(uintx)(uinti,j;for(j=0;j<x;j++)for(i=0;i<l10;i++);}voidsend_command(ucharcommand_data)(uchari;uchari_data;i_data=0xf8;CS=1;SCLK=0;for(i=0;i<8;i++)(SID=(bit)(i_data&0x80);SCLK=0;SCLK=1;i_data=i_data?1;}i_data=command_data;i_data&=OxfO;for(i=0;i<8;i++)(SID=(bit)(i_data&0x80);SCLK=0;SCLK=1;i_data=i_data?l;}i_data=command_data;i_data?=4;for(i=0;i<8;i++)SID=(bit)(i_data&0x80);SCLK=O;SCLK=1;i_data=i_data?l;}cs=o;delay_lms(10);}voidsend_data(ucharcommand_data)(uchari;uchari_data;i_data=Oxfa;CS=I;for(i=0;i<8;i++){SID=(bit)(i_data&0x80);SCLK=0;SCLK=1;i_data=i_data?1;)i_data=command_data;i_data&=0xf0;for(i=0;i<8;i++)(SID=(bit)(i_data&0x80);SCLK=O;SCLK=1;i_data=i_data?1;)i_data=command_data;i_data?=4;for(i=0;i<8;i++){SID=(bit)(i_data&0x80);SCLK=0;SCLK=1;i_data=i_data?1;CS=0;delay_lms(10);voidlcd_init()(delay_lms(100);send_command(0x30);/*設(shè)置8位數(shù)據(jù)接口,基本指令模式〇send_command(0x02);DDRAM*/send_command(0x06);/?游標(biāo)及顯示右移一位?/send_command(OxOc);/*整體顯示開,游標(biāo)關(guān),反白關(guān)?/send_command(0x01);/*寫入空格清屏幕?/send_command(0x80);/*設(shè)定首次顯示位置*/)voiddisplay_s()(uchara;send_command(Ox80);for(a=0;a<ll;a++)(send_data(disps[aj);))voiddisplay_x()(uchara;send_command(0x92);for(a=0;a<ll;a++)(send_data(dispx[al);)}main()(lcd_init();display_s();display_x();while(l);)例7.3.2實現(xiàn)12232液晶第一行從右側(cè)移入"Helloeveryone!”,同時第二行從右側(cè)移入“歡迎大家來學(xué)習(xí)!”移入速度自定,最后停留在屏幕上。(part2.5_4.cP163)include<REG52.h>#defineuintunsignedint#defineucharunsignedcharsbitCS=P1A2;sbitSID二PIN;sbitSCLK=P1AO;ucharcodedisps[]={"Helloeveryone!");ucharcodedispxロ={”歡迎大家來學(xué)習(xí)!ッ;voiddelay_lms(uintx)(uinti,j;for(j=0;j<x;j++)for(i=0;i<l10;i++);)voidsend_command(ucharcommand_data)(uchari;uchari_data;i_data=0xf8;CS=1;SCLK=O;for(i=0;i<8;i++)(SID=(bit)(i_data&0x80);SCLK=0;SCLK=1;i_data=i_data?1;}i_data=command_data;i_data&=0xf0;for(i=0;i<8;i++)(SID=(bit)(i_data&0x80);SCLK=0;SCLK=1;i_data=i_data?1;)i_data=command_data;i_data?=4;for(i=0;i<8;i++)(SID=(bit)(i_data&0x80);SCLK=0;SCLK=1;i_data=i_data?l;}CS=0;delay_lms(l);voidsend_data(ucharcommand_data)(uchari;uchari_data;i_data=Oxfa;CS=1;for(i=0;i<8;i++){SID=(bit)(i_data&0x80);SCLK=O;SCLK=1;i_data=i_data?1;)i_data=command_data;i_data&=0xf0;for(i=0;i<8;i++)(SID=(bit)(i_data&0x80);SCLK=0;SCLK=1;i_data=i_data?I;)i_data=command_data;i_data?=4;for(i=0;i<8;i++){SID=(bit)(i_data&0x80);SCLK=O;SCLK=1;i_data=i_data?1;)cs=o;delay_lms(l);)voidlcd_init()(delay_lms(100);send-command(0x30);ガ設(shè)置8位數(shù)據(jù)接口,基本指令模式。*/send_command(0x02);清DDRAM*/send_command(0x06);/?游標(biāo)及顯示右移一位?/send_command(OxOc);/*整體顯示開,游標(biāo)關(guān),反白關(guān)?/send_command(OxO1);/*寫入空格清屏幕?/send_command(0x80);/*設(shè)定首次顯示位置*/voiddisplay_s(ucharnum)uchara;send_command(0x88-num);for(a=0;a<15;a++)(send_data(disps[a]);))voiddisplay_x(ucharnum)(uchara;send_command(0x98-num);for(a=0;a<15;a++)(send_data(dispx[aj);)}main()(ucharaa;lcd_init();for(aa=0;aa<9;aa++)(display_s(aa);display_x(aa);delay.lms(300);)while(l);)例フ.4.1實現(xiàn)在12864液晶上第一行顯示“0123456789”,并且讓每一位數(shù)字隨機變化,第二行顯示“/r/”,第三行顯示“天祥電子”,第四行對應(yīng)第三行顯示出下劃線。(part2.5_5.cP173)#include<reg5l.h>#include<intrins.h>#include<stdlib.h>#defineucharunsignedchar#defineuintunsignedint/?端口定義?/#defineLCD_dataPO 〃數(shù)據(jù)口sbitLCD_RS=P3A5i 〃寄存器選擇輸入
sbitLCD_RW=P3ハ6;sbitLCD_EN=P3ハ4;sbitLCD_PSB=P3A7;sbitwela=P2A6;〃液晶讀ノ寫控制〃液晶使能控制〃串ノ并方式控制sbitdula=P2〃液晶讀ノ寫控制〃液晶使能控制〃串ノ并方式控制uchardisl[10];ucharcodedis2[]={""};ucharcodedis3[]={"天祥電子"};ucharcodedis4[]={" "};voiddelay_lms(uintx)(uinti,j;for(j=0;j<x;j++)fdr(i=O;i<l10;i++);/**//?寫指令數(shù)據(jù)到LCD *//*RS=L,RW=L,E=高脈沖,D0?D7=指令碼。 *//**/voidwrite_cmd(ucharcmd)(LCD_RS=0;LCD_RW=0;LCD_EN=0;PO=cmd;delay_lms(5);LCD_EN=1;delay_lms(5);LCD_EN=0;)/**/寫顯示數(shù)據(jù)到LCD *//*RS=H,RW=L.氏:高脈沖,D0-D7=數(shù)據(jù)。 *//**/voidwrite_dat(uchardat)(LCD_RS=1;LCD_RW=0;LCD_EN=0;P0=dat;
delay_lms(5);LCD_EN=1;delay_lms(5);*/可*/可*//*/?設(shè)定顯示位置voidlcd_pos(ucharX,ucharY)ucharpos;if(X==0){X=0x80;}elseif(X==l){X=0x90;}elseif(X==2){X=0x88;}elseif(X==3){X=0x98;}pos=X+Y;write_cmd(pos); 〃顯示地址}voidmakerand()uintran;ran=rand();disl[0]=ran/10000+0x30;disl[l]=ran%10000/1000+0x30;dis1[2]=ran%1000/100+0x30;disI[3]=ran%100/10+0x30;disl[4]=ran%10+0x30;ran=rand();disl[5]=ran/10000+0x30;dis1[6]=ran%10000/1000+0x30;dis1[7]=ran%1000/100+0x30;dis1[8J=ran%100/10+0x30;disl[9]=ran%10+0x30;*/*//*LCD初始化設(shè)定
*/*//小*キ**********************************************キ*****************/voidlcd_init()LCD_PSB=1;write_cmd(0x30);delay_lms(5);write_cmd(OxOC);delay_lms(5);write_cmd(0x01);delay_lms(5);〃并口方式〃基本指令操作〃顯示開,關(guān)光標(biāo)〃清除LCD的顯示內(nèi)容)/*********************************************************/*/*/*/*/*//?主程序/*/*********************************************************/main()uchari;wela=O;dula=O;〃延時〃延時〃初始化LCD〃設(shè)置顯示位置為第二行的第1個字符lcd_init();lcd_pos(l,0);i=O;while(dis2[i]!=ヘ〇')write_dat(dis2[i]);i++;〃顯示字符lcd_pos(2,0);i=0;while(dis3[i]!=ヘ〇,)〃設(shè)置顯示位置為第三行的第1個字符write_dat(dis3[i]);i++;)lcd_pos(3,0);i=0;while(dis4[i]!=ヘ〇')〃顯示字符〃設(shè)置顯示位置為第四行的第1個字符write_dat(dis4[i]);i++;〃顯小字符whiled)(lcd_pos(0,0)i 〃設(shè)置顯示位置為第一行的第1/r/
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年大學(xué)地理(氣候?qū)W原理)試題及答案
- 2025年中職飼草栽培與加工(飼草品質(zhì)提升技術(shù))試題及答案
- 2025四川雅安石棉縣佳業(yè)勞務(wù)派遣有限公司招聘石棉縣應(yīng)急救援指揮中心輔助人員1人備考題庫及答案詳解(考點梳理)
- 2026四川遂寧市船山區(qū)中醫(yī)醫(yī)院招聘備考題庫及答案詳解1套
- 《中國傳統(tǒng)能源地區(qū)低碳轉(zhuǎn)型》專題政策研究報告
- 云南省部分學(xué)校2025-2026學(xué)年七年級上學(xué)期第一次月考?xì)v史試題(含答案)
- 2024屆河南省濮陽市范縣高三下學(xué)期模擬測試(二)歷史試題(含答案)
- 2026浙江麗水學(xué)院招聘(引進)高層次人才71人備考題庫(2026年第1號)及答案詳解參考
- 2025云南昆明市盤龍區(qū)人民政府滇源街道辦事處公益性崗位招聘5人備考題庫含答案詳解
- 2026“夢工場”招商銀行銀川分行寒假實習(xí)生招聘備考題庫及答案詳解(奪冠系列)
- 產(chǎn)品供貨方案、售后服務(wù)方案
- 十八而志夢想以行+活動設(shè)計 高三下學(xué)期成人禮主題班會
- 2023年上海華東理工大學(xué)機械與動力工程學(xué)院教師崗位招聘筆試試題及答案
- TOC供應(yīng)鏈物流管理精益化培訓(xùn)教材PPT課件講義
- 醫(yī)院18類常用急救藥品規(guī)格清單
- 放棄公開遴選公務(wù)員面試資格聲明
- 2023-2024學(xué)年江蘇省海門市小學(xué)語文五年級期末點睛提升提分卷
- GB/T 1685-2008硫化橡膠或熱塑性橡膠在常溫和高溫下壓縮應(yīng)力松弛的測定
- 北京城市旅游故宮紅色中國風(fēng)PPT模板
- DB42T1319-2021綠色建筑設(shè)計與工程驗收標(biāo)準(zhǔn)
- 經(jīng)濟學(xué)原理 第一章課件
評論
0/150
提交評論