『壹』 單片機交通燈程序,紅燈閃20s,黃燈3s,綠燈20s
應該是紅燈亮20S,黃燈閃3S,綠燈亮20S,如此反復吧。
#include<reg51.h>
unsigned char time,num;
sbit ledr=P1^0;
sbit ledy=P1^1;
sbit ledg=P1^2;
void t0isr() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
num++;
if(num>=10){time++;num=0;}
if(time<40){ledr=0;ledy=1;ledg=1;}
if(time>=40 && time<46){ledr=1;ledy=~ledy1;ledg=1;}
if(time>46){ledr=1;ledy=1;ledg=0;}
if(time>=86)time=0;
}
main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
ET0=1;
EA=1;
while(1);
}
『貳』 設置單片機的一個按鍵,按一下,紅燈亮,再按一下,黃燈亮,再按一下,藍燈亮。再按一下。綠燈亮。
你應該提供一下 shining();這個函數
也許是卡在函數里死循環了出不來。
還有一點就是
下面這一段,最好不要放在keyscan函數裡面
鍵盤程序只負責鍵盤就好
把下面這段單獨做個顯示函數
switch(num)
{
case 1: P0=0xf0;
break;
case 2: P0=0x0f;
break;
case 3: P2=0xf0;
break;
case 4: P2=0x0f;
break;
case 5: P0=0x00;P2=0x00;
break;
}
『叄』 紅綠燈單片機51程序初始狀態都是紅燈,
你可以接綠燈在這個引腳,一般初始化後51單片機的引腳默認為高電平。單片機開發問題或許我這可以幫助的。
『肆』 郭天祥51單片機點亮LED燈,程序0亮還是1亮
根據你第一個led程序可以看出,led點亮的條件是led=0,至於你後面的第二個程序,其實(10101010)的最低位,也就是最右邊的0,是對應(亮滅亮滅亮滅亮滅)的第一個狀態的,也就是亮(最左邊狀態),沒有錯,第三個程序同理.
還有,關於0點亮燈還是1點亮,這和電路板設計有關,LED燈兩個引腳(假設為+、-),當電路設計時+引腳接5V,-引腳接單片機I/O口,則led=0為點亮;若當+引腳接I/O口,-引腳接地,則led=1點亮,
『伍』 單片機應用,一個鍵多次按下,能夠依次控制紅黃藍綠四個燈控制第一次按下亮紅燈然後綠燈依次四下
#include<reg52.h>
typedef unsigned char uint8_t; //定義數據類型
sbit key0 = P3^2;//按鍵對應的引腳,根據實際情況修改。
sbit led0 = P1^0;//LED 對應的引腳,根據實際情況修改。
sbit led1 = P1^1;
sbit led2 = P1^2;
sbit led3 = P1^3;
#define LED_ON 0 //低電平亮燈,根據實際情況修改。
#define LED_OFF (!LED_ON)
bit changeByKey; //換燈標志位
uint8_t cnt;//亮燈狀態寄存器
void delay()//短延時函數
{
uint8_t i = 200;
while(-- i);
}
main()
{
key0 = 1;
changeByKey = 0;
led0 = LED_ON;
led1 = LED_OFF;
led2 = LED_OFF;
led3 = LED_OFF;
while(1)
{
delay();
if(key0)//如果按鍵松開
{
changeByKey = 1;//按鍵控制換燈
led0 = LED_OFF; //全部熄滅
led1 = LED_OFF;
led2 = LED_OFF;
led3 = LED_OFF;
}
else//按下
{
if(changeByKey)//松開下次按下才能再次生效
{
changeByKey = 0;
cnt ++;
switch(cnt & 3)
{
case 0:
led0 = LED_ON; //亮燈
break;
case 1:
led1 = LED_ON;
break;
case 2:
led2 = LED_ON;
break;
case 3:
led3 = LED_ON;
break;
}
}
}
}
}
『陸』 急求單片機紅綠燈的匯編語言程序設計
去買一本書吧!單片機原理與應用,你可能還不雜個會吧,這個你得慢慢來,只要你把那本書學會了差不多你能看會了,你可能還很年輕吧,要慢慢來,別人給你說沒的意思的,年輕嘛慢慢來,我也是這樣來的,我看過你這個還是簡單的,我是搞儀表的,你看看我的程序吧!!! 十分之一
文件名:*******.ASM
;* 型號 : M603-VA
;* 產品名稱:4位三相電流/電壓表
;* PCB硬體:M603-3P-VA-01(01)/M603-3P-VA-03(01)
;* 實現功能:(1)可測三相三線電壓/電流
;(2)對輸入電流/電壓值做任意刻度顯示
;* 版本號: 第1.0版
;* 起草日期:2006.3.30 最後修改日期: 2006.8.16
;* 修改日誌:
;* V1.1 解決測量漂移問題
;* 完善1:LiuQK-2007.1.1
;* 1、增加RS485通訊功能
;* 2、增加變送功能
;* 3、增加上下限報警
;//////////////////////////////////////////////////////////////
ORG 0000
AJMP MAIN
ORG 0003H;INT0中斷入口地址停電保存
;ljmp irq_int0
NOP
NOP
LJMP Err;程序飛跑,轉到處理程序,重新啟動.
ORG 000BH;T0中斷入口, 用於顯示定時
LJMP IRQ_t0
NOP
NOP
LJMP Err;程序飛跑,轉到處理程序,重新啟動.
ORG 0013H;INT1中斷口地址
LJMP IRQ_int1
NOP
NOP
LJMP Err;程序飛跑,轉到處理程序,重新啟動.
ORG 001BH;T1中斷入口 用於A/D轉換
ljmp irq_t1
NOP
NOP
LJMP Err;程序飛跑,轉到處理程序,重新啟動.
ORG 23H
LJMP IRQ_UART;用於RS-485通訊
NOP
NOP
LJMP Err
org 002bh ;D/A
ljmp irq_t2
nop
nop
LJMP Err
;////////////////////////////////////////////////
;主程序從MAIN開始 執行
;////////////////////////////////////////////////
;////////////////////////////////////////////////
;STC單片機附加功能宏定義
P4 DATA 0e8h;P4口地址
WDT_CONTR DATA 0E1H;看門狗控制地址
AUXR DATA 8EH ;只寫寄存器,只能用MOV AUXR,#DATA 命令. 用於控制擴展RAM和使能ALE.
AUXR1 DATA 0A2H;本寄存器用於數據指針選擇://=0 選擇DPTR0 , =1 選擇DPTR1 //
XICON DATA 0C0H;特殊功能寄存器申明
;89C52定時器T2
;T2CON DATA 0C8H
;TH2 DATA 0CDH
;TL2 DATA 0CCH
;RCAP2H DATA 0CBH
;RCAP2L DATA 0CAH
;RL2 BIT 0C8H.0
;CT2 BIT 0C8H.1
;TR2 BIT 0C8H.2
;EXEN2 BIT 0C8H.3
;TCLK BIT 0C8H.4
;RCLK BIT 0C8H.5
;EXF2 BIT 0C8H.6
;TF2 BIT 0C8H.7
;ET2 BIT 0A8H.5
;PT2 BIT 0B8H.5
ORG 35h
MAIN: mov r0,#0Ffh
FILL: clr a
MOV @R0,A
DJNZ R0,FILL;(填充)初始化RAM內的數據全部為00H。
mov psw,#0
MOV SP,#80H;堆棧指針
MOV AUXR,#00
MOV CHECK_CODE,#0AAH
ACALL DATA_CHECK;數據校驗
; setb 21h.0;置儀表起動標志
;EA中斷允許,ET1中斷允許,ET0中斷允許
SETb ea ;EA中斷允許
setb IT1;INT1中斷方式是負邊沿觸發方式
setb it0;INT0中斷方式是負邊沿觸發方式
mov pcon,#00h;
SETB PT0
CLR PX0
CLR PT1
CLR PX1
;SETB PX1
setb et0;T0中斷允許
setb ET2
JNB 25H.2,IE_1
LCALL R_LOAD;載入波特率
mov t2con,#34h
setb p1.0;將485置為接收狀態
mov scon,#0D0h;初始化並啟動串口
SETB ES;開中斷
SETB PS;串口中斷優先
CLR PS
sjmp ie_OK
ie_1: JNB 25H.1,IE_OK
mov RCAP2H,#0ffh
mov RCAP2L,#0ffh
mov t2con,#04h
SETB PT2
IE_OK: SETB 20H.0 ;儀表啟動標志
mov 2fh,#0;
lcall ie_ch;啟動通道
;clr p1.2
;clr p1.3
;/////////////////////////////////////////////////
;/顯示程序/
main2: ;啟動看門狗以及定時時間為4S
MOV WDT_CONTR,#34H
setb et0
setb tr0
main20: JB 20H.7,MAIN3;查看A/D是否運行
lCALL IE_SET ;啟動測量初始化
SETB 20H.7 ;測量啟動標記
main3: ;A.數據校驗
ACALL DATA_CHECK;數據校驗
;B.測量頻率計算
ACALL CY_HZ;計算
;C.顯示比例值計算
acall dis_scale
;D:計算平均值
acall Hz_av
;E:上下限報警
ACALL ALARM_OUTPUT
;F:RS485通訊/變送輸出
LCALL COMMUNICATION
;g:按鍵處理
LCALL SETKEY
LCALL SHIFTKEY
LCALL DOWKEY
LCALL ATKEY
;h:BCD碼轉換
ACALL bcdCode;bcd碼轉換
AJMP MAIN2;重新回到MAIN2
;//////////////////////////////////////
;A/D轉換采樣啟動程序
IE_SET: MOV 1eH,#4;INT1不中斷等待次數
MOV 1fH,#0;T0定時循環次數
MOV 1cH,#0;采樣脈沖個數緩沖器
MOV 1dH,#0
MOV TMOD,#00010001B;T1,T0為16位定時器.
;再次初始化T1;int1
setb ea;再次啟動中斷
setb et1
clr tr1
mov tl1,#0
mov th1,#0
setb tr1
CLR IE1; 清除int1中斷標志
SETB EX1;開啟INT1中斷
RET
;********************
;測量通道設置
ie_ch: push dpl
push dph
ie_ch1: mov a,2fh
ie_ch2: rl a;左移
cjne a,#7,ie_ch20;A/D轉換共5次循環
ie_ch20: jc ie_ch21
clr a
ie_ch21: mov dptr,#ie_ch3
jmp @a+dptr
nop
nop
;通道循環表
ie_ch3: sjmp ie_offset ;零點偏移測量;0
sjmp ie_pa;A相過程值1
sjmp ie_pb;B相過程值2
sjmp ie_pc;C相過程值3
nop
nop
;4051 地址引腳排列 (9) (10 ) (11) 為地址 A2(c) A1(b) A0(a).
;CPU控制引腳: (Gnd) (p1.6) (p1.7)
;地址對應關系:000-- 0 0 0------PC通道(13PIN)
;001---0 0 1-----PB通道(14PIN)
;002---0 1 0-----PA通道(15PIN)
;003---0 1 1-----offset通道(12PIN)
;004---0-----GND
;005---0-----GND
;006---0-----GND
;007---0-----GND
;PA測量
ie_pa: nop
;功能檢查
setb p1.6
clr p1.7
ie_ch_com: pop dph
pop dpl
ret
nop
;PB測量
ie_pb: setb p1.7
clr p1.6
sjmp ie_ch_com
;PC測量
ie_pc: CLR p1.7
clr p1.6
sjmp ie_ch_com
;零點偏移OFFSET測量0通道,硬體連接4051 的13引腳
ie_offset: SETB p1.7
SETB p1.6
sjmp ie_ch_com
nop
nop
;**************************
;頻率計算
NOSWAP:
RET
nop
CY_HZ: JNB 3EH,NOSWAP;無采樣結束標志
CLR 20H.7;清除測量掛起標記
CLR 3EH;清除測量結束標記
;T0中斷次數浮點數轉換
cy_hz_1: CLR 3CH
MOV R2,#0
MOV R3,1fh
MOV R1,#08H
LCALL INTF;浮點數存儲08H 09H 0AH
;T0中斷次數計算成時間周期;每中斷1次時間為65536uS
MOV 0BH,#17;65536
MOV 0CH,#80H
MOV 0DH,#00H
MOV R0,#0BH
LCALL FMUL;
mov r1,#08h
LCALL FSTR;存儲08H 09H 0AH
;T0剩餘時間浮點數轉換
MOV R3,1Bh
MOV R2,1Ah
MOV R1,#0BH
LCALL INTF;T0內檢測到的時間轉換浮點數存入0BH
;計算超出定時60mS以外的時間周期
MOV R0,#08H
CLR 3AH
LCALL FABP;T0+08H內時間和
LCALL FSTR;存儲0BH,0CH 0DH
;計數總時間周期
MOV 08H,#18;65.535*2mS
MOV 09H,#80H
MOV 0AH,#0h
CLR 3AH
LCALL FABP;定時時間+T0+30H得到檢測總時間
LCALL FSTR;存儲0BH 0CH 0DH
;---------------------------------------
;在定時周期內采樣到的脈沖個數轉換成浮點數
MOV R2,1ch;測量周期個數轉換浮點數
MOV R3,1dH
mov r1,#08h
Lcall intf;數據存放在08H 09H AH
;計算頻率值
MOV R0,#08H
MOV R1,#0bH
LCALL Fdiv;頻率
LCALL FSTR;存儲0b 0c 0d
mov 08h,#20
mov 09h,#0f4h
mov 0ah,#24h
Lcall fmul
; Lcall fstr
mov a,2fh
jnz time_1
;(零點測量)
; mov 10h,0bh
; mov 11h,0ch
; mov 12h,0dh
MOV R1,#10H
; lcall fstr
sjmp TIME_4
nop
nop
time_1: ; mov r0,#0bh
; mov r1,#10h
; setb 3ah
; Lcall fabp
mov a,2fh
cjne a,#1,time_2
;第二次采樣值存放到30H 31H 32H 地址(PA過程值測量)
; mov 36h,0bh
; mov 37h,0ch
; mov 38h,0dh
mov r1,#30h
; Lcall fstr
sjmp time_4
; nop
; nop
time_2: cjne a,#2,time_3
;第3次采樣值存放33H 34H 35H (PB過程值測量)
; mov 33h,0bh
; mov 34h,0ch
; mov 35h,0dh
mov r1,#33H
; Lcall fstr
Sjmp time_4
;第4次采樣值存放36H 37H 38H (PC過程值測量)
time_3: MOV R1,#36H
setb 20h.6;置A/D轉換結束標志,用於過程值計算
INC 0EH;A/D轉換計數器,用於延遲報警/數據刷新
; mov 30h,0bh
; mov 31h,0ch
; mov 32h,0dh
TIME_4: LCALL FSTR
;通道切換
TIME_COM: INC 2FH
mov a,2fh
cjne a,#4,time_COM0
time_COM0: jc time_COM1
mov 2fh,#0
time_COM1: acall ie_ch
ret
『柒』 為什麼單片機的LED要反接,1為滅,0為亮
因為51單片機IO口的灌電流能力比較強,而拉電流能力比較弱(即IO口的低平驅動能力較強而高電平驅動能力較差),所以最好不要用IO高電平進行驅動。你的圖就是用低電平驅動的。當IO輸出高電平是即0xff的時候,所有LED都熄滅,而當IO口輸出低電平時0x00所有LED都導通發光。
『捌』 關於單片機交通信號燈的問題
是把0000 1100放入P1的意思,它那每個燈都接到P1的某個引腳,這具體的是把什麼數放入P1和你的硬體連接有關系。
『玖』 偉納sp200s單片機主板上紅燈亮表示什麼
紅燈是數據讀寫指示,亮時表示正在讀或寫數據,這個時候千萬不要拔片或斷線,否則容易損壞單片機