第一个实验—跑马灯

博主想学硬件知识,找到郭天祥《十天学会单片机》视频并跟着做实验。因未买实验板,用Protrus模拟。目标是做万年历,首个实验是跑马灯实验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近想学一些硬件知识,就在网上找到了有关郭天祥的《十天学会单片机》的视频,看着视频做实验。因为没有买实验板,就用Protrus模拟。我的目标是最后做一个万年历。

今天做了一个跑马灯的实验,我的第一个实验大笑

#include<reg52.h>
int c=0,d=7;
void delay()
{
	int i,j;
	for(i=300;i>0;i--)
		for(j=100;j>0;j--);
}

void P1_open()
{
	P1 = 0xFE;
	delay();
	P1 = 0xFc;
	delay();
	P1 = 0xF8;
	delay();
	P1 = 0xF0;
	delay();
	P1 = 0xe0;
	delay();
	P1 = 0xc0;
	delay();
	P1 = 0x80;
	delay();
	P1 = 0;
	delay();
}
void P1_close()
{
	P1 = 0x80;
	delay();
	P1 = 0xc0;
	delay();
	P1 = 0xe0;
	delay();
	P1 = 0xf0;
	delay();
	P1 = 0xf8;
	delay();
	P1 = 0xfc;
	delay();
	P1 = 0xfe;
	delay();
	P1 = 0xff;
	delay();
}
void P1_shan()
{
	P1=0;
	delay();
	P1=255;
	delay();
	P1=0;
	delay();
	P1=255;
	delay();
}
void P1_paomie()
{
	 for(;c<=d;c++)
	{
	   P1=0x01<<c;
	   delay();
	}
}
void main()
{
	P1_open();
	P1_paomie();
	P1_close();
	P1_shan();
}



实现几个灯的轮流闪烁。LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY SHFRT IS PORT (CLK:IN STD_LOGIC; MODE:IN STD_LOGIC; EN:IN STD_LOGIC; RESET:IN STD_LOGIC; LEDG:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END SHFRT; ARCHITECTURE BEHAV OF SHFRT IS TYPE FSM_ST IS(S00,S01,S10,S11,S20,S21,S30,S31,S40,S41,S50,S51,S60,S61,S70,S71,S80,S81,S82); SIGNAL CS,NS:FSM_ST; SIGNAL TEMP:INTEGER RANGE 0 TO 8:=0; SIGNAL REG:STD_LOGIC_VECTOR(7 DOWNTO 0):=(OTHERS=>'0'); BEGIN REG1:PROCESS(CLK,RESET) BEGIN IF RESET='1' THEN CS<=S00; ELSIF CLK'EVENT AND CLK='1' THEN CS<=NS; END IF; END PROCESS; PROCESS(MODE,RESET) BEGIN IF RESET='1' THEN TEMP<=0; ELSIF MODE'EVENT AND MODE='1' THEN IF TEMP<=8 THEN TEMP<=TEMP+1; ELSE TEMP<=0; END IF; END IF; END PROCESS; REG2:PROCESS(CS,TEMP,REG) BEGIN CASE CS IS WHEN S00=>NS<=S01; WHEN S01=> IF TEMP=0 THEN NS<=S01; ELSE NS<=S10; END IF; WHEN S10=>NS<=S11; WHEN S11=> IF TEMP=1 THEN NS<=S11; ELSE NS<=S20; END IF; WHEN S20=>NS<=S21; WHEN S21=> IF TEMP=2 THEN NS<=S21; ELSE NS<=S30; END IF; WHEN S30=>NS<=S31; WHEN S31=> IF TEMP=3 THEN NS<=S31; ELSE NS<=S40; END IF; WHEN S40=>NS<=S41; WHEN S41=> IF TEMP=4 THEN NS<=S41; ELSE NS<=S40; END IF; WHEN S50=>NS<=S51; WHEN S51=> IF TEMP=5 THEN NS<=S51; ELSE NS<=S60; END IF; WHEN S60=>NS<=S61; WHEN S61=> IF TEMP=6 THEN NS<=S61; ELSE NS<=S70; END IF; WHEN S70=>NS<=S71; WHEN S71=> IF TEMP=7 THEN NS<=S71; ELSE NS<=S80; END IF; WHEN S80=>NS<=S81; WHEN S81=> IF TEMP=8 THEN IF REG="01100000" THEN NS<=S82; ELSE NS<=S81; END IF; ELSE NS<=S00; END IF; WHEN S82=> IF TEMP=8 THEN IF REG="00000110" THEN NS<=S81; ELSE NS<=S82; END IF; ELSE NS<=S00; END IF; WHEN OTHERS=>NS<=S00; END CASE; END PROCESS; REG3:PROCESS(CLK,CS) BEGIN IF CLK'EVENT AND CLK='1' THEN CASE CS IS WHEN S00=>REG<=(OTHERS=>'0'); WHEN S01=>REG<=NOT REG; WHEN S10=>REG<="10101010"; WHEN S01=>REG<=NOT REG; WHEN S20=>REG<="00000011"; WHEN S21=> REG(7 DOWNTO 1)<=REG(6 DOWNTO 0); REG(0)<=REG(7); WHEN S30=>REG<="1100000"; WHEN S31=> REG(6 DOWNTO 0)<=REG(7 DOWNTO 1); REG(7)<=REG(0); WHEN S40=>REG<="00000001"; WHEN S41=> REG(7 DOWNTO 1)<=REG(6 DOWNTO 0); WHEN S50=>REG<="10000000"; WHEN S51=> REG(6 DOWNTO 0)<=REG(7 DOWNTO 1); WHEN S60=>REG<="10000001"; WHEN S61=> REG(3 DOWNTO 1)<=REG(2 DOWNTO 0); REG(0)<=REG(3); REG(6 DOWNTO 4)<=REG(7 DOWNTO 5); REG(7)<=REG(4); WHEN S70=>REG<="00011000"; WHEN S71=> REG(2 DOWNTO 0)<=REG(3 DOWNTO 1); REG(3)<=REG(0); REG(7 DOWNTO 5)<=REG(6 DOWNTO 4); REG(4)<=REG(7); WHEN S80=>REG<="00000011"; WHEN S81=> REG(7 DOWNTO 1)<=REG(6 DOWNTO 0); REG(0)<=REG(7); WHEN S82=> REG(6 DOWNTO 0)<=REG(7 DOWNTO 1); REG(7)<=REG(0); WHEN OTHERS=>REG<=(OTHERS=>'0'); END CASE; END IF; END PROCESS; LEDG<=REG WHEN EN='1' ELSE (OTHERS=>'0'); END ARCHITECTURE BEHAV;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值