導航:首頁 > 操作系統 > 單片機p30引腳功能

單片機p30引腳功能

發布時間:2025-01-08 15:20:16

單片機求助C語言編程 實現99秒倒計時到0秒停止! 求好心人哪!

#include<reg51.h> // 包含51單片機寄存器定義的頭文件
unsigned char code Tab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//數碼管顯示0~9的段碼表
unsigned char int_time; //記錄中斷次數
unsigned char second; //儲存秒
/***********************************************************************
函數功能:快速動態掃描延時,延時約0.6毫秒
************************************************************************/
void delay(void)
{
unsigned char i;
for(i=0;i<200;i++) ;
}
/***********************************************************************
函數功能:顯示秒
入口參數:k
出口參數:無
************************************************************************/
void DisplaySecond(unsigned char k)
{
P2=Tab[k/10]; //顯示十位
P3=0x01; //P3.0引腳輸出高電平, 點亮 十位
delay();
P3=0xfc; //關閉所有數碼管
P2=Tab[k%10]; //顯示個位
P3=0x02; //P3.1引腳輸出高電平, 點亮 個位
delay();
P3=0xfc; //關閉所有數碼管
}
void main(void) //主函數
{
TMOD=0x01; //使用定時器T0
TH0=(65536-5000)/256; //將定時器計時時間設定為50毫秒
TL0=(65536-5000)%256;
EA=1; //開啟總中斷
ET0=1; //定時器T0中斷允許
TR0=1; //啟動定時器T0開始運行
int_time=0; //中斷次數初始化
second=99; //秒初始化
while(1)
{
DisplaySecond(second); //調用秒的顯示子程序
while(second==0)
DisplaySecond(second);
}
}
//********************************************************
//函數功能:定時器T0的中斷服務程序
//*******************************************************
void interserve(void ) interrupt 1 using 1
{
TR0=0; //關閉定時器T0
int_time ++; //每來一次中斷,中斷次數int_time自加1
if(int_time==20) //夠20次中斷,即1秒鍾進行一次檢測結果采樣
{
int_time=0; //中斷次數清0
second--; //秒減1
}
TH0=(65536-5000)/256; //重新給計數器T0賦初值
TL0=(65536-5000)%256;
TR0=1; //啟動定時器T0
if(second==0) //如果 倒計時 0 停止定時器T0
TR0=0;
}

㈡ 基於51單片機的999倒計時C語言程序。

/*************************************
要求是能進行9999秒倒計時
用C語言實現
*************************************/
#include<at89X51.h>

#define uchar unsigned char
#define uint unsigned int
uchar num_qian,num_,num_shi,num_ge;//定義千位,百位,十位,個位。
uint time;//要顯示的時間0~9999
uint tcnt;//計時單元
//*****************//
//以下是埠定義
//*****************//
sbit key_qian=P1^0;//按鍵"千加1"
sbit key_ =P1^2;//按鍵"百加1"
sbit key_shi =P1^4;//按鍵"十加1"
sbit key_ge =P1^6;//按鍵"個加1"
sbit laba =P3^1;//喇叭

void delay(unsigned int z)//1毫秒延時子函數
{
unsigned int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}

//*****************//
//以下是七段數碼管驅動程序
//*****************//
/**************************************************
** 功能描述: 中斷接受字元串驅動程序
**佔用引腳資源 P30
**佔用系統資源 串口中斷;中斷向量4
***************************************************/
#define DUAN P0
#define WEI P2

unsigned char code dispcode[]=
{
0x3F,/*0*/
0x06,/*1*/
0x5B,/*2*/
0x4F,/*3*/
0x66,/*4*/
0x6D,/*5*/
0x7D,/*6*/
0x07,/*7*/
0x7F,/*8*/
0x6F,/*9*/
}; //共陰段碼表
//0,1,2,3,4,5,6,7,8,9,A,b,C,c,d,E,F,NULL,-
uchar code dispbitcode[]=
{0xef,0xdf,0xbf,0x7f}; //共陰位碼表

uchar dispbuf[4],dispcount;//開辟四個顯示緩沖區

void ledinit()/***初始化子函數,定時器0刷新顯示內容***/
{
TMOD|=0x01; // 定時器0方式1
TH0=(65536-5000)/256; //定時器16位模式
TL0=(65536-5000)%256; //溢出時間:5ms
TR0=1; //開啟定時器0
ET0=1; //使能定時器0
EA=1; //系統使能
}

void leddisp()//固定顯示某些數字
{
dispbuf[0]=time/1000;
dispbuf[1]=time%1000/100;
dispbuf[2]=time%100/10;
dispbuf[3]=time%10;
}

void keytest()//按鍵檢測程序
{
if(!key_qian)//如果千位按鍵
{
delay(5);//5毫秒延時去抖
if(!key_qian)//如果千位按鍵的確按下了
{
num_qian++;//千位數字加一
while(!key_qian);//等待按鍵松開
}
time+=num_qian*1000;//千位數字加1
}
if(!key_)//如果百位按鍵
{
delay(5);//5毫秒延時去抖
if(!key_)//如果百位按鍵的確按下了
{
num_++;//百位數字加一
while(!key_);//等待按鍵松開
}
time+=num_*100;//百位數字加1
}
if(!key_shi)//如果十位按鍵
{
delay(5);//5毫秒延時去抖
if(!key_shi)//如果十位按鍵的確按下了
{
num_shi++;//千位數字加一
while(!key_shi);//等待按鍵松開
}
time+=num_shi*10;//十位數字加1
}
if(!key_ge)//如果千位按鍵
{
delay(5);//5毫秒延時去抖
if(!key_ge)//如果個位按鍵的確按下了
{
num_qian++;//千位數字加一
while(!key_ge);//等待按鍵松開
}
time+=num_ge;//個位數字加1
}
}

void main()//主程序
{
ledinit();//數碼管中斷初始化,定時器0刷新顯示內容
while(1)//大循環
{
if((!key_qian)||(!key_)||(!key_shi)||(!key_ge))//如果四個按鍵中的任何一個被按下
keytest();//執行按鍵檢測程序
leddisp();//不斷的刷新顯示內容
}
}

//*************************************************
//以下是定時器0刷新數碼管顯示內容驅動程序
//*************************************************
/**************************************************
** 功能描述: 七段數碼管驅動程序
**佔用引腳資源: 數碼管段選,數碼管位選
**佔用系統資源T0
***************************************************/

void t0(void) interrupt 1 //using 0
{
TH0=(65536-5000)/256; //5ms中斷
TL0=(65536-5000)%256; //16位定時器模式
WEI=0xff;//關位選
DUAN=dispcode[dispbuf[dispcount]]; //段選
WEI=dispbitcode[dispcount]; //開位選
dispcount++;
if(dispcount==5)
dispcount=0;

tcnt++; //計數個數加一
if(tcnt==5*200)//滿足1S了
{
tcnt=0;//計數個數歸零
time--;//時間減一
if(time==0)//時間
while(1);
}
if(time<10)//時間小於10
laba=~laba;//聲音報警
}

這是9999秒倒計時的

㈢ 單片機程序問題:用1個按鍵去控制1個燈,此鍵每快速地按2下,燈的亮與滅就翻轉1次。

假如你使用的是P30這個引腳接按鍵,P31接燈控制。
sbit ctr = P3^0;
sbit Lamp = P3^1;
void main()
{
char i=0;
bit flag = 0;

while(1)
{

if(ctr==0) //表示第一次按下鍵了

{
for(i=0;i<30;i++)
{
delayS(10); //延遲10mS

if(ctr==1 || flag ==1) //表示鍵在0.3S內松開了

{

flag = 1;

if(ctr==0) //表示第二次按下鍵了
{

delayS(10); //延遲10mS,去除按鍵抖動

if(ctr==0)

{
flag =0;
Lamp = !Lamp ; //翻轉燈
while(ctr==0); //等待放開鍵
break; // 跳出循環
}
}

}

}

flag =0; //清除標志

}

}

}

㈣ 單片機實驗箱的主要特點

(1)USB三核高性能KeilC模擬器(標配):系統標配有USB介面DICE-Keil51模擬器或選配DICE-3000和其它型號模擬器。
★DICE-Keil51模擬器是目前同行業功能完整,性能穩定,技術先進的全USB介面模擬器。兼容KEILC51 UV2 調試環境支持單步、斷點、隨時可查看寄存器、變數、IO、內存內容。支持夭折功能可模擬各種51指令兼容單片機,ATMEL、WINBOND、INTEL、SST、ST等等。
★不佔資源,無限制真實模擬(32個IO、串口、T2可完全單步模擬),真實模擬32條IO腳,包括任意使用P30和P31口。
★USB介面,無需外接電源和串口,即插即用,台式電腦、無串口的筆記本均適用。三CPU設計,採用模擬晶元+監控晶元+USB晶元結構,在模擬狀態下模擬晶元被完全凍結,可以100%重現CPU所有特性,即匯流排I/O口。
★下載模擬通訊急速115200BPS,也是KEIL支持的最高速度,相比以前版本提高一個數量級(10倍以上),單步運行如飛。
(2)支持C8051F 單片機(SOC):選配C8051F擴展板和DICE-EC5模擬器,DICE-EC5型USB高速通訊模擬器,通過4腳的JTAG介面可以進行非侵入式、全速的在線系統調試、模擬;集成開發環境支持Silicon Labs IDE和KEIL C軟體。
(3)支持EDA/USB/乙太網/CAN開發:通過選配EDA(標配並口JTAG下載線)USB/乙太網/CAN擴展卡,實現CPLD/FPGA的實驗、學習和開發,並和單片機系統共用硬體資源。
(4)實驗開放性:實驗電路單元盡可能獨立開放,如開放式鍵盤, 開放式顯示器,開放式串口等,為適應多種方式實驗提供可能。
(5)二次開發:系統將地址匯流排、數據匯流排、控制匯流排全部引出,主機板留有擴展單元,通過單片機模擬器調試用戶系統。
(6)在線下載:實驗系統配有ISP在線下載介面,可直接燒錄AT89S5X單片機。
(7)二種工作方式:一是聯PC機運行,在與上位軟體聯機的狀態下,實現各種調試和行運的操作;二是離線運行,系統配有管理監控,在無模擬器狀態下,系統自動切換到離線管理狀態,用戶可輕松調用EPROM中的實驗程序完成實驗。
(8)革命性的單片機學習方式-DAQ創新實驗平台(我公司專利產品,專利號:03221239.9)
通過選配DICE-DAQ數控式創新實驗平台,將一些復雜的例如交通燈控制系統、四層電梯控制系統、刀庫捷徑選擇等實驗通過當前流行的動畫技術製作出來,藉助PC要資源,模擬實物的控制系統。通過USB介面電路,實現CPU(單片機)對虛擬被控對象的控制和雙向通信。該實驗平台形象生動、可操作性強、可實現復雜的閉環控制,大大提高學生的學習興趣和創新思維。與傳統的實物模型相比:性價比極高、無需後續的保養和維修、使用安全方便。目前該創新實驗平台有15個典型的系統實驗。

閱讀全文

與單片機p30引腳功能相關的資料

熱點內容
木地板裙邊壞了怎麼換app 瀏覽:796
反編譯reflect優化 瀏覽:830
360壓縮配置 瀏覽:342
麒麟系統如何查伺服器型號 瀏覽:320
androidmvpmvvm 瀏覽:369
pythonunittestapi 瀏覽:334
ug轉圖的編譯器位置 瀏覽:765
程序員兩萬的台式機 瀏覽:496
手指速演算法38怎麼算 瀏覽:520
程序員的英語單詞 瀏覽:904
做單片機開發的可以做到多少歲 瀏覽:86
可以做pdf 瀏覽:855
解壓是什麼意思怎麼解壓 瀏覽:420
衛星電視加密有用嗎 瀏覽:534
什麼app新用戶有優惠券 瀏覽:762
idea編譯方法 瀏覽:725
單片機繪制光滑曲線 瀏覽:854
python協程快還是多線程快 瀏覽:112
android文字自動滾動 瀏覽:391
ruby獲取伺服器地址 瀏覽:979