怎么用80c51单片机编写一个跑马灯程序?
展开全部
* 74HC595 跑马灯演示程序 */
/ */
/******************************************************************/
#include //51芯片管脚定义头文件
#include //内部包含延时函数 _nop_();
#define uchar unsigned char
#define uint unsigned int
uchar code DAT[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
sbit SDATA_595=P1^0; //串行数据输入
sbit SCLK_595 =P1^1; //移位时钟脉冲
sbit RCK_595 =P1^2; //输出锁存器控制脉冲
uchar temp;
/********************************************************/
/* */
/* 延时子程序 */
/* */
/********************************************************/
void delay(int ms)
{
int k;
while(ms--)
{
for(k=0; k<250; k++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
/********************************************************/
/* */
/*将显示数据送入74HC595内部移位寄存器 */
/* */
/********************************************************/
void WR_595(void)
{
uchar j;
for (j=0;j<8;j++)
{
temp=temp<<1;
SDATA_595=CY;
SCLK_595=1; //上升沿发生移位
_nop_();
_nop_();
SCLK_595=0;
}
}
/********************************************************/
/* */
/*将移位寄存器内的数据锁存到输出寄存器并显示 */
/* */
/********************************************************/
void OUT_595(void)
{
RCK_595=0;
_nop_();
_nop_();
RCK_595=1; //上升沿将数据送到输出锁存器
_nop_();
_nop_();
_nop_();
RCK_595=0;
}
/********************************************************/
* */
* 主程序 */
* */
*********************************************************/
main()
{
SCLK_595=0;
RCK_595=1;
while(1)
{
uchar i;
for (i=0; i<8; i++)
{
temp=DAT[i]; //取显示数据
WR_595();
OUT_595();
delay(100);
}
}
}
/ */
/******************************************************************/
#include //51芯片管脚定义头文件
#include //内部包含延时函数 _nop_();
#define uchar unsigned char
#define uint unsigned int
uchar code DAT[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
sbit SDATA_595=P1^0; //串行数据输入
sbit SCLK_595 =P1^1; //移位时钟脉冲
sbit RCK_595 =P1^2; //输出锁存器控制脉冲
uchar temp;
/********************************************************/
/* */
/* 延时子程序 */
/* */
/********************************************************/
void delay(int ms)
{
int k;
while(ms--)
{
for(k=0; k<250; k++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
/********************************************************/
/* */
/*将显示数据送入74HC595内部移位寄存器 */
/* */
/********************************************************/
void WR_595(void)
{
uchar j;
for (j=0;j<8;j++)
{
temp=temp<<1;
SDATA_595=CY;
SCLK_595=1; //上升沿发生移位
_nop_();
_nop_();
SCLK_595=0;
}
}
/********************************************************/
/* */
/*将移位寄存器内的数据锁存到输出寄存器并显示 */
/* */
/********************************************************/
void OUT_595(void)
{
RCK_595=0;
_nop_();
_nop_();
RCK_595=1; //上升沿将数据送到输出锁存器
_nop_();
_nop_();
_nop_();
RCK_595=0;
}
/********************************************************/
* */
* 主程序 */
* */
*********************************************************/
main()
{
SCLK_595=0;
RCK_595=1;
while(1)
{
uchar i;
for (i=0; i<8; i++)
{
temp=DAT[i]; //取显示数据
WR_595();
OUT_595();
delay(100);
}
}
}
展开全部
#include<reg51.h>
#include<intrins.h>
void delayms(unsigned char ms)
{
unsigned char i;
while(ms--)
{
for(i = 0; i < 120; i++);
}
}
main()
{
unsigned char LED;
LED = 0xfe;
P2 = LED;
while(1)
{
delayms(250);
LED = _crol_(LED,1); //循环右移1位,点亮下一个LED 此函数位库函数
P2 = LED;
}
}
#include<intrins.h>
void delayms(unsigned char ms)
{
unsigned char i;
while(ms--)
{
for(i = 0; i < 120; i++);
}
}
main()
{
unsigned char LED;
LED = 0xfe;
P2 = LED;
while(1)
{
delayms(250);
LED = _crol_(LED,1); //循环右移1位,点亮下一个LED 此函数位库函数
P2 = LED;
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
org 0000h
start:
clr a
mov p1,#00h
mov r0,#8
acall led
sjmp start
led:
mov dptr,#tab
movc a,@a+dptr
mov p1,a
acall delay
inc a
djnz r0,led
ret
tab:db 00000001B,00000010b……………………
DELAY:
MOV R7,#250
D1:
MOV R6 ,#250
D2:
DJNZ R6,D2
DJNZ R7,D1
RET
end
start:
clr a
mov p1,#00h
mov r0,#8
acall led
sjmp start
led:
mov dptr,#tab
movc a,@a+dptr
mov p1,a
acall delay
inc a
djnz r0,led
ret
tab:db 00000001B,00000010b……………………
DELAY:
MOV R7,#250
D1:
MOV R6 ,#250
D2:
DJNZ R6,D2
DJNZ R7,D1
RET
end
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询