① 51單片機8位流水燈程序怎麼寫
以P1口的8位共陽極LED為例,
初始化:
sbit P1_0=P1^0;
sbit P1_1=P1^1;
sbit P1_2=P1^2;
sbit P1_3=P1^3;
sbit P1_4=P1^4;
sbit P1_5=P1^5;
sbit P1_6=P1^6;
sbit P1_7=P1^7;
delay函數:
void delay(int x)
{
int a,b;
for(a=0;a<x;a++)
{
for(b=0;b<10000;b++);
}
}
主程序
void main()
while(1)
{
P1_0=1;
delay(1000);
P1_0=0;
delay(1000);
P1_1=1;
delay(1000);
P1_1=0;
delay(1000);
//以此類推至P1_7
}
② 單片機的8位流水燈的問題,
哥們。你知道0xfe代表什麼意思嗎?51單片機的P1口有8個埠。0xfe表示最後一位為低電平也就是11111110.小燈當然會亮。然後a變數左移一位就是11111101,表示第二個燈亮其他滅。以此類推,不就是流水燈嗎?還有,你的蜂鳴器和燈設置延遲50毫秒?那就相當於一直在響一直再亮。多延遲一會
③ 求一c51單片機,8位流水燈程序
下列程序調試成功。使用晶振為12M。
//軟體延時,使P1口外接的8個發光二極體,以每秒1位的速度,輪流發光。
//發光順序:0123,1234,2345,3456,4567,5670,6701,7012。循環。
//----------------------------
#include<reg52.h>
#include<intrins.h>
unsigned char a;
void main()
{
unsigned char i, j, k;
a = 0x0f;
while(1) {
P1 = a; //假設8個發光二極體接在P1口.
a = _crol_(a, 1);
for(i = 8; i > 0; i--)
for(j = 250; j > 0; j--)
for(k = 250; k > 0; k--);
}
}
//----------------------------
補充提問:0123不是同時亮,而是0 1 2 3 按順序亮,再1234按順序亮...
回答補充提問,改動如下:
#include<reg52.h>
#include<intrins.h>
void main()
{
unsigned char a, b, c, i, j, k;
a = 0xfe;
while(1) {
b = a;
for(c = 0; c < 4; c++) {
P1 = b;
b = _crol_(b, 1);
for(i = 8; i > 0; i--)
for(j = 250; j > 0; j--)
for(k = 250; k > 0; k--);
}
a = _crol_(a, 1);
}
}
④ 51單片機匯編控制8個流水燈
思路:
循環控制常亮狀態的值,將其從最高位循環到最低位。這個用於最後狀態的常亮
在常亮循環中,控制不是常亮的其它所有位進行再次循環,逐漸從最低位亮滅循環到最高位
代碼如下:
#include<reg51.h>
unsignedcharPData;//整體結果
unsignedcharCurrData;//變化的最高位
//延時,本函數是非精確延時,若需要精確延遲則需要根據本函數的匯編語句進行精確計算後調整循環體次數
voiddelay(unsignedintms){
unsignedchari;
while(ms--){
for(i=0;i<120;t++){
;
}
}
}
voidmain(){
unsignedchari=0,j=0;
PData=0x00;//全滅狀態
for(i=8;i>0;i--){//控制常亮的位置,先從最高位開始,依次循環到最低位
for(j=0;j<i-1;j++){//從最低位循環到不是常亮的最高位
P1=~(PData+(1<<j));//第i位亮
delay(500);
P1=~PData;//第i位滅
delay(500);
}
PData=PData+(1<<(i-1));//置最高位為常亮狀態
P1=~PData;
delay(500);
}
//停機
while(1){
;
}
}
⑤ 單片機的8位流水燈的問題,
P1口共有8個IO控制口,分別控制8個LED燈,你的目的是做流水燈,也就是讓其依次循環點亮,第一次點亮第一個燈,即:P1.0=0,其餘為1即P=0xfe;第二次點亮第二個燈,即:P1.1=0,其餘為1即P=0xfd;依次類推。=_crol_(a,1)實現的功能就是循環左移,相當於匯編語言的RL
A;這樣就可以實現a的值分別為:0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f。
⑥ 單片機流水燈C語言程序(8個燈,依次點亮每個燈,延時500MS)
單片機流水燈C語言程序的源代碼如下:
#include //51系列單片機定義文件
#define uchar unsigned char //定義無符號字元
#define uint unsigned int //定義無符號整數
void delay(uint); //聲明延時函數
void main(void)
{
uint i;
uchar temp;
while(1)
{
temp=0x01;
for(i=0;i<8;i++) //8個流水燈逐個閃動
{
P1=~temp;
delay(100); //調用延時函數
temp<<=1;
}
temp=0x80;
for(i=0;i<8;i++) //8個流水燈反向逐個閃動
{
P1=~temp;
delay(100); //調用延時函數
temp>>=1;
}
temp=0xFE;
for(i=0;i<8;i++) //8個流水燈依次全部點亮
{
P1=temp;
delay(100); //調用延時函數
temp<<=1;
}
temp=0x7F;
for(i=0;i<8;i++) //8個流水燈依次反向全部點亮
{
P1=temp;
delay(100); //調用延時函數
temp>>=1;
}
void delay(uint t) //定義延時函數
{
register uint bt;
for(;t;t--)
for(bt=0;bt<255;bt++);
}
(6)單片機八位流水燈擴展閱讀
51單片機流水燈的源代碼如下
#include<reg51.h>
#include<intrins.h>
voiddelay(inta)
{
inti;
while(a--)for(i=0;i<110;i++);
}
main()
{
inti;
while(1)
{
P0=0xfe;
for(i=0;i<8;i++)
{
P0=_crol_(P0,1);
delay(500);
}
}
}
⑦ 如何用單片機簡單製作一個流水燈
工具:STC系列51單片機、串口轉換器(USB轉TTL 或232轉TTL)
材料:實驗板一塊(可以買現成的,也可以買麵包板自己搭建),電阻、LED燈 若干,5V電源等。
以下程序可以直接用Keil C 直接編譯執行。
//可以通過左移函數_crol_()和右移函數_cror_()來實現LED等的來迴流動。
//具體實現方法可以參考如下程序:
#include<reg51.h>
#include<intrins.h>
#defineuintunsignedint
#defineucharunsignedchar
voiddelay(uinta);
voidmain()
{
P1=0xfe;
while(1)
{
//向左循環點亮LED
for(i=0;i<7;i++)
{
P1=_crol_(P1,1);//左移一位,點亮下一位LED
delay(55);
}
//向右循環點亮LED
for(i=0;i<7;i++)
{
P1=_cror_(P1,1);//右移一位,,點亮上一位LED
delay(55);
}
}
}
//延時函數,延時a毫秒
voiddelay(uinta)
{
uintx,y;
for(x=a;x>0;x--)
for(y=110;y>0;y--);
}
⑧ 單片機八個流水燈左右依次點亮
首先,打開proteus,可以看到界面上方有"庫",點開,在庫里選擇做實驗需要的元件。
如圖所示,我們做流水燈實驗所需要的元件,就是紅色方框裡面的元件,一定都要添加進來,要不然實驗就做不成功。
接著,我們按照電路原理圖,排布好元件,連好線,最後的電路如圖所示。
我們把實驗代碼插入單片機,然後點擊界面左下角的開始按鈕,就可以運行電路。
如圖所示,八個流水燈依次點亮。
⑨ 單片機流水燈C語言程序(8個燈,依次點亮每個燈,延時500MS)
單片機流水燈C語言程序的源代碼如下:
#include //51系列單片機定義文件
#define uchar unsigned char //定義無符號字元
#define uint unsigned int //定義無符號整數
void delay(uint); //聲明延時函數
void main(void)
{
uint i;
uchar temp;
while(1)
{
temp=0x01;
for(i=0;i<8;i++) //8個流水燈逐個閃動
{
P1=~temp;
delay(100); //調用延時函數
temp<<=1;
}
temp=0x80;
for(i=0;i<8;i++) //8個流水燈反向逐個閃動
{
P1=~temp;
delay(100); //調用延時函數
temp>>=1;
}
temp=0xFE;
for(i=0;i<8;i++) //8個流水燈依次全部點亮
{
P1=temp;
delay(100); //調用延時函數
temp<<=1;
}
temp=0x7F;
for(i=0;i<8;i++) //8個流水燈依次反向全部點亮
{
P1=temp;
delay(100); //調用延時函數
temp>>=1;
}
void delay(uint t) //定義延時函數
{
register uint bt;
for(;t;t--)
for(bt=0;bt<255;bt++);
}
(9)單片機八位流水燈擴展閱讀
51單片機流水燈的源代碼如下
#include<reg51.h>
#include<intrins.h>
voiddelay(inta)
{
inti;
while(a--)for(i=0;i<110;i++);
}
main()
{
inti;
while(1)
{
P0=0xfe;
for(i=0;i<8;i++)
{
P0=_crol_(P0,1);
delay(500);
}
}
}