本文目錄一覽:
- 1、單片機C語言流水燈移位指令
- 2、怎麼用c語言用循環位移法實現流水燈
- 3、為什麼C語言位移可以實現發光二極體的流水燈?
- 4、單片機流水燈C語言程序(8個燈,依次點亮每個燈,延時500MS)
- 5、用c語言編寫流水燈。
單片機C語言流水燈移位指令
//沒有編譯過,大概思路就這樣
#define P_LED P1; //定義到你自己的埠
void main(void)
{
unsigned char circledata=0x01,i=0;
while(1)
{
for(i=0;i4;i++) //顯示範圍 P_LED.0:P_LED3
{
P_LED=circledatai;
Delay_ms(1000);//根據自己的晶振寫延時1S的函數
}
circledata=0xfe;
for(i=3;i=0;i–) //顯示範圍 P_LED.3:P_LED.0
{
P_LED=circledatai;
Delay_ms(1000);//根據自己的晶振寫延時1S的函數
}
}
return;
}
怎麼用c語言用循環位移法實現流水燈
單片機的內容吧。
單片機的一個Port是8位的。
方法1: 移位運算
while (1)
{
led = 0x01;
for (i = 0; i 8; i++)
{
port_2 = led; // 將數值賦值給單片機的Port.
led = led 1; // 左移一位.
}
}
方法2: 乘法運算
while (1)
{
led = 0x01;
for (i = 0; i 8; i++)
{
port_2 = led; // 將數值賦值給單片機的Port.
led = led * 2; // 乘2, 相當於左移1位.
}
}
為什麼C語言位移可以實現發光二極體的流水燈?
每個位代表了一個二極體的引腳。根據單片機外圍電路不同,邏輯高或低電平時,LED會點亮。假設邏輯高電平時LED點亮,如00000001,bit0-7控制led0-7,此時led0點亮,左移一位變為00000010,led0熄滅,led1點亮。
單片機流水燈C語言程序(8個燈,依次點亮每個燈,延時500MS)
1、用精確定時的方法,設置流水燈運行時的時間間隔,延時時間為500MS。
2、#include “reg51.h”首先寫出單片機的頭函數。
3、#include “intrins.h”輸入位移函數。
4、unsigned int count=0,led;定義函數。
5、輸入主函數,定義單片機的埠,寫入延時函數。
6、中斷跳轉,使流水燈運行起來。
用c語言編寫流水燈。
C語言流水燈程序是學習的基礎,一定要搞懂!給你發兩個!
(一)
#includereg51.h //51系列單片機定義文件
#define uchar unsigned char //定義無符號字元
#define uint unsigned int //定義無符號整數
void delay(uint); //聲明延時函數
void main()
{
uint i;
uchar temp;
while(1)
{
temp=0x01;
for(i=0;i8;i++) //8個流水燈逐個閃動
{
P2=~temp;
delay(500); //調用延時函數
temp=1;
}
temp=0x80;
for(i=0;i8;i++) //8個流水燈反向逐個閃動
{
P2=~temp;
delay(500); //調用延時函數
temp=1;
}
temp=0xFE;
for(i=0;i8;i++) //8個流水燈依次全部點亮
{
P2=temp;
delay(500); //調用延時函數
temp=1;
}
temp=0x7F;
for(i=0;i8;i++) //8個流水燈依次反向全部點亮
{
P2=temp;
delay(500); //調用延時函數
temp=1;
}
}
}
void delay(uint a) //延時函數,毫秒級別
{
uint i;
while(–a!=0) //執行空操作循環,其中a為形參,由調用該函數的函數語句提供值
{
for(i=0;i125;i++);//執行當0加到125時,大約會用掉1ms的時間
}
}
(二)
*****************************以下程序均採用12M晶振*****************************************************/
#includereg51.h
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long
sbit p2=P2^0;
void main()
{
TMOD=0x01;
TR0=1;
ET0=1;
EA=1;
while(1)
{
;
}
}
timer0() interrupt 1
{
TH0=0x00;
TL0=0x06;
p2=!p2;
}
(三)
定時流水燈//
#includereg51.h
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long
bit ldelay=0;
void main()
{
uchar led[9]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff};
uchar leda;
TMOD=0x00;
TR0=1;
ET0=1;
EA=1;
while(1)
{
if(ldelay)
{
ldelay=0;
P2=led[leda];
leda++;
if(leda==9)leda=0;
}
}
}
timer2() interrupt 1
{
static uchar t;
TF0=0;
t++;
if(t==10)
{
t=0;
ldelay=1;
}
}
(四)
變速流水燈//
#includereg51.h
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long
bit ldelay=0;
uchar speed=100;
void main()
{
uchar led[9]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff};
uchar leda;
TMOD=0x00;
TR0=1;
ET0=1;
EA=1;
while(1)
{
if(ldelay)
{
ldelay=0;
P2=led[leda];
leda++;
if(leda==9)
{
leda=0;
speed-=10;
if(speed==0)speed=100;
}
}
}
}
timer2() interrupt 1
{
static uchar t;
TF0=0;
t++;
if(t==speed)
{
t=0;
ldelay=1;
}
}
(五)
//每2兩圈改變一次亮度
#includereg51.h
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long
bit ldelay=0;
uchar speeda=30;
uint k=0;
void main()
{
uchar led[9]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff};
uchar leda;
uchar speed[10]={5,80,70,60,50,40,30,20,10,5};
uint i;
uint k;
TMOD=0x00;
TR0=1;
ET0=1;
EA=1;
while(1)
{
if(ldelay)
{
ldelay=0;
P2=led[leda];
leda++;
if(leda==9)
{
leda=0;
k++;
if(k==2){
k=0;
speeda=speed[i];
i++;
if(i==9)i=0;
}
}
}
}
}
timer2() interrupt 1
{
static uchar t;
TF0=0;
t++;
if(t==speeda)
{
t=0;
ldelay=1;
}
}
(六)
//在上面基礎上調燈的亮度(調占空比)
#includereg51.h
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long
bit ldelay=0;
uchar speeda=30;
uint k=0;
uchar scale;
void main()
{
uchar led[9]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff};
uchar leda;
uchar speed[10]={5,80,70,60,50,40,30,20,10,5};
uint i;
uint k;
TMOD=0x00;
TR0=1;
ET0=1;
EA=1;
while(1)
{
if(ldelay==1)
{
ldelay=0;
P2=led[leda];
leda++;
scale++;
if(scale==10)scale=0;
if(leda==9)
{
leda=0;
k++;
if(k==2){
k=0;
speeda=speed[i];
i++;
if(i==9)i=0;
}
}
}
}
}
timer2() interrupt 1
{
static uchar t;
TH0=0x1c;
TL0=0xbf;
TF0=0;
t++;
if(t==speeda)
{
t=0;
ldelay=1;
}
if(scale==10)P2=0;
if(scale==0)P2=1;
}
原創文章,作者:OXFGB,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/330175.html