版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、目錄例 編寫程序,點亮第一個發(fā)光二極管(part2_1.c P27 )- 4 -例利用for語句延時特性,編寫第一個發(fā)光二極管以間隔1S亮滅閃動的程序(part2_3.c P42)- 5 -例編寫程序使第一個發(fā)光二極管以間隔500ms亮滅閃動。(part2_4.c P48)- 5 -例編寫程序使第一個二極管以亮200ms、滅800ms的方式閃動。(part2_5.c P49)- 6 -例利用C51自帶庫_crol_(),以間隔500ms,實現(xiàn)流水燈程序(part2_6.c P53)- 6 -例編寫程序使第一個數(shù)碼管顯示8(part2.1_.1c P59)- 7 -例讓實驗板上6個數(shù)碼管同時點亮
2、,依次顯示0到F,時間間隔為0.5ms,循環(huán)下去。(part2.1_2.c P61)- 8 -例第一個數(shù)碼管顯示1,時間為0.5s,然后關閉它,立即讓第二個數(shù)碼管顯示2,時間為0.5s,在關閉它一直到最后一個數(shù)碼管顯示6,時間同樣為0.5s,關閉它之后再回來顯示第一個數(shù)碼管,一直循環(huán)下去。(part2.1_3.c P62)- 9 -例利用定時器0工作方式1,在實驗板上實現(xiàn)第一個發(fā)光管以1s亮滅閃爍。(part2.1.4.c P74)- 11 -例用定時器0的方式1實現(xiàn)第一個發(fā)光二極管以200ms間隔閃爍,用定時器1的方式1實現(xiàn)數(shù)碼管前兩位59s循環(huán)計時。(part2.1_5.c P75)- 1
3、2 -例用數(shù)碼管前兩位顯示一個十進制數(shù),變化范圍為0059,開始時顯示00,每按下S2鍵一次,數(shù)值加1;每按下S3鍵一次,數(shù)值減1;每按下S4鍵一次,數(shù)值歸零;按下S5鍵一次,利用定時器功能使數(shù)值開始自動每秒加1,再次按下S5鍵,數(shù)值停止加1,保持顯示原數(shù)。(part2.2_1.c P82)- 14 -例實驗班上電時,數(shù)碼管不顯示,順序按下矩陣鍵盤后,數(shù)碼管上依次顯示0F,六個數(shù)碼管同時靜態(tài)顯示即可。(part2.2_2.c P87)- 17 -例用單片機控制ADC0804進行數(shù)模轉換,當擰動實驗板上A/D旁邊的電位時,在數(shù)碼管的前三位以十進制方式顯示出A/D轉換后的數(shù)字量(8位A/D轉換后數(shù)
4、值在0255變化)。(part2.3_1.c P107)- 21 -例用單片機控制DAC0832芯片輸出電流,讓發(fā)光二級管D12由滅均勻變到最亮,再由最亮均勻熄滅。在最亮和最暗時使用蜂鳴器分別警報一聲,完成整個周期時間控制在5S左右,循環(huán)變化。(part2.3_2.c P121)- 23 -例在上位機上用串口調試助手發(fā)送一個字符X,單片機收到字符后返回給上位機“I get X”,串口波特率設為9600bps。(part2.4_1.c P137)- 25 -例單片機上電后等待從上位機串口發(fā)來的命令,同時在數(shù)碼管的前三位以十進制方式顯示A/D采集的數(shù)值,在未收到上位機發(fā)送來的啟動A/D轉換命令之前
5、數(shù)碼管始終顯示000。當收到上位機以十六進制發(fā)送來的01后,向上位機發(fā)送字符串“Turn on ad!”同時間隔1s讀取一次A/D的值,然后把A/D采集回來的8位二進制轉換成十進制表示的實際電壓浮點數(shù),并且從串口發(fā)送給上位機,形式如“The voltage is 3.398438V”,發(fā)送周期也是一秒一次,同時在數(shù)碼管上也要每秒刷新現(xiàn)實的數(shù)值。當收到上位機以十六進制發(fā)送過來的02后,向上位機發(fā)送字符串“Turn off ad!”,然后停止發(fā)送電壓值,數(shù)碼管上顯示上次結束時保持的值。當收到上位機發(fā)來的其他任何數(shù)時,向上位機發(fā)送字符串“Error!”。- 27 -例實現(xiàn)1602液晶的第一行顯示“I
6、 LOVE MCU!”,在第二行顯示。- 31 -例實現(xiàn)1602第一行從左側移入“Hello everyone!”同時第二行從右側移入“Welcome to here!”,移入速度自定,然后停留在屏幕上。(part2.5_2.c P154)- 33 -例實現(xiàn)12232液晶的第一行顯示“I LOVE MCU!”,第二行顯示“我愛單片機”。(part2.5_3.c P160)- 34 -例實現(xiàn)12232液晶第一行從右側移入“Hello everyone!”,同時第二行從右側移入“歡迎大家來學習!”移入速度自定,最后停留在屏幕上。(part2.5_4.c P163)- 37 -例實現(xiàn)在12864液晶
7、上第一行顯示“0123456789”,并且讓每一位數(shù)字隨機變化,第二行顯示“”,第三行顯示“天祥電子”,第四行對應第三行顯示出下劃線。(part2.5_5.c P173)- 40 -知識點:生成隨機數(shù)(part2.5_512232suiji.c P176)- 44 -例利用定時器產(chǎn)生一個099秒變化的秒表,并且顯示在數(shù)碼管上,每過一秒將這個變化的數(shù)寫入板上AT24C02內部。當關閉實驗板電源,并再次打開實驗板電源時,單片機先從AT24C02中將原來寫入的數(shù)讀取出來,接著此數(shù)繼續(xù)變化并顯示在數(shù)碼管上。(part2.6_1.c P188)- 48 -例利用定時器0工作方式0,在實驗板上實現(xiàn)第一個發(fā)
8、光管以1s亮滅閃爍。(part3.1.1.c P203)- 53 -例利用定時器0工作方式2,在實驗板上實現(xiàn)第一個發(fā)光管以1s亮滅閃爍。(part3.1.2.c P204)- 54 -例利用定時器工作方式3,在實驗板上實現(xiàn):用TL0計數(shù)器對應的8位定時器實現(xiàn)第一個發(fā)光管以1s亮滅閃爍,用TH0計數(shù)器對應的8位定時器實現(xiàn)第二個發(fā)光管以0.5s亮滅閃爍。(part3.1.3.c P206)- 54 -例利用計數(shù)器0工作方式1,在實驗板上實現(xiàn):用一根導線一端連接GND引腳,另一端去接觸T0(P3.4)引腳,每接觸一下,計數(shù)器計一次數(shù),將所計的數(shù)值實時顯示在數(shù)碼管的前兩位,計滿100時清0,再從頭計起
9、。(part3.1.4.c P214)- 55 -例設置單片機串行口的工作模式0,間隔循環(huán)發(fā)送十六進制數(shù)0xAA,然后用雙路示波器觀察P3.0和P3.1口波形。(- 58 -例用交叉串口線連接兩塊實驗板,或直接用短線交叉線連接連個單片機的P3.0和P3.1口(共地)。在一塊板上編寫矩陣鍵盤掃描程序,當掃描到有鍵按下時,將鍵值通過串口發(fā)送出去,另一塊板上單片機收到串口發(fā)送來的鍵值后,將對應鍵值以0F方式顯示在數(shù)碼管上。- 60 -例程序分為主機程序和從機程序,約定一次傳送的數(shù)據(jù)為16B,以02H地址的從機為例。(圖為多機通信主機程序流程圖)- 65 -圖為多機通信從機程序流程圖。- 68 -從機
10、程序代碼:(part3.2.6.c P234)- 68 -例指針使用例程:(point.c P264)- 71 -例編寫程序實現(xiàn):開啟兩個外部中斷,設置低電平觸發(fā)中斷,用定時器計數(shù)并且顯示在數(shù)碼管的前兩位,當計數(shù)到5時,使單片機進入空閑(休眠)模式,同時關閉定時器,當單片機響應外部中斷后,從空閑(休眠)模式返回,同時開啟定時器。(- 72 -例實驗板上實現(xiàn)如下描述:程序啟動后設定看門狗溢出時間為2s,然后點亮第一個發(fā)光二極管,稍延時一會,然后熄滅發(fā)光二極管,使程序進入等待死循環(huán)狀態(tài),并且在死循環(huán)中大約每隔1s喂狗一次,看程序運行是否正常。- 74 -例13.6.1.在實驗板上實現(xiàn):操作STC單
11、片機自帶的E2PROM,存儲一組按秒遞增的兩位數(shù)據(jù),并且將數(shù)據(jù)實時顯示在數(shù)碼管上,數(shù)據(jù)每變化一次就往E2PROM中寫入一次,當關閉實驗板電源并再次開啟電源時,從E2PROM中讀取先前存儲的數(shù)據(jù),接著遞增顯示。- 77 -例13.7.1STC89LE516AD/X2系列單片機的A/D轉換功能。時鐘11.0592MHz,轉換結果以16進制形式輸出到串行口,可以用串行口調試程序,觀察輸出結果(本代碼摘自宏晶科技芯片手冊,經(jīng)作者調試可正常運行)。- 80 -例給出一個STC12C5412AD應用的參考程序。(part3.4.6.c P287)- 82 -程序利用51單片機的定時器設計一個時鐘。- 89
12、 -程序使用DS12C887時鐘芯片設計高精度時鐘。- 97 -程序使用TX-1C實驗板上的DS18B20溫度傳感器設計溫控系統(tǒng)C語言源代碼(part4.3 P349)- 108 -程序太陽能充/放電控制器C語言源代碼- 114 -ISD400x系列語音芯片C語言參考程序:- 134 -例使用TX-1C實驗板上兩個獨立按鍵調節(jié)直流電機的轉速,同時在實驗板的數(shù)碼管上象征性的顯示相應的轉速值。通過控制單片機輸出不同占空比的PWM信號來控制直流電機的轉速(感性認識)。(part5.3 P434)- 138 -例步進電機應用C語言程序設計(part3.2 P444)- 142 -例舵機應用C語言程序設
13、計實例:開機時舵機角度自動轉為0度,通過實驗板上的獨立按鍵調節(jié)舵機的角度轉動,并且在實驗板數(shù)碼管上顯示相應的角度。本例僅演示5個角度的控制,若想實現(xiàn)任意角度控制請大家自行編程實驗。程序代碼如下:(part5.3 P453)- 145 -/調節(jié)舵機使之轉動5個角度 0 45 90 135 180 PWM信號周期為20ms,- 145 -/控制高電平的持續(xù)時間即可控制舵機停止制動的角度,0.5ms-0度 1-45 1.5-90 2-135 2.5-180- 145 -/程序流程是:開機時舵機角度自動轉為0度,按下 P3.7則轉到45度,以后就根據(jù)兩個按鍵的按下而轉動- 145 -例 編寫程序,點亮
14、第一個發(fā)光二極管(part2_1.c P27 )#include <reg52.h> /52系列單片機頭文件sbit led1=P10; /聲明單片機P1口的第一位void main() /主函數(shù)led1=0; /*點亮第一個發(fā)光二極管*/例 編寫程序,點亮P1口的若干二極管(part2_2.c P39 )#include <reg52.h> /52系列單片機頭文件void main() /主函數(shù)P1=0xaa; /while(1); 例利用for語句延時特性,編寫第一個發(fā)光二極管以間隔1S亮滅閃動的程序(part2_3.c P42)#include <reg52
15、.h> /52系列單片機頭文件#define uint unsigned int /宏定義sbit led1=P10; /聲明單片機P1口的第一位uint i,j;void main() /主函數(shù)while(1) /大循環(huán)led1=0;/*點亮第一個發(fā)光二極管*/for(i=1;i>0;i-)/延時for(j=110;j>0;j-);led1=1;/*關閉第一個發(fā)光二極管*/for(i=1000;i>0;i-)/延時for(j=110;j>0;j-);例編寫程序使第一個發(fā)光二極管以間隔500ms亮滅閃動。(part2_4.c P48)#include <re
16、g52.h> /52系列單片機頭文件#define uint unsigned int /宏定義sbit led1=P10; /聲明單片機P1口的第一位void delay1s();/聲明子函數(shù)void main() /主函數(shù)while(1) /大循環(huán)led1=0;/*點亮第一個發(fā)光二極管*/delay1s();/調用延時子函數(shù)led1=1;/*關閉第一個發(fā)光二極管*/delay1s();/調用延時子函數(shù)void delay1s()/子函數(shù)體uint i,j;for(i=500;i>0;i-)for(j=110;j>0;j-);例編寫程序使第一個二極管以亮200ms、滅800
17、ms的方式閃動。(part2_5.c P49)#include <reg52.h> /52系列單片機頭文件#define uint unsigned int /宏定義sbit led1=P10; /聲明單片機P1口的第一位void delayms(uint);/聲明子函數(shù)void main() /主函數(shù)while(1) /大循環(huán)led1=0;/*點亮第一個發(fā)光二極管*/delayms(200);/延時200毫秒led1=1;/*關閉第一個發(fā)光二極管*/delayms(800);/延時800毫秒void delayms(uint xms)uint i,j;for(i=xms;i>
18、;0;i-) /i=xms即延時約xms毫秒for(j=110;j>0;j-);例利用C51自帶庫_crol_(),以間隔500ms,實現(xiàn)流水燈程序(part2_6.c P53)#include <reg52.h> /52系列單片機頭文件#include <intrins.h>#define uint unsigned int /宏定義#define uchar unsigned charvoid delayms(uint);/聲明子函數(shù)uchar aa;void main() /主函數(shù)aa=0xfe;/賦初值11111110 while(1) /大循環(huán)P1=aa
19、;delayms(500); /延時500毫秒aa=_crol_(aa,1); /將aa循環(huán)左移1位后再賦給aavoid delayms(uint xms)uint i,j;for(i=xms;i>0;i-) /i=xms即延時約xms毫秒for(j=110;j>0;j-);例編寫程序使第一個數(shù)碼管顯示8(part2.1_.1c P59)#include <reg52.h> /52系列單片機頭文件sbit dula=P26; /申明U1鎖存器的鎖存端sbit wela=P27; /申明U2鎖存器的鎖存端void main()wela=1; /打開U2鎖存器P0=0xFE
20、; /送入位選信號wela=0; /關閉U2鎖存器dula=1; /打開U1鎖存器P0=0x7F; /送入段選信號dula=0; /關閉U2鎖存器while(1); /程序停止到這里例讓實驗板上6個數(shù)碼管同時點亮,依次顯示0到F,時間間隔為0.5ms,循環(huán)下去。(part2.1_2.c P61)#include <reg52.h> /52系列單片機頭文件#define uchar unsigned char#define uint unsigned intsbit dula=P26; /申明U1鎖存器的鎖存端sbit wela=P27; /申明U2鎖存器的鎖存端uchar num;
21、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; /關閉U2鎖存端while(1)for(num=0;num<16;num+) /16個數(shù)循環(huán)顯示dula=1; /打開U1鎖存端P0=tablenum; /送入段選信號dula=0; /關閉U1鎖存端delay(500); /延時0.5秒void delay
22、ms(uint xms)uint i,j;for(i=xms;i>0;i-) /i=xms即延時約xms毫秒for(j=110;j>0;j-);例第一個數(shù)碼管顯示1,時間為0.5s,然后關閉它,立即讓第二個數(shù)碼管顯示2,時間為0.5s,在關閉它一直到最后一個數(shù)碼管顯示6,時間同樣為0.5s,關閉它之后再回來顯示第一個數(shù)碼管,一直循環(huán)下去。(part2.1_3.c P62)#include <reg52.h> /52系列單片機頭文件#define uchar unsigned char#define uint unsigned intsbit dula=P26; /申明U
23、1鎖存器的鎖存端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; /送段選數(shù)據(jù) dula=0; P0=0xff; /送位選數(shù)據(jù)前關閉所有顯示,防止打開位選鎖存時 wela=1; /原來段選數(shù)據(jù)通過位選鎖存器造成混亂 P0=0xfe; /送位選數(shù)據(jù) wela=0;
24、delayms(500); /延時dula=1; P0=table2; /送段選數(shù)據(jù) dula=0; P0=0xff; /送位選數(shù)據(jù)前關閉所有顯示,防止打開位選鎖存時 wela=1; /原來段選數(shù)據(jù)通過位選鎖存器造成混亂 P0=0xfd; /送位選數(shù)據(jù) wela=0; delayms(500); /延時dula=1; P0=table3; /送段選數(shù)據(jù) dula=0; P0=0xff; /送位選數(shù)據(jù)前關閉所有顯示,防止打開位選鎖存時 wela=1; /原來段選數(shù)據(jù)通過位選鎖存器造成混亂 P0=0xfb; /送位選數(shù)據(jù) wela=0; delayms(500); /延時dula=1; P0=ta
25、ble4; /送段選數(shù)據(jù) dula=0; P0=0xff; /送位選數(shù)據(jù)前關閉所有顯示,防止打開位選鎖存時 wela=1; /原來段選數(shù)據(jù)通過位選鎖存器造成混亂 P0=0xf7; /送位選數(shù)據(jù) wela=0; delayms(500); /延時dula=1; P0=table5; /送段選數(shù)據(jù) dula=0; P0=0xff; /送位選數(shù)據(jù)前關閉所有顯示,防止打開位選鎖存時 wela=1; /原來段選數(shù)據(jù)通過位選鎖存器造成混亂 P0=0xef; /送位選數(shù)據(jù) wela=0; delayms(500); /延時dula=1; P0=table6; /送段選數(shù)據(jù) dula=0; P0=0xff;
26、/送位選數(shù)據(jù)前關閉所有顯示,防止打開位選鎖存時 wela=1; /原來段選數(shù)據(jù)通過位選鎖存器造成混亂 P0=0xdf; /送位選數(shù)據(jù) wela=0; delayms(500); /延時void delayms(uint xms) uinti,j; for(i=xms;i>0;i-) /i=xms即延時約xms毫秒 for(j=110;j>0;j-);例利用定時器0工作方式1,在實驗板上實現(xiàn)第一個發(fā)光管以1s亮滅閃爍。(part2.1.4.c P74)#include<reg52.h> /52系列單片機頭文件#define uchar unsigned char#defi
27、ne uint unsigned intsbit led1=P10;uchar num;void main()TMOD=0x01; /設置定時器0為工作方式1(M1M0為01)TH0=(65536-45872)/256; /裝初值11.0592M晶振定時50ms數(shù)為45872TL0=(65536-45872)%256; EA=1; /開總中斷ET0=1; /開定時器0中斷TR0=1; / 啟動定時器0while(1); /程序停止在這里等待中斷中斷發(fā)生void T0_time() interrupt 1TH0=(65536-45872)/256; /重裝初值TL0=(65536-45872)%
28、256;num+; /num每加1次判斷一次是否到20次if(num=20) /如果到了20次,說明1秒時間到 num=0; /然后把num清0重新再計20次 led1=led1; /讓發(fā)光管狀態(tài)取反例用定時器0的方式1實現(xiàn)第一個發(fā)光二極管以200ms間隔閃爍,用定時器1的方式1實現(xiàn)數(shù)碼管前兩位59s循環(huán)計時。(part2.1_5.c P75)#include <reg52.h> /52系列單片機頭文件#define uchar unsigned char#define uint unsigned intsbit dula=P26; /申明U1鎖存器的鎖存端sbit wela=P2
29、7; /申明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,shi,ge;void main()TMOD=0x11; /設置定時器0為工作方式1(M1M0為11)TH0=(65536-45872)/256; /裝初值11.0592M晶振定時50ms數(shù)為45872TL0=(65
30、536-45872)%256; TH1=(65536-45872)/256; /裝初值11.0592M晶振定時50ms數(shù)為45872TL1=(65536-45872)%256; EA=1; /開總中斷ET0=1; /開定時器0中斷ET1=1; /開定時器1中斷TR0=1; / 啟動定時器0TR1=1; / 啟動定時器1while(1); /程序停止在這里等待中斷中斷發(fā)生 display(shi,ge);void display(uchar shi,uchar ge) /顯示子函數(shù) dula=1; P0=tableshi; /送段選數(shù)據(jù) dula=0; P0=0xff; /送位選數(shù)據(jù)前關閉所有顯
31、示,防止打開位選鎖存時 wela=1; /原來段選數(shù)據(jù)通過位選鎖存器造成混亂 P0=0xfe; /送位選數(shù)據(jù) wela=0; delayms(5); /延時dula=1; P0=tablege;/送段選數(shù)據(jù) dula=0; P0=0xff; /送位選數(shù)據(jù)前關閉所有顯示,防止打開位選鎖存時 wela=1; /原來段選數(shù)據(jù)通過位選鎖存器造成混亂 P0=0xfd; /送位選數(shù)據(jù) wela=0; delayms(5); /延時void delayms(uint xms)uint i,j;for(i=xms;i>0;i-) /i=xms即延時約xms毫秒 for(j=110;j>0;j-);
32、void T0_time() interrupt 1 TH0=(65536-45872)/256; /重裝初值TL0=(65536-45872)%256;num+;if(num1=4) /如果到了4次,說明200ms時間到 num1=0; /然后把num1清0重新再計4次 led1=led1; /讓發(fā)光管狀態(tài)取反void T1_time() interrupt 3 TH1=(65536-45872)/256; /重裝初值TL1=(65536-45872)%256;num2+;if(num2=20) /如果到了20次,說明1秒刷新時間到 num2=0; /然后把num2清0重新再計4次 num+
33、;if(num=60) /這個數(shù)用來送數(shù)碼管顯示,到60后歸0num=0;shi=num/10; /把一個2位數(shù)分離后分別送數(shù)碼管顯示ge=num%10; /十位和個位例用數(shù)碼管前兩位顯示一個十進制數(shù),變化范圍為0059,開始時顯示00,每按下S2鍵一次,數(shù)值加1;每按下S3鍵一次,數(shù)值減1;每按下S4鍵一次,數(shù)值歸零;按下S5鍵一次,利用定時器功能使數(shù)值開始自動每秒加1,再次按下S5鍵,數(shù)值停止加1,保持顯示原數(shù)。(part2.2_1.c P82)#include <reg52.h> /52系列單片機頭文件#define uchar unsigned char#define ui
34、nt 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,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;void delayms(uint);uchar numt0,num;void display(uchar numdis) /顯示子函數(shù)uchar shi,g
35、e; /分離兩個分別要顯示的數(shù)shi=numdis/10;ge=numdis%10; dula=1;P0=tableshi; /送十位段選數(shù)據(jù)dula=0;P0=0xff;/送位選數(shù)據(jù)前關閉所有顯示,防止打開位選鎖存時wela=1;/原來段選數(shù)據(jù)通過位選鎖存器造成混亂P0=0xfe;/送位選數(shù)據(jù)wela=0;delayms(5);/延時dula=1;P0=tablege; /送個位段選數(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=x
36、ms即延時約xms毫秒for(j=110;j>0;j-);void init() /初始化函數(shù)TMOD=0x01;/設置定時器0為工作方式1(0000 0001)TH0=(65536-45872)/256;/裝初值50ms一次中斷TL0=(65536-45872)%256;EA=1; /開總中斷ET0=1; /開定時器0中斷void keyscan()if(key1=0)delayms(10);if(key1=0)num+;if(num=60)/當?shù)?0時重新歸0num=0;while(!key1);/等待按鍵釋放if(key2=0)delayms(10);if(key2=0)if(nu
37、m=0)/當?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;/啟動或停止定時器0void main()init();/初始化函數(shù)while(1) keyscan();display(num);void T0_time() interrupt 1TH0=(65536-45872)/256;/重裝初值TL0=(65536-45872)%256;numt0+;if(nu
38、mt0=20)/如果到了20次,說明1秒時間到numt0=0;/然后把num清0重新再計20次num+;if(num=60)num=0;例實驗班上電時,數(shù)碼管不顯示,順序按下矩陣鍵盤后,數(shù)碼管上依次顯示0F,六個數(shù)碼管同時靜態(tài)顯示即可。(part2.2_2.c P87)#include <reg52.h> /52系列單片機頭文件#define uchar unsigned char#define uint unsigned int sbit dula=P26;/申明U1鎖存器的鎖存端sbit wela=P27;/申明U2鎖存器的鎖存端uchar code table=0x3f,0x
39、06,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即延時約xms毫秒for(j=110;j>0;j-);void display(uchar num)P0=tablenum; /顯示函數(shù)只送段選數(shù)據(jù)dula=1;dula=0;void matrixkeyscan()uchar temp,key; P3=0xfe; temp=P3; temp=temp&0xf0; if(t
40、emp!=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; break; while(temp!=0xf0) temp=P3; temp=temp&0xf0; display(key); P3=0xfd; temp=P3; temp=temp&0xf0; if(temp!=0x
41、f0) 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; while(temp!=0xf0) temp=P3; temp=temp&0xf0; display(key); P3=0xfb; temp=P3; temp=temp&0xf0; if(temp!=0xf0) del
42、ayms(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(temp!=0xf0) temp=P3; temp=temp&0xf0; display(key); P3=0xf7; temp=P3; temp=temp&0xf0; if(temp!=0xf0) delayms(
43、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(temp!=0xf0) temp=P3; temp=temp&0xf0; display(key); void main()P0=0; /關閉所有數(shù)碼管段選dula=1;dula=0;P0=0xc0;/位選中所有數(shù)碼管wela=1
44、;wela=0; while(1) matrixkeyscan();/不停調用鍵盤掃描程序 例用單片機控制ADC0804進行數(shù)模轉換,當擰動實驗板上A/D旁邊的電位時,在數(shù)碼管的前三位以十進制方式顯示出A/D轉換后的數(shù)字量(8位A/D轉換后數(shù)值在0255變化)。(part2.3_1.c P107)#include <reg52.h> /52系列單片機頭文件#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,0x3
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 個人資金周轉借款合同:信用貸款合同
- 二手房交易標準協(xié)議簡明2024一
- 2025年物業(yè)服務企業(yè)數(shù)字化轉型服務合同3篇
- 2025年度物流信息化解決方案承包合同4篇
- 中科軟件園辦公區(qū)2024年度使用權協(xié)議版
- 二零二五年度生態(tài)公園綠化養(yǎng)護合作協(xié)議4篇
- 2025年度新能源汽車品牌區(qū)域銷售代理合同協(xié)議4篇
- 2025年度旅游紀念品銷售與旅游服務合同4篇
- 2025年度鋁型材產(chǎn)品出口退稅服務合同4篇
- 二零二五版跨境持股合作合同協(xié)議書3篇
- 2024-2030年中國食品飲料灌裝設備行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略分析報告
- 2024年公司保密工作制度(四篇)
- 重慶市康德卷2025屆高一數(shù)學第一學期期末聯(lián)考試題含解析
- 建筑結構課程設計成果
- 雙梁橋式起重機小車改造方案
- 基于AR的無人機操作訓練系統(tǒng)
- XX農貿市場物業(yè)公司管理方案
- 纖維增強復合材料 單向增強材料Ⅰ型-Ⅱ 型混合層間斷裂韌性的測定 編制說明
- 湖北省襄陽市數(shù)學中考2024年測試試題及解答
- YYT 0308-2015 醫(yī)用透明質酸鈉凝膠
- GB/T 44189-2024政務服務便民熱線運行指南
評論
0/150
提交評論