![新概念51單片機(jī)C語言教程--入門提高開發(fā)拓展全攻略_郭天祥_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/8/28663f76-12b5-45f1-b9ff-7ae1b510bd59/28663f76-12b5-45f1-b9ff-7ae1b510bd591.gif)
![新概念51單片機(jī)C語言教程--入門提高開發(fā)拓展全攻略_郭天祥_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/8/28663f76-12b5-45f1-b9ff-7ae1b510bd59/28663f76-12b5-45f1-b9ff-7ae1b510bd592.gif)
![新概念51單片機(jī)C語言教程--入門提高開發(fā)拓展全攻略_郭天祥_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/8/28663f76-12b5-45f1-b9ff-7ae1b510bd59/28663f76-12b5-45f1-b9ff-7ae1b510bd593.gif)
![新概念51單片機(jī)C語言教程--入門提高開發(fā)拓展全攻略_郭天祥_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/8/28663f76-12b5-45f1-b9ff-7ae1b510bd59/28663f76-12b5-45f1-b9ff-7ae1b510bd594.gif)
![新概念51單片機(jī)C語言教程--入門提高開發(fā)拓展全攻略_郭天祥_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/8/28663f76-12b5-45f1-b9ff-7ae1b510bd59/28663f76-12b5-45f1-b9ff-7ae1b510bd595.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、- 142 -一畝三分地收藏新概念51單片機(jī)C語言教程-入門、提高、開發(fā)、拓展全攻略例2.2.1 編寫程序,點(diǎn)亮第一個(gè)發(fā)光二極管(part2_1.c P27 )#include <reg52.h> /52系列單片機(jī)頭文件sbit led1=P10; /聲明單片機(jī)P1口的第一位void main() /主函數(shù)led1=0; /*點(diǎn)亮第一個(gè)發(fā)光二極管*/例2.2.2 編寫程序,點(diǎn)亮P1口的若干二極管(part2_2.c P39 )#include <reg52.h> /52系列單片機(jī)頭文件void main() /主函數(shù)P1=0xaa; /while(1); 例2.5.1利
2、用for語句延時(shí)特性,編寫第一個(gè)發(fā)光二極管以間隔1S亮滅閃動的程序(part2_3.c P42)#include <reg52.h> /52系列單片機(jī)頭文件#define uint unsigned int /宏定義sbit led1=P10; /聲明單片機(jī)P1口的第一位uint i,j;void main() /主函數(shù)while(1) /大循環(huán)led1=0;/*點(diǎn)亮第一個(gè)發(fā)光二極管*/for(i=1;i>0;i-)/延時(shí)for(j=110;j>0;j-);led1=1;/*關(guān)閉第一個(gè)發(fā)光二極管*/for(i=1000;i>0;i-)/延時(shí)for(j=110;j&
3、gt;0;j-);例2.6.1編寫程序使第一個(gè)發(fā)光二極管以間隔500ms亮滅閃動。(part2_4.c P48)#include <reg52.h> /52系列單片機(jī)頭文件#define uint unsigned int /宏定義sbit led1=P10; /聲明單片機(jī)P1口的第一位void delay1s();/聲明子函數(shù)void main() /主函數(shù)while(1) /大循環(huán)led1=0;/*點(diǎn)亮第一個(gè)發(fā)光二極管*/delay1s();/調(diào)用延時(shí)子函數(shù)led1=1;/*關(guān)閉第一個(gè)發(fā)光二極管*/delay1s();/調(diào)用延時(shí)子函數(shù)void delay1s()/子函數(shù)體uin
4、t i,j;for(i=500;i>0;i-)for(j=110;j>0;j-);例2.7.1編寫程序使第一個(gè)二極管以亮200ms、滅800ms的方式閃動。(part2_5.c P49)#include <reg52.h> /52系列單片機(jī)頭文件#define uint unsigned int /宏定義sbit led1=P10; /聲明單片機(jī)P1口的第一位void delayms(uint);/聲明子函數(shù)void main() /主函數(shù)while(1) /大循環(huán)led1=0;/*點(diǎn)亮第一個(gè)發(fā)光二極管*/delayms(200);/延時(shí)200毫秒led1=1;/*關(guān)閉
5、第一個(gè)發(fā)光二極管*/delayms(800);/延時(shí)800毫秒void delayms(uint xms)uint i,j;for(i=xms;i>0;i-) /i=xms即延時(shí)約xms毫秒for(j=110;j>0;j-);例2.8.3利用C51自帶庫_crol_(),以間隔500ms,實(shí)現(xiàn)流水燈程序(part2_6.c P53)#include <reg52.h> /52系列單片機(jī)頭文件#include <intrins.h>#define uint unsigned int /宏定義#define uchar unsigned charvoid del
6、ayms(uint);/聲明子函數(shù)uchar aa;void main() /主函數(shù)aa=0xfe;/賦初值11111110 while(1) /大循環(huán)P1=aa;delayms(500); /延時(shí)500毫秒aa=_crol_(aa,1); /將aa循環(huán)左移1位后再賦給aavoid delayms(uint xms)uint i,j;for(i=xms;i>0;i-) /i=xms即延時(shí)約xms毫秒for(j=110;j>0;j-);例3.2.1編寫程序使第一個(gè)數(shù)碼管顯示8(part2.1_.1c P59)#include <reg52.h> /52系列單片機(jī)頭文件sb
7、it dula=P26; /申明U1鎖存器的鎖存端sbit wela=P27; /申明U2鎖存器的鎖存端void main()wela=1; /打開U2鎖存器P0=0xFE; /送入位選信號wela=0; /關(guān)閉U2鎖存器dula=1; /打開U1鎖存器P0=0x7F; /送入段選信號dula=0; /關(guān)閉U2鎖存器while(1); /程序停止到這里例3.2.2讓實(shí)驗(yàn)板上6個(gè)數(shù)碼管同時(shí)點(diǎn)亮,依次顯示0到F,時(shí)間間隔為0.5ms,循環(huán)下去。(part2.1_2.c P61)#include <reg52.h> /52系列單片機(jī)頭文件#define uchar unsigned ch
8、ar#define uint unsigned intsbit dula=P26; /申明U1鎖存器的鎖存端sbit wela=P27; /申明U2鎖存器的鎖存端uchar num;unchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;void delayms(uint);void main()wela=1; /打開U2鎖存端P0=0xco; /送入位選信號wela=0; /關(guān)閉U2鎖存端while(1)for(num=0;num<16;num+)
9、 /16個(gè)數(shù)循環(huán)顯示dula=1; /打開U1鎖存端P0=tablenum; /送入段選信號dula=0; /關(guān)閉U1鎖存端delay(500); /延時(shí)0.5秒void delayms(uint xms)uint i,j;for(i=xms;i>0;i-) /i=xms即延時(shí)約xms毫秒for(j=110;j>0;j-);例3.3.1第一個(gè)數(shù)碼管顯示1,時(shí)間為0.5s,然后關(guān)閉它,立即讓第二個(gè)數(shù)碼管顯示2,時(shí)間為0.5s,在關(guān)閉它一直到最后一個(gè)數(shù)碼管顯示6,時(shí)間同樣為0.5s,關(guān)閉它之后再回來顯示第一個(gè)數(shù)碼管,一直循環(huán)下去。(part2.1_3.c P62)#include &l
10、t;reg52.h> /52系列單片機(jī)頭文件#define uchar unsigned char#define uint unsigned intsbit dula=P26; /申明U1鎖存器的鎖存端sbit wela=P27; /申明U2鎖存器的鎖存端uchar num;unchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;void delayms(uint);void main()while(1) dula=1; P0=table1; /送段
11、選數(shù)據(jù) dula=0; P0=0xff; /送位選數(shù)據(jù)前關(guān)閉所有顯示,防止打開位選鎖存時(shí) wela=1; /原來段選數(shù)據(jù)通過位選鎖存器造成混亂 P0=0xfe; /送位選數(shù)據(jù) wela=0; delayms(500); /延時(shí)dula=1; P0=table2; /送段選數(shù)據(jù) dula=0; P0=0xff; /送位選數(shù)據(jù)前關(guān)閉所有顯示,防止打開位選鎖存時(shí) wela=1; /原來段選數(shù)據(jù)通過位選鎖存器造成混亂 P0=0xfd; /送位選數(shù)據(jù) wela=0; delayms(500); /延時(shí)dula=1; P0=table3; /送段選數(shù)據(jù) dula=0; P0=0xff; /送位選數(shù)據(jù)前關(guān)閉
12、所有顯示,防止打開位選鎖存時(shí) wela=1; /原來段選數(shù)據(jù)通過位選鎖存器造成混亂 P0=0xfb; /送位選數(shù)據(jù) wela=0; delayms(500); /延時(shí)dula=1; P0=table4; /送段選數(shù)據(jù) dula=0; P0=0xff; /送位選數(shù)據(jù)前關(guān)閉所有顯示,防止打開位選鎖存時(shí) wela=1; /原來段選數(shù)據(jù)通過位選鎖存器造成混亂 P0=0xf7; /送位選數(shù)據(jù) wela=0; delayms(500); /延時(shí)dula=1; P0=table5; /送段選數(shù)據(jù) dula=0; P0=0xff; /送位選數(shù)據(jù)前關(guān)閉所有顯示,防止打開位選鎖存時(shí) wela=1; /原來段選數(shù)據(jù)
13、通過位選鎖存器造成混亂 P0=0xef; /送位選數(shù)據(jù) wela=0; delayms(500); /延時(shí)dula=1; P0=table6; /送段選數(shù)據(jù) dula=0; P0=0xff; /送位選數(shù)據(jù)前關(guān)閉所有顯示,防止打開位選鎖存時(shí) wela=1; /原來段選數(shù)據(jù)通過位選鎖存器造成混亂 P0=0xdf; /送位選數(shù)據(jù) wela=0; delayms(500); /延時(shí)void delayms(uint xms) uinti,j; for(i=xms;i>0;i-) /i=xms即延時(shí)約xms毫秒 for(j=110;j>0;j-);例3.5.1利用定時(shí)器0工作方式1,在實(shí)驗(yàn)板
14、上實(shí)現(xiàn)第一個(gè)發(fā)光管以1s亮滅閃爍。(part2.1.4.c P74)#include<reg52.h> /52系列單片機(jī)頭文件#define uchar unsigned char#define uint unsigned intsbit led1=P10;uchar num;void main()TMOD=0x01; /設(shè)置定時(shí)器0為工作方式1(M1M0為01)TH0=(65536-45872)/256; /裝初值11.0592M晶振定時(shí)50ms數(shù)為45872TL0=(65536-45872)%256; EA=1; /開總中斷ET0=1; /開定時(shí)器0中斷TR0=1; / 啟動定
15、時(shí)器0while(1); /程序停止在這里等待中斷中斷發(fā)生void T0_time() interrupt 1TH0=(65536-45872)/256; /重裝初值TL0=(65536-45872)%256;num+; /num每加1次判斷一次是否到20次if(num=20) /如果到了20次,說明1秒時(shí)間到 num=0; /然后把num清0重新再計(jì)20次 led1=led1; /讓發(fā)光管狀態(tài)取反例3.5.2用定時(shí)器0的方式1實(shí)現(xiàn)第一個(gè)發(fā)光二極管以200ms間隔閃爍,用定時(shí)器1的方式1實(shí)現(xiàn)數(shù)碼管前兩位59s循環(huán)計(jì)時(shí)。(part2.1_5.c P75)#include <reg52.h&
16、gt; /52系列單片機(jī)頭文件#define uchar unsigned char#define uint unsigned intsbit dula=P26; /申明U1鎖存器的鎖存端sbit wela=P27; /申明U2鎖存器的鎖存端sbit led1=P10;unchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;void delayms(uint);void display(uchar,uchar);uchar num,num1,num2,sh
17、i,ge;void main()TMOD=0x11; /設(shè)置定時(shí)器0為工作方式1(M1M0為11)TH0=(65536-45872)/256; /裝初值11.0592M晶振定時(shí)50ms數(shù)為45872TL0=(65536-45872)%256; TH1=(65536-45872)/256; /裝初值11.0592M晶振定時(shí)50ms數(shù)為45872TL1=(65536-45872)%256; EA=1; /開總中斷ET0=1; /開定時(shí)器0中斷ET1=1; /開定時(shí)器1中斷TR0=1; / 啟動定時(shí)器0TR1=1; / 啟動定時(shí)器1while(1); /程序停止在這里等待中斷中斷發(fā)生 display
18、(shi,ge);void display(uchar shi,uchar ge) /顯示子函數(shù) dula=1; P0=tableshi; /送段選數(shù)據(jù) dula=0; P0=0xff; /送位選數(shù)據(jù)前關(guān)閉所有顯示,防止打開位選鎖存時(shí) wela=1; /原來段選數(shù)據(jù)通過位選鎖存器造成混亂 P0=0xfe; /送位選數(shù)據(jù) wela=0; delayms(5); /延時(shí)dula=1; P0=tablege;/送段選數(shù)據(jù) dula=0; P0=0xff; /送位選數(shù)據(jù)前關(guān)閉所有顯示,防止打開位選鎖存時(shí) wela=1; /原來段選數(shù)據(jù)通過位選鎖存器造成混亂 P0=0xfd; /送位選數(shù)據(jù) wela=0
19、; delayms(5); /延時(shí)void delayms(uint xms)uint i,j;for(i=xms;i>0;i-) /i=xms即延時(shí)約xms毫秒 for(j=110;j>0;j-);void T0_time() interrupt 1 TH0=(65536-45872)/256; /重裝初值TL0=(65536-45872)%256;num+;if(num1=4) /如果到了4次,說明200ms時(shí)間到 num1=0; /然后把num1清0重新再計(jì)4次 led1=led1; /讓發(fā)光管狀態(tài)取反void T1_time() interrupt 3 TH1=(65536
20、-45872)/256; /重裝初值TL1=(65536-45872)%256;num2+;if(num2=20) /如果到了20次,說明1秒刷新時(shí)間到 num2=0; /然后把num2清0重新再計(jì)4次 num+;if(num=60) /這個(gè)數(shù)用來送數(shù)碼管顯示,到60后歸0num=0;shi=num/10; /把一個(gè)2位數(shù)分離后分別送數(shù)碼管顯示ge=num%10; /十位和個(gè)位例4.1.1用數(shù)碼管前兩位顯示一個(gè)十進(jìn)制數(shù),變化范圍為0059,開始時(shí)顯示00,每按下S2鍵一次,數(shù)值加1;每按下S3鍵一次,數(shù)值減1;每按下S4鍵一次,數(shù)值歸零;按下S5鍵一次,利用定時(shí)器功能使數(shù)值開始自動每秒加1,再
21、次按下S5鍵,數(shù)值停止加1,保持顯示原數(shù)。(part2.2_1.c P82)#include <reg52.h> /52系列單片機(jī)頭文件#define uchar unsigned char#define uint unsigned int sbit key1=P34;sbit key2=P35;sbit key3=P36;sbit key4=P37;sbit dula=P26;/申明U1鎖存器的鎖存端sbit wela=P27;/申明U2鎖存器的鎖存端uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6
22、f,0x77,0x7c,0x39,0x5e,0x79,0x71;void delayms(uint);uchar numt0,num;void display(uchar numdis) /顯示子函數(shù)uchar shi,ge; /分離兩個(gè)分別要顯示的數(shù)shi=numdis/10;ge=numdis%10; dula=1;P0=tableshi; /送十位段選數(shù)據(jù)dula=0;P0=0xff;/送位選數(shù)據(jù)前關(guān)閉所有顯示,防止打開位選鎖存時(shí)wela=1;/原來段選數(shù)據(jù)通過位選鎖存器造成混亂P0=0xfe;/送位選數(shù)據(jù)wela=0;delayms(5);/延時(shí)dula=1;P0=tablege; /
23、送個(gè)位段選數(shù)據(jù)dula=0;P0=0xff;wela=1;P0=0xfd;wela=0;delayms(5);void delayms(uint xms)uint i,j;for(i=xms;i>0;i-) /i=xms即延時(shí)約xms毫秒for(j=110;j>0;j-);void init() /初始化函數(shù)TMOD=0x01;/設(shè)置定時(shí)器0為工作方式1(0000 0001)TH0=(65536-45872)/256;/裝初值50ms一次中斷TL0=(65536-45872)%256;EA=1; /開總中斷ET0=1; /開定時(shí)器0中斷void keyscan()if(key1=0
24、)delayms(10);if(key1=0)num+;if(num=60)/當(dāng)?shù)?0時(shí)重新歸0num=0;while(!key1);/等待按鍵釋放if(key2=0)delayms(10);if(key2=0)if(num=0)/當(dāng)?shù)?時(shí)重新歸60num=60;num-;while(!key2);if(key3=0)delayms(10);if(key3=0)num=0; /清0while(!key3);if(key4=0)delayms(10);if(key4=0)while(!key4);TR0=TR0;/啟動或停止定時(shí)器0void main()init();/初始化函數(shù)while(1)
25、 keyscan();display(num);void T0_time() interrupt 1TH0=(65536-45872)/256;/重裝初值TL0=(65536-45872)%256;numt0+;if(numt0=20)/如果到了20次,說明1秒時(shí)間到numt0=0;/然后把num清0重新再計(jì)20次num+;if(num=60)num=0;例4.2.1實(shí)驗(yàn)班上電時(shí),數(shù)碼管不顯示,順序按下矩陣鍵盤后,數(shù)碼管上依次顯示0F,六個(gè)數(shù)碼管同時(shí)靜態(tài)顯示即可。(part2.2_2.c P87)#include <reg52.h> /52系列單片機(jī)頭文件#define uchar
26、 unsigned char#define uint unsigned int sbit dula=P26;/申明U1鎖存器的鎖存端sbit wela=P27;/申明U2鎖存器的鎖存端uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;void delayms(uint xms)uint i,j;for(i=xms;i>0;i-) /i=xms即延時(shí)約xms毫秒for(j=110;j>0;j-);void display(uchar num)
27、P0=tablenum; /顯示函數(shù)只送段選數(shù)據(jù)dula=1;dula=0;void matrixkeyscan()uchar temp,key; P3=0xfe; temp=P3; temp=temp&0xf0; if(temp!=0xf0) delayms(10); temp=P3; temp=temp&0xf0; if(temp!=0xf0) temp=P3; switch(temp) case 0xee: key=0; break; case 0xde: key=1; break; case 0xbe: key=2; break; case 0x7e: key=3; b
28、reak; while(temp!=0xf0) temp=P3; temp=temp&0xf0; display(key); P3=0xfd; temp=P3; temp=temp&0xf0; if(temp!=0xf0) delayms(10); temp=P3; temp=temp&0xf0; if(temp!=0xf0) temp=P3; switch(temp) case 0xed: key=4; break; case 0xdd: key=5; break; case 0xbd: key=6; break; case 0x7d: key=7; break; w
29、hile(temp!=0xf0) temp=P3; temp=temp&0xf0; display(key); P3=0xfb; temp=P3; temp=temp&0xf0; if(temp!=0xf0) delayms(10); temp=P3; temp=temp&0xf0; if(temp!=0xf0) temp=P3; switch(temp) case 0xeb: key=8; break; case 0xdb: key=9; break; case 0xbb: key=10; break; case 0x7b: key=11; break; while(
30、temp!=0xf0) temp=P3; temp=temp&0xf0; display(key); P3=0xf7; temp=P3; temp=temp&0xf0; if(temp!=0xf0) delayms(10); temp=P3; temp=temp&0xf0; if(temp!=0xf0) temp=P3; switch(temp) case 0xe7: key=12; break; case 0xd7: key=13; break; case 0xb7: key=14; break; case 0x77: key=15; break; while(tem
31、p!=0xf0) temp=P3; temp=temp&0xf0; display(key); void main()P0=0; /關(guān)閉所有數(shù)碼管段選dula=1;dula=0;P0=0xc0;/位選中所有數(shù)碼管wela=1;wela=0; while(1) matrixkeyscan();/不停調(diào)用鍵盤掃描程序 例5.3.1用單片機(jī)控制ADC0804進(jìn)行數(shù)模轉(zhuǎn)換,當(dāng)擰動實(shí)驗(yàn)板上A/D旁邊的電位時(shí),在數(shù)碼管的前三位以十進(jìn)制方式顯示出A/D轉(zhuǎn)換后的數(shù)字量(8位A/D轉(zhuǎn)換后數(shù)值在0255變化)。(part2.3_1.c P107)#include <reg52.h> /52系列
32、單片機(jī)頭文件#include <intrins.h>#define uchar unsigned char#define uint unsigned int sbit dula=P26;/申明U1鎖存器的鎖存端sbit wela=P27;/申明U2鎖存器的鎖存端sbit adwr=P36;/定義AD的WR端口sbit adrd=P37;/定義AD的RD端口uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;void delayms(uint
33、xms)uint i,j;for(i=xms;i>0;i-) /i=xms即延時(shí)約xms毫秒for(j=110;j>0;j-);void display(uchar bai,uchar shi,uchar ge) /顯示子函數(shù) dula=1;P0=tablebai; /送段選數(shù)據(jù)dula=0;P0=0xff;/送位選數(shù)據(jù)前關(guān)閉所有顯示,防止打開位選鎖存時(shí)wela=1;/原來段選數(shù)據(jù)通過位選鎖存器造成混亂P0=0x7e;/送位選數(shù)據(jù)wela=0;delayms(5); /延時(shí)dula=1;P0=tableshi;dula=0;P0=0xff;wela=1;P0=0x7d;wela=0
34、;delayms(5);dula=1;P0=tablege;dula=0;P0=0xff;wela=1;P0=0x7b;wela=0;delayms(5);void main()/主程序 uchar a,A1,A2,A3,adval;wela=1;P0=0x7f; /置CSAD為0,選通ADCS 以后不必再管ADCSwela=0; while(1)adwr=1;_nop_();adwr=0;/啟動AD轉(zhuǎn)換_nop_();adwr=1;for(a=10;a>0;a-) /TX-1C實(shí)驗(yàn)板AD工作頻率較低,所以啟動轉(zhuǎn)換后要多留點(diǎn)時(shí)間用來轉(zhuǎn)換 /這里把顯示部分放這里的原因也是為了延長轉(zhuǎn)換時(shí)間
35、display(A1,A2,A3);P1=0xff; /讀取P1口之前先給其寫全1 adrd=1; /選通ADCS_nop_();adrd=0; /AD讀使能_nop_();adval=P1;/AD數(shù)據(jù)讀取賦給P1口adrd=1;A1=adval/100;/分出百,十,和個(gè)位A2=adval%100/10;A3=adval%10; 例5.5.1用單片機(jī)控制DAC0832芯片輸出電流,讓發(fā)光二級管D12由滅均勻變到最亮,再由最亮均勻熄滅。在最亮和最暗時(shí)使用蜂鳴器分別警報(bào)一聲,完成整個(gè)周期時(shí)間控制在5S左右,循環(huán)變化。(part2.3_2.c P121)#include <reg52.h&g
36、t; #define uchar unsigned char#define uint unsigned intsbit dula=P26;/申明U1鎖存器的鎖存端sbit wela=P27;/申明U2鎖存器的鎖存端sbit dawr=P36;/定義DA的WR端口sbit dacs=P32;/定義DA的CS端口sbit beep=P23;/定義蜂鳴器端口void delayms(uint xms)uint i,j;for(i=xms;i>0;i-) /i=xms即延時(shí)約xms毫秒for(j=110;j>0;j-);void main()uchar val,flag;dula=0;we
37、la=0;dacs=0;dawr=0;P0=0;while(1)if(flag=0)val+=5;P0=val;/通過P0口給DA數(shù)據(jù)口賦值if(val=255)flag=1; beep=0;delayms(100);beep=1;delayms(50);elseval-=5;P0=val;/通過P0口給DA數(shù)據(jù)口賦值if(val=0)flag=0; beep=0;delayms(100);beep=1;delayms(50);例6.5.1在上位機(jī)上用串口調(diào)試助手發(fā)送一個(gè)字符X,單片機(jī)收到字符后返回給上位機(jī)“I get X”,串口波特率設(shè)為9600bps。(part2.4_1.c P137)#
38、include <reg52.h> #define uchar unsigned char#define uint unsigned intunsigned char flag,a,i;uchar code table="I get "/uchar code table='I',' ','g','e','t',' 'void init()TMOD=0x20;TH1=0xfd;TL1=0xfd;TR1=1;REN=1;SM0=0;SM1=1;EA=1;ES=1;void
39、 main()init();while(1)if(flag=1)ES=0;for(i=0;i<6;i+)SBUF=tablei;while(!TI);TI=0;SBUF=a;while(!TI);TI=0;ES=1;flag=0;void ser() interrupt 4RI=0;a=SBUF;flag=1;例6.6.1單片機(jī)上電后等待從上位機(jī)串口發(fā)來的命令,同時(shí)在數(shù)碼管的前三位以十進(jìn)制方式顯示A/D采集的數(shù)值,在未收到上位機(jī)發(fā)送來的啟動A/D轉(zhuǎn)換命令之前數(shù)碼管始終顯示000。當(dāng)收到上位機(jī)以十六進(jìn)制發(fā)送來的01后,向上位機(jī)發(fā)送字符串“Turn on ad!”同時(shí)間隔1s讀取一次A/D的
40、值,然后把A/D采集回來的8位二進(jìn)制轉(zhuǎn)換成十進(jìn)制表示的實(shí)際電壓浮點(diǎn)數(shù),并且從串口發(fā)送給上位機(jī),形式如“The voltage is 3.398438V”,發(fā)送周期也是一秒一次,同時(shí)在數(shù)碼管上也要每秒刷新現(xiàn)實(shí)的數(shù)值。當(dāng)收到上位機(jī)以十六進(jìn)制發(fā)送過來的02后,向上位機(jī)發(fā)送字符串“Turn off ad!”,然后停止發(fā)送電壓值,數(shù)碼管上顯示上次結(jié)束時(shí)保持的值。當(dāng)收到上位機(jī)發(fā)來的其他任何數(shù)時(shí),向上位機(jī)發(fā)送字符串“Error!”。(part2.4_2.c P140)#include <reg52.h> #include <intrins.h> #include <stdio.
41、h>#define uchar unsigned char#define uint unsigned intsbit dula=P26;/申明U1鎖存器的鎖存端sbit wela=P27;/申明U2鎖存器的鎖存端sbit adwr=P36;/定義AD的WR端口sbit adrd=P37;/定義AD的RD端口uchar flag,a;unsigned char flag_uart,flag_time,flag_on,a,i,t0_num,ad_val;float ad_vo;uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0
42、x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;void delayms(uint xms)uint i,j;for(i=xms;i>0;i-) /i=xms即延時(shí)約xms毫秒for(j=110;j>0;j-);void init()TMOD=0x21;/SCON=0x50;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TH1=0xfd;TL1=0xfd;TR1=1;ET0=1;SM0=0;SM1=1;REN=1;EA=1;ES=1;void display(uchar value) /顯示子函數(shù)uchar bai,shi,ge;bai=value/100;/分出百,十,和個(gè)位shi=value%100/10;ge=value%10;dula=1;P0=tablebai; /送段選數(shù)據(jù)dula=0;P0=0xff;/送位選數(shù)據(jù)前關(guān)閉所有顯示,防止打開位選鎖存時(shí)wela=1;/原來段選數(shù)據(jù)通過位選鎖存器造成混亂P0=0x7e;/送位選數(shù)據(jù)wela=0;delay
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- crv購車合同范本
- 勞動糾紛合同范本
- 勞務(wù)合同英文合同范例
- UPVC管材管件購銷合同范本
- 2025年中國真空鍍膜設(shè)備行業(yè)發(fā)展趨勢及投資前景預(yù)測報(bào)告
- 醫(yī)療設(shè)備借用合同范本
- 農(nóng)村老屋銷售合同范本
- 一鍵報(bào)警施工安裝合同范本
- 企業(yè)安裝光纖合同范本
- 農(nóng)村收購水泥合同范本
- 教育科學(xué)與兒童心理學(xué)
- 2022高速公路隧道工程施工管理標(biāo)準(zhǔn)化手冊
- 年智慧水廠大數(shù)據(jù)信息化建設(shè)和應(yīng)用方案
- 光伏電纜橋架敷設(shè)施工方案
- 工人工資結(jié)清證明范本
- 腹腔引流管的護(hù)理常見并發(fā)癥的預(yù)防與處理規(guī)范
- 工地試驗(yàn)室質(zhì)量手冊
- 江蘇省船舶行業(yè)智能化改造數(shù)字化轉(zhuǎn)型實(shí)施指南(第二版)
- 高一寒假學(xué)習(xí)計(jì)劃表格
- 河北省建筑工程資料管理規(guī)程DB13(J) T 145 201
- 2023年廣東廣州期貨交易所招聘筆試參考題庫附帶答案詳解
評論
0/150
提交評論