流水鍵編程
1. 求助一個用c語言編程的流水燈程序(高手,這對你而言只是小菜一碟啦)
#include<reg51.h>
#include<intrins.h>
int flag=0,temp;
void delay(int);
main()
{
EA=1;
EX0=1;
EX1=1;
IT0=1;
IT1=1;
P1=0xff;
while(1)
{
while(flag==1)
{
P1=temp;
delay(500);
temp=_crol_(temp,1);
}
temp=0xfe;
while(flag==2)
{
temp=_cror_(temp,1);
P1=temp;
delay(500);
}
temp=0xfe;
}
}
void delay(int ms)
{
int i,j;
for(i=ms;i>0;i--)
for(j=110;j>0;j--);
}
void itr0() interrupt 0
{
P1=0xff;
flag=1;
}
void itr1() interrupt 2
{
P1=0xff;
flag=2;
}
2. 51單片機C語言對鍵控雙向流水燈編程。用兩個按鍵,中端來做。
#include<reg51.h>
#define uchar unsigned char
uchar num,temp,times,led;
t0isr() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
times++;
if(times>=10)
{
times=0;
P0=led;
if(key1==0){
num++;
num&=0x07;
}
else if(key2==0)
{
if(num>0)num--;
else(num=7;
}
led>>=num;
}
}
main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
ET0=1;
EA=1;
LED=0x0xfe;
num=0;
times=0;
while(1);
}
3. C51單片機編程,按鍵控制流水燈
#include "reg51.h"
unsigned char led[]={0xfe,0xfd,0xfb,0xf7}; //LED燈的花樣數據
void delay(unsigned char time){ //延時函數
unsigned int j=15000;
for(;time>0;time--)
for(;j>0;j--);
}
void main(){
bit dir=0,run=0; //標志位定義及初始化
char i;
while(1){
switch (P0 & 0x0f){ //讀取鍵值
case 0x0e:run=1;break; //K1動作,設run=1
case 0x0d:run=0,dir=0;break; // K2動作,設run=dir=0
case 0x0b:dir=1;break; //K3動作,設dir=1
case 0x07:dir=0;break; //K4動作,設dir=0
}
if (run) //若run=dir=1,自上而下流動
if(dir)
for(i=0;i<=3;i++){
P2=led[i];
delay(200);
}
else
for(i=3;i>=0;i--){ //run=1,dir=0,自下而上流動
P2=led[i];
delay(200);
}
else P2=0xff; //若run=0,全部燈滅
}
}
4. 單片機流水燈編程
/*********************************************************
程序功能:用固定頻率的方波驅動蜂鳴器,共16種音調;在蜂鳴器
發出不同音調的同時,LED發光以二進制數字形式指示
當前音調的編號(1~16)
----------------------------------------------------------
測試說明:聆聽蜂鳴器發聲的音調變化。
**********************************************************/
#include <msp430.h>
#include "BoardConfig.h"
uchar step = 0xff;
/************************主函數************************/
void main( void )
{
uchar i;
WDTCTL = WDTPW + WDTHOLD; //關狗
BoardConfig(0xb0); //關數碼管、流水燈和電平轉換
/*------選擇系統主時鍾為8MHz-------*/
BCSCTL1 &= ~XT2OFF; //打開XT2高頻晶體振盪器
do
{
IFG1 &= ~OFIFG; //清除晶振失敗標志
for (i = 0xFF; i > 0; i--); //等待8MHz晶體起振
}
while ((IFG1 & OFIFG)); //晶振失效標志仍然存在?
BCSCTL2 |= SELM_2 + SELS; //MCLK和SMCLK選擇高頻晶振
TACCTL0 |= CCIE; //使能比較中斷
TACTL |= TASSEL_2 + ID_3 ; //計數時鍾選擇SMLK=8MHz,1/8分頻後為1MHz
TBCCR0 = 4096*2 - 1; //周期兩秒
TBCCTL0 |= CCIE;
TBCTL |= TBSSEL_1 + ID_3 + MC_1; //時鍾源ACLK/8,up mode
P6DIR |= BIT7; //蜂鳴器對應IO設置為輸出
P2DIR = 0xff;
P2OUT = 0xff;
_EINT();
LPM1;
}
/*******************************************
函數名稱:Timer_A
功 能:定時器A的中斷服務函數,在這里驅動
蜂鳴器發聲
參 數:無
返回值 :無
********************************************/
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
P6OUT ^= BIT7; // Toggle P6.7
}
/*******************************************
函數名稱:Timer_B
功 能:定時器B的中斷服務函數,在這里更改
蜂鳴器發聲頻率
參 數:無
返回值 :無
********************************************/
#pragma vector=TIMERB0_VECTOR
__interrupt void Timer_B (void)
{
if(step == 0xff) //up mode
TACTL |= MC_1;
step++;
switch(step)
{
case 0: TACCR0 = 5000; P2OUT = ~1; break; // 100Hz
case 1: TACCR0 = 2500; P2OUT = ~2; break; // 200Hz
case 2: TACCR0 = 1250; P2OUT = ~3; break; // 400Hz
case 3: TACCR0 = 625; P2OUT = ~4; break; // 800Hz
case 4: TACCR0 = 500; P2OUT = ~5; break; // 1KHz
case 5: TACCR0 = 250; P2OUT = ~6; break; // 2KHz
case 6: TACCR0 = 167; P2OUT = ~7; break; // 3KHz
case 7: TACCR0 = 125; P2OUT = ~8; break; // 4KHz
case 8: TACCR0 = 100; P2OUT = ~9; break; // 5KHz
case 9: TACCR0 = 83; P2OUT = ~10; break; // 6KHz
case 10: TACCR0 = 71; P2OUT = ~11; break; // 7KHz
case 11: TACCR0 = 63; P2OUT = ~12; break; // 8KHz
case 12: TACCR0 = 56; P2OUT = ~13; break; // 9KHz
case 13: TACCR0 = 50; P2OUT = ~14; break; // 10KHz
case 14: TACCR0 = 33; P2OUT = ~15; break; // 15KHz
case 15: TACCR0 = 25; P2OUT = ~16; break; // 20KHz
case 16: step = 0xff; // 循環播放
}
}
5. 單片機 按鍵控制8個LED 流水點亮如何編程
/*-----------------------------------------------
名稱:單個獨立按鍵控制LED
論壇:www.doflye.net
編寫:shifang
日期:2009.5
修改:無
內容:用於時刻檢測按鍵狀態並輸出指示
------------------------------------------------*/
#include<reg52.h> //包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義
sbit KEY=P3^3; //定義按鍵輸入埠
sbit LED=P1^2; //定義led輸出埠
/*------------------------------------------------
主函數
------------------------------------------------*/
void main (void)
{
KEY=1; //按鍵輸入埠電平置高
while (1) //主循環
{
if(!KEY) //如果檢測到低電平,說明按鍵按下
LED=0;
else
LED=1; //這里使用if判斷,如果按鍵按下led點亮,否則熄滅
//上述4句可以用一句替代 LED=KEY;
//主循環中添加其他需要一直工作的程序
}
}
/*-----------------------------------------------
名稱:IO口高低電平控制
論壇:www.doflye.net
編寫:shifang
日期:2009.5
修改:無
內容:循環左移,始終一個led點亮,並循環執行流水動作,左移符號 << 邏輯或符號 |
------------------------------------------------*/
#include<reg52.h> //包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義
void Delay(unsigned int t); //函數聲明
/*------------------------------------------------
主函數
------------------------------------------------*/
void main (void)
{
unsigned char i; //定義一個無符號字元型局部變數 i 取值范圍 0~255
Delay(50000);
P1=0xfe; //賦初始值
while (1) //主循環
{
for(i=0;i<8;i++) //加入 for循環,表明for循環大括弧中的程序循環執行8次
{
Delay(50000);
P1<<=1;
P1=P1|0x01; //左移後,最右端自動賦值0,所以需要該語句賦值1
}
P1=0xfe; //重新賦初始值
//主循環中添加其他需要一直工作的程序
}
}
/*------------------------------------------------
延時函數,含有輸入參數 unsigned int t,無返回值
unsigned int 是定義無符號整形變數,其值的范圍是
0~65535
------------------------------------------------*/
void Delay(unsigned int t)
{
while(--t);
}
自己修改吧。
6. 單片機編程 使用按鍵控制流水燈延時時間,每按一次按鍵流水燈流水速度逐漸變慢,直到停止流水
你可以簡單地認為單片機只能輸出5V或者0V的電壓 分別對應1和0,那麼LED燈的另一端接地或者接5V,如果你 的單片機輸出5V接到LED燈,LED燈另一端接地 , 那就產生電壓了,電路就導通了,燈就亮了 ,反之也是這個道理。時間方面可以寫大致的延時,或者用定時器,這樣就比較精確了,你學會了這個就可以說入門了。