① 用51單片機P1口驅動8個LED做循環點亮控制,每個LED占空比50%,周期兩秒
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar Counter = 0;
uchar P1LEDBUF = 0x01;//P1口的燈如果亮了7個,就改成0xFE;
main()
{
P1=0x00; //如果燈全亮了,則全部改為0xFF
TMOD = 0x01; //T0工作在定時方式1
TH0 = 0x3C; //T0初值50ms
TL0 = 0xB0;
ET0 = 1; //開啟定時器0中斷
EA = 1; //開總中斷
TR0 = 1; //啟動定時器0
while(1);
}
/********************************************/
/* 定時器0中斷服務程序 */
/********************************************/
void T0_Serve() interrupt 1
{
TH0 = 0x3c; //每次定時50ms
TL0 = 0xb0;
Counter++;
if(Counter == 20) //中斷20次後進入函數,時間剛好1秒(誤差可以忽略)
{
Counter = 0; //計數清0
P1 = P1LEDBUF ;
P1LEDBUF =_crol_(P1LEDBUF,1); //位移P1口LED,准備下一輪
//如果燈亮和滅的剛好反了(熄了一個燈,亮了7個)就把初值改了
}
if(Counter == 40)
{
Counter = 0;//計數清0,周期2秒
P1 = 0x00 ;//如果燈全亮了,則改為P1=0xFF;
}
}
② 求!! 如何用C51單片機中斷系統實現循環五遍流水燈以後再循環10次閃爍
這個程序很簡單的,只要掌握了循環表達方式就可以實現。首先,編寫流水燈的循環函數,其次使用for語句進行循環。完成後可以修改畫質後同樣方法實現閃爍。
③ 51單片機C程序怎樣把LED燈從左到右點亮然後又從右到左點亮然後循環
#include<reg51.h>
unsigned char ledtab[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}
void delay(unsigned char a)
{
unsigned char i,j;
for(i=0;i<a;i++)
for(j=0;j<120;j++);
}
main()
{
unsigned char i;
while(1)
{
for(i=0;i<8;i++){P0=ledtab[i];delay(100);}
for(i=0;i<8;i++){P0=ledtab[7-i];delay(100);}
}
}
④ 51單片機C語言如何實現8個流水燈左移三次,後右移三次;如此循環
51單片機C語言實現循環8個流水燈左移三次,後右移三次。
常式:
#include<reg51.h>//51單片機頭文件
#include<intrins.h>//包含有左右循環移位子函數的庫
#defineuintunsignedint//宏定義
#defineucharunsignedchar//宏定義
sbitbeep=P2^3;
voiddelay(uintz)//延時函數,z的取值為這個函數的延時ms數,如delay(200);大約延時200ms.
{//delay(500);大約延時500ms.
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voidmain()//主函數
{
uchara,i,j;
while(1)//大循環
{
a=0xfe;//賦初值
for(j=0;j<3;j++)for(i=0;i<8;i++)//左移三次
{
P1=a;//點亮小燈
beep=0;//開啟蜂鳴器
delay(50);//延時50毫秒
beep=1;//關閉蜂鳴器
delay(50);//再延時50毫秒
a=_crol_(a,1);//將a變數循環左移一位
}
a=0x7f;
for(j=0;j<3;j++)for(i=0;i<8;i++)//右移三次
{
P1=a;//點亮小燈
beep=0;//開啟蜂鳴器
delay(50);//延時50毫秒
beep=1;//關閉蜂鳴器
delay(50);//再延時50毫秒
a=_cror_(a,1);//將a變數循環右移一位
}
}
}
51單片機是對所有兼容Intel 8031指令系統的單片機的統稱。該系列單片機的始祖是Intel的8031單片機,後來隨著Flash rom技術的發展,8031單片機取得了長足的進展,成為應用最廣泛的8位單片機之一,其代表型號是ATMEL公司的AT89系列,它廣泛應用於工業測控系統之中。很多公司都有51系列的兼容機型推出,今後很長的一段時間內將佔有大量市場。51單片機是基礎入門的一個單片機,還是應用最廣泛的一種。
⑤ 51單片機按鍵控制按下K1四個led燈循環亮,再按一下全滅,c程序怎麼寫
在四個燈循環點亮的狀態下,每點亮一個燈需要延時,如果調用延時子程序,按鍵就顯示不靈敏了,所以,採用定時器中斷的方式控制延時,就不影響按鍵了。
#include<reg51.h>
#include<intrins.h>
模擬圖效果。
⑥ 51單片機從中間到兩邊逐個點亮再從兩邊到中間逐個點亮程序
這個流水燈程序最好用數組定義8個狀態的燈,這樣用for循環就可以實現了。簡潔明了,易讀性強,也容易理解。
#include<reg51.h>
#define uchar unsigned char
code uchar ledtab[10]=
{
0xff,0xe7,0xc3,0x81,0x00, //中間開始逐漸點亮
0xff,0x7e,0x3c,0x18,0x00 //兩邊開始逐漸點亮
}
void delay(int ms)
{
uchar i;
while(ms--)for(i=0;i<120;i++);
}
main()
{
uchar i;
while(1)
{
for(i=0;i<10;i++)P1=ledtab[i];
delay(1000);
}
}