❶ C51單片機程序設計題,要求用C語言做,模擬交通燈控制單片機電路,答案要詳細具體。
晚上隨手寫,也未調試,權當看看
程序有不嚴謹地方還得調試修改
#include<REGX51.H>
#defineSTATUS_1S 1
#defineSTATUS_2S 2
#defineSTATUS_3S 3
#defineSTATUS_4S 4
#defineSTATUS_5S 5
#defineSTATUS_15S 15
#defineSTATUS_28S 28
#defineSTATUS_29S 29
#defineSTATUS_30S 30
unsignedcharflag,status,status_temp=1,status_temp_;
sbitK1 = P0^0;
sbitK2 = P0^1;
sbitRLED = P0^2;
sbitYLED = P0^3;
sbitGLED = P0^4;
voidInit(void)
{
ET0=1;
TR0=1;
RLED=0; //亮
YLED=0;
GLED=0;
while(status_temp)
{
switch(status)
{
caseSTATUS_1S: //1S
{
RLED=1; //滅,閃一次
YLED=1;
GLED=1;
} break;
caseSTATUS_2S: //1S
{
RLED=0; //亮,閃一次
YLED=0;
GLED=0;
} break;
caseSTATUS_3S: //1S
{
RLED=1; //滅
YLED=1;
GLED=1;
status_temp=0;
} break;
}
}
status_temp=1;
ET0=0;
TR0=0;
}
voidInit_Timer0(void)
{
TMOD=0x01;
// ET0=1;
// TR0=1;
EA=1;
TH0=0X3C;
TL0=0XB0; //未計算,偷樓上的
}
voidM_Start(void)
{
TH0=0X3C;
TL0=0XB0;
ET0=1;
TR0=1;
RLED=0; //紅亮
while(status_temp)
{
switch(status)
{
caseSTATUS_1S:
{
if(status_temp_==1)
{
YLED=0;
}
} break;
caseSTATUS_2S:
{
if(status_temp_==1)
{
YLED=1;
}
} break;
caseSTATUS_3S:
{
if(status_temp_==1)
{
YLED=0;
status_temp_=0;
}
} break;
caseSTATUS_15S: //15S滅,綠亮
{
RLED=1;
GLED=0;
} break;
caseSTATUS_28S:
{
GLED=1;
} break;
caseSTATUS_29S:
{
GLED=0;
} break;
caseSTATUS_30S:
{
GLED=1;
status=0;
status_temp_=1;
} break;
}
}
ET0=0;
TR0=0;
status=0;
status_temp=1;
YLED=1;
}
voidM_End(void)
{
TH0=0X3C;
TL0=0XB0;
ET0=1;
TR0=1;
RLED=0; //亮1次
YLED=0;
GLED=0;
while(status_temp)
{
switch(status)
{
caseSTATUS_1S: //1S
{
RLED=1; //滅一次
YLED=1;
GLED=1;
} break;
caseSTATUS_2S: //1S
{
RLED=0; //亮二次
YLED=0;
GLED=0;
} break;
caseSTATUS_3S: //1S
{
RLED=1; ////滅二次
YLED=1;
GLED=1;
} break;
caseSTATUS_4S: //1S
{
RLED=0; ////亮三次
YLED=0;
GLED=0;
} break;
caseSTATUS_5S: //1S
{
RLED=1; ////滅三次
YLED=1;
GLED=1;
status_temp=0;
} break;
}
}
status_temp=1;
ET0=0;
TR0=0;
}
main()
{
Init();//單片機初始化
Init_Timer0();//定時器初始化
while(1)
{
if(K1==0)
M_Start();//模擬開始
if(K2==0)
M_End();//模擬結束
}
}
voidinterrupt_time0()interrupt1 //核對頭文件,一致就好
{
TH0=0X3C;
TL0=0XB0;
flag++;
if(flag==20)
{
status++;
flag=0;
}
}
❷ C51單片機流水燈蜂鳴器程序
P2是埠啊,所以P2=_crol_(P2,1);這句中等號左邊的P2表示的讀取P2埠,這時的值取決於外圍電路,而不是原來的賦值。所以需要一個變數來解決這個問題。
由你的代碼看,是直流蜂鳴器,它的聲音頻率是無法改變的。而你也只是要改變鳴叫和不鳴叫的間隔頻率(只是糾正一下名詞),但這個程序不行。修改如下:
void sp()
{
speak=1;
Delay_ms(5);
speak=0;
Delay_ms(5);
}
void main(void)
{
uchar j,k,a;
a=0xfe;
P2=0xfe;
Delay_ms(500);
while(1)
{
for(j=0;j<7;j++)
{
a=_crol_(a,1);
P2=a;
sp();
Delay_ms(500);
}
for(k=0;k<7;k++)
{
a=_cror_(a,1);
P2=a;
sp();
Delay_ms(500);
}
}
}
❸ 關於C51單片機溫度報警程序的問題 誰能幫我在每段程序後加漢字解釋 及怎麼實現溫度顯示及蜂鳴器報警的
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define out P0 ;
#define INT8U unsigned char //宏定義
#define INT16U unsigned int
sbit smg1=P2^0;
sbit smg2=P2^1;
sbit smg3=P2^2;
sbit smg4=P2^3;
sbit Beep=P1^5; //蜂鳴器引腳定義
sbit led=P1^6;
sbit led1=P1^7; //設置燈光報警鍵
sbit DQ=P2^4; //ds18b20埠
void init_ds18b20(void); //ds18b20初始化子程序
void delay(uchar); //ds18b20工作延時子程序
uchar readbyte(void);//向ds18b20讀一個位元組數據
/*******************************************************************************/
void writebyte(uchar);//向ds18b20寫一個位元組數據
uint retemp();//計數變數
uchar key;
uchar a,b,c,d; //計數變數
uchar x[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uint retemp()
{
uint a,b,t;
init_ds18b20(); //初始化ds18b20
writebyte(0xcc); // 跳過讀序列號的操作
writebyte(0x44); // 啟動溫度轉換
init_ds18b20();
writebyte(0xcc); //跳過讀序號列號的操作
writebyte(0xbe); //讀取溫度寄存器等(共可讀9個寄存器) 前兩個就是溫度
a=readbyte(); //讀出溫度低位LSB
b=readbyte(); //讀出溫度高位MSB
t=b; //將溫度高八位送t
t<<=8; //乘以256移到高八位
t=t|a; //高低八位組合成溫度值
if(t<0x8000) //如果溫度為正計算正溫度值
{
key=0;
t=t*0.625;
}
else //否則溫度為負,取反
{
key=1;
t=(~t+1)*0.625;
}
return(t); //返回溫度值
}
void main()
{
uint i,t;
EA = 1; //開總中斷
TMOD = 0x01; //定時器0工作方式1
TR0=1;
delay(100);
while(1)
{
t=retemp(); 讀溫度值
a=x[t/1000]; //溫度千位數
b=x[t/100%10]; //溫度百位數
c=x[t/10%10]-0x80; //溫度十位數
d=x[t%10]; //溫度個位數
if(key==1) //如果key=1
a=0xbf; //a為「負號"
if((key==0)&&(t>320)) //如果key=0 且t大於320
{
led1=0; //點亮led1
ET0=1; //開啟定時器0中斷
}
else if(t<290) //如果溫度小於290
{
led=0; //點亮led
ET0=1; //開啟定時器0中斷
}
else //否則
{
led1=1; //關閉led1
led=1; //關閉led
ET0=0; //關閉定時器0中斷
}
for(i=0;i<50;i++) //循環50次
{smg1=1;P0=a;delay(100);smg1=0; //顯示千位
smg2=1;P0=b;delay(100);smg2=0; //顯示百位
smg3=1;P0=c;delay(100);smg3=0; //顯示十位
smg4=1;P0=d;delay(100);smg4=0; //顯示個位
}
}
}
/*ds18b20工作延時子程序*/
void delay (uchar i)
{
do
{_nop_();
_nop_();
_nop_();
i--;
}
while(i);}
/*ds18b20初始化子程序*/
void init_ds18b20()
{
uchar x=0;
DQ=0; //單片機將DQ拉低
delay (120);
DQ=1; //拉高匯流排
delay(16);
delay(80);
}
/*讀一個位元組*/
uchar readbyte ()
{uchar i=0,date=0;
for(i=8;i>0;i--)
{
DQ=0; // 給脈沖信號
delay(1);
DQ=1; // 給脈沖信號
date>>=1;
if(DQ)date|=0x80;
delay(11);
}
return(date);
}
/*寫一個位元組*/
void writebyte(uchar dat)
{uchar i=0;
for(i=8;i>0;i--) //寫8位數
{
DQ=0;
DQ=dat&0x01; //寫dat的D0位
delay(12);
DQ=1;
dat>>=1;
delay(5);
}
}
/**************************************************
*函數名:中斷函數
*描 述:產生矩形脈沖使蜂鳴器發聲
**************************************************/
void BeepTimer0(void) interrupt 1
{
Beep = ~Beep;
TH0 = 65335 / 256; //定時器賦初值
TL0 = 65335 % 256;
}
❹ C51單片機中有源蜂鳴器的程序怎麼寫啊,還有就是,有源蜂鳴器是高電平觸發還是低電平觸發
由於單片機驅動能力有限,常常連接三極體驅動蜂鳴器。
這得看三極體的型號,不同的型號程序稍有不同。
主要是設置是「1」還是「0」驅動,這得看你的電路的連接。
1)如果連接PNP三極體驅動,設置P3_3=0,則蜂鳴器一直響;如果設置
P3_3=0;//響
delay_500ms();
P3_3=1;//不響
delay_500ms();//蜂鳴器每一秒響一次
2)如果連接NPN三極體驅動,設置P3_2=1,則蜂鳴器一直響;如果設置
P3_2=1;//響
delay_500ms();
P3_2=0;//不響
delay_500ms();//蜂鳴器每一秒響一次
❺ 做基於c51單片機,DS18B20,共陽4位數碼管的溫度控制報警,不會改數碼管顯示程序,要按開發板原理圖。
看你電路,數碼管就是P0口輸出字模,P2口輸出位選
❻ C51單片機系列警報器編程
#include<stc89xx.h>
#define uchar unsigned char
sbit fmq=P4^4;
sbit key=P1^7;
bit flag;
uchar times;
uchar cnt;
void t0isr() interrupt 1
{
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
if(flag)
{
fmq=~fmp;
num++;
if(num>=10)
{
flag=~flag;
num=0;
}
}
else
{
cnt++;
cnt%=2;
if(cnt==0)
{
fmq=~fmq;
num++;
if(num>=10)
{
num=0;
flag=~flag;
}
}
}
}
main()
{
TMOE=0x01;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
ET0=1;
EA=1;
while(1)
{
if(key==0)
{
TR0=1;
}
else TR0=0;
}
}
❼ C51單片機報警程序,怎樣把報警時長定為15s
if(js==30)----你這是30,報警多少秒?
{
js=0;
flag1=0;
...
改大一些,是不是就加長了?
❽ 基於單片機防盜報警系統的設計的畢業論文
第1章 緒 論
隨著經濟的發展,人們對防盜、防劫、防火保安設備的需求量大大增加。針對偷盜、搶劫、火災、煤氣泄漏等事故進行檢測和報警的系統,其需求也越來越高。本設計運用單片機技術設計了一新穎紅外線防盜報警器。而本設計中的輸入部分主要是各種各樣的感測器。不同類型的探測器用不同的手段探測各種入侵行為;不同作用的感測器,也可檢測出不同類型的情況。
本章節主要介紹了本設計的選題背景、課題介紹、本文主要工作、方案論證。
1.1選題背景
單片機現在已越來越廣泛地應用於智能儀表、工業控制、日常生活等很多領域,可以說單片機的應用已滲透到人類的生活、工作的每一個角落,這說明它和我們每個人的工作、生活密切相關,也說明我們每個人都有可能和有機會利用單片機去改造你身邊的儀器、產品、工作與生活環境。
紅外技術已經成為先進科學技術的重要組成部分,他在各領域都得到廣泛的應用。由於他是不可見光,因此用他做防盜報警監控器,具有良好的隱蔽性,白天黑夜均可使用,而且抗干擾能力強。這種監控報警裝置廣泛應用與博物館、單位要害部門和家庭的防護[1]。
通常紅外線發射電路都是採用脈沖調制式。紅外接收電路首先將接收到的紅外光轉換為電信號,並進行放大和解調出用於無線發射電路的調制信號。當無人遮擋紅外光時,鎖相環輸出低電平,報警處於監控狀態;一旦有人闖入便遮擋了紅外光,則鎖相環失鎖,輸出高電平,驅動繼電器接通無線發射電路,監控室便可接收到無線報警信號,並可區分報警地點[2]。
當我們考慮的范圍廣一點:若是在小區每一住戶內安裝防盜報警裝置。當住戶家中無人時,可把家庭內的防盜報警系統設置為布防狀態,當竊賊闖入時,報警系統自動發出警報並向小區安保中心報警[3]。周界報警系統:在小區的圍牆上設置主動紅外對射式探測器,防止罪犯由圍牆翻入小區作案,保證小區內居民的生活安全[4]。
目 錄
第1章 緒 論 3
1.1選題背景 3
1.2課題介紹 4
1.3本文主要工作 5
1.4方案選擇論證 5
1.4.1單片機的選擇 5
1.4.2顯示器工作原理及其選擇 6
1.4.3液晶顯示和數碼顯示 6
1.4.4 防盜報警選擇感測器的選擇 7
2.1硬體系統總體設計 8
2.2 AT89C51晶元的介紹 9
2.2.1引腳功能 9
2.2.2 結構原理 11
2.2.3 AT89C51定時器/計數器相關的控制寄存器介紹 12
2.2.4 MAX708晶元介紹 13
2.3 單片機復位設置 14
2.4 8255A晶元介紹 14
2.4.1 8255A的引腳和結構 15
2.4.2 8255的工作方式 16
2.4.3 8255的控制字 18
2.5 AT89C51與8255的介面電路 19
2.6 顯示部分 20
2.6.1七段顯示解碼器 20
2.6.2 7448解碼驅動 21
2.6.3 單片機與7448解碼驅動器及LED的連接 23
2.6.4外部地址鎖存器 23
第3章 檢測信號放大電路設計 24
3.1 熱釋紅外線感測器典型電路 25
3.2 紅外光敏二極體警燈電路 26
3.2.1 光敏二極體控制電路 27
3.3紅外線探測信號放大電路設計 28
3.3.1光電耦合器驅動介面 30
3.3.2 集成電路運算放大器 31
3.3.3 精密多功能運算放大器INA105 31
3.3.4 低功耗、雙運算放大器LM358 34
第4章 電源設計 35
4.1 單片機系統電源 35
4.2檢測部分電源 35
5.1 主程序設計 37
5.2 核對子程序設計 38
5.3 中斷子程序設計 38
5.4 讀數子程序設計 39
5.5 程序設計說明 40
5.6 程序清單 41
第6章 調試 45
6.1安裝調試 45
6.2音響(和繼電器)驅動線路具體連接 45
6.3 程序修改 46
6.4 程序執行過程 47
結論 48
參考文獻 49
致謝 51
原理圖 52
基於單片機控制的紅外防盜報警器的設計
[摘要]:隨著社會的不斷進步和科學技術、經濟的不斷發展,人們生活水
平得到很大的提高,對私有財產的保護意識在不斷的增強,因而對防盜措施提
出了新的要求。 本設計就是為了滿足現代住宅防盜的需要而設計的家庭式電子
防盜系統。
目前市面上裝備主要有壓力觸發式防盜報警器、開關電子防盜報警器和壓力遮光觸發式防盜報警器等各種報警器,但這幾種比較常見的報警器都存在一些缺點。本系統採用了熱釋電紅外感測器,它的製作簡單、成本低,安裝比較方便,而且防盜性能比較穩定,抗干擾能力強、靈敏度高、安全可靠。這種防盜器安裝隱蔽,不易被盜賊發現。同時它的信號經過單片機系統處理後方便和PC機通信,便於多用戶統一管理。
本設計包括硬體和軟體設計兩個部分。硬體部分包括單片機控制電路、紅外探頭電路、驅動執行報警電路、LED控制電路等部分組成。處理器採用51系列單片機AT89S51。整個系統是在系統軟體控制下工作的。系統程序可以劃分為以下幾個模塊: 數據採集、鍵盤控制、報警和顯示等子函數。
[關鍵詞]:單片機、紅外感測器、數據採集、報警電路。
Infrared burglar alarm design controls which based
on the monolithicintegrated circuit
Abstract :Along with society's unceasing progress and science and technology,economical unceasing development, the people living standard obtainsthe very big enhancement, to private property protection consciousnessin unceasing enhancement, thus set the new request to the securitymeasure. This design is for satisfy the family type electron securitysystem which the modern housing security needs to design.
At present in the market condition equips mainly has the pressure totouch the hair style burglar alarm, the switch electron burglar alarmand the pressure shields light the hair style burglar alarmand so on each kind of alarm apparatus, but these kind of quite commonalarm apparatuses all have some shortcomings. This system used hashotly released the electricity infrared sensor, its manufacturesimple, cost low, installm the antijamming ability strong, thesensitivity high, safe was reliable. This kind of security installmenthiding, was not easily discovered by the bandits and thieves.Simultaneously its signal after monolithic integrated circuit systemprocessing the convenience and P the C machine correspondence, isadvantageous for the multiuser unification management.
This design designs two parts including the hardware and software. Thehardware partially including the monolithic integrated circuit controlcircuit, infrared pokes head in the electric circuit, the actuationexecution alarm circuit, the LED control circuit and so on the partialcompositions. The processor uses 51 series monolithic integratedcircuits AT89S51, the overall system is works under the systemsoftware control. The system program may divide into following severalmoles: The data acquisition, the keyboard control, reports to thepolice with the demonstration small steelyard function.
Key words: AT89S51 monolithic integrated circuit, infrared sensor,data acquisition, alarm circuit.
目 錄
1. 緒論 1 1.1 前言 1
1.2 設計任務與要求 1
2. 熱釋電紅外感測器概述 2
2.1 PIR感測器簡單介紹 2
2.2 PIR 的原理特性 2
2.3 PIR 結構特性 3
3. AT89S51單片機概述 6
3.1 AT89S51單片機的結構 6
3.1.1管腳說明 8
3.1.2 主要特性 11
3.1.3 振盪器特性 11
3.2 AT89S51單片機的工作周期 12
3.3 AT89S51單片機的工作過程和工作方式 13
3.4 AT89S51的指令系統 16
4. 方案設計 18
4.1 系統概述 18
4.2 總體設計 19
4.3 系統硬體選擇 19
4.4 硬體電路實現 20
4.5 軟體的程序實現 21
5. 結論概述 27
5.1 主要結論 27
5.2 結束語 27
致謝 28
參考文獻 29
❾ c51單片機怎麼編程讓蜂鳴器發出嘟嘟嘟的聲
你可以在 網路 上搜索 「單片機播放音樂」,你會得到很多答案,也能比較深刻解決這個問題。
單片機發聲音,是編程 在 接有 蜂鳴器 的埠 間歇的輸出某種頻率的脈沖。
單片機在埠輸出頻率脈沖的最簡單的方法 是使用 延時。
void beep()
{
unsigned char i,j,k;
for(i=0;i<18;i++)
{
for(j=0;j<250;j++)
{
for(k=0;k<120;k++) ;
SPK=!SPK;//發聲音
}
for(j=0;j<130;j++)
{
for(k=0;k<120;k++) ; //間歇時間
}
}
}
❿ c51單片機: 利用定時器+蜂鳴器實現定時報警功能,30秒內,每一秒響一下,30秒時間到了,蜂鳴器長鳴 求程序
參考程序:
#include <reg52.h>
sbit Beep = P3^0;
unsigned char t1s,t50ms;
unsigned char flag30s = 0,flag1s = 0;
void delayms(unsigned int xms)
{
unsigned int i,j;
for(i=0; i<xms; i++)
for(j=0; j<110; j++);
}
void Alarm(void)
{
Beep = 0;
delayms(200);
Beep = 1;
}
void main()
{
TMOD = 0x01;
TH0 = 0x3C;
TL0 = 0xB0;//50ms中斷一次
EA = 1;
ET0 = 1;
TR0 = 1;
while(1)
{
if(flag30s)Beep = 0;//30s到蜂鳴器一直響
if(flag1s)//1s到,蜂鳴器響一下
{
flag1s = 0;
Alarm();
}
}
}
void TIM0(void) interrupt 1
{
TH0 = 0x3C;
TL0 = 0xB0;
t50ms++;
if(t50ms == 20)//1s
{
t50ms = 0;
t1s++;
flag1s = 1;
if(t1s == 30)//30s
{
TR0 = 0;
flag30s = 1;
}
}
}