proteus 基于51单片机的红绿灯项目
用最简单的语句来实现一个小型51单片机项目的实现,适用于初学者。
包含模块:数字显示和倒计时模块、红绿灯模块。
数字显示模块:
void delay_ms(uint x)
{
uint i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
void displayns5()
{
int i,k;
for(i=4;i>=0;i--)
{
for(k=0;k<=5;k++)
{
LED1=0;
P0=shuzi[0];
LED1=1;
delay_ms(50);
LED1=0;
LED2=0;
P0=shuzi[i];
LED2=1;
delay_ms(50);
LED2=0;
delay_ms(1);
ns_yellow=0;
delay_ms(500);
ns_yellow=1;
}
}
}
void displayew5()
{
int i,k;
for(i=4;i>=0;i--)
{
for(k=0;k<=10;k++)
{
LED1=0;
P0=shuzi[0];
LED1=1;
delay_ms(50);
LED1=0;
LED2=0;
P0=shuzi[i];
LED2=1;
delay_ms(50);
LED2=0;
delay_ms(1);
ew_yellow=0;
delay_ms(500);
ew_yellow=1;
}
}
}
void display25()
{
int i,j,k;
for(j=2;j>=0;j--)
{
if(j==0){
for(i=9;i>=5;i--)
{
for(k=0;k<=10;k++)
{
P0=shuzi[j];
LED1=1;
delay_ms(50);
LED1=0;
P0=shuzi[i];
LED2=1;
delay_ms(50);
LED2=0;
delay_ms(1);
}
}
}
if(j>0)
{
for(i=9;i>=0;i--)
{
for(k=0;k<=10;k++)
{
P0=shuzi[j];
LED1=1;
delay_ms(50);
LED1=0;
P0=shuzi[i];
LED2=1;
delay_ms(50);
LED2=0;
}
}
}
}
红绿灯模块:
void alldown()
{
ns_red=0;
ns_green=0;
ns_yellow=0;
ew_red=0;
ew_green=0;
ew_yellow=0;
}
proteus原理图: 总代码图:
#include <reg51.h>
#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
#define uchar unsigned char
#define uint unsigned int
sbit E=P1^0;
sbit W=P1^1;
sbit S=P1^2;
sbit N=P1^3;
sbit LED1=P1^6;
sbit LED2=P1^7;
sbit ns_yellow=P2^0;
sbit ns_red=P2^1;
sbit ns_green=P2^2;
sbit ew_yellow=P2^3;
sbit ew_red=P2^4;
sbit ew_green=P2^5;
uchar code shuzi[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uint djs,js;
void delay_ms(uint x)
{
uint i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
void displayns5()
{
int i,k;
for(i=4;i>=0;i--){
for(k=0;k<=5;k++){
LED1=0;
P0=shuzi[0];
LED1=1;
delay_ms(50);
LED1=0;
LED2=0;
P0=shuzi[i];
LED2=1;
delay_ms(50);
LED2=0;
delay_ms(1);
ns_yellow=0;
delay_ms(500);
ns_yellow=1;
}}
}
void displayew5()
{
int i,k;
for(i=4;i>=0;i--){
for(k=0;k<=10;k++){
LED1=0;
P0=shuzi[0];
LED1=1;
delay_ms(50);
LED1=0;
LED2=0;
P0=shuzi[i];
LED2=1;
delay_ms(50);
LED2=0;
delay_ms(1);
ew_yellow=0;
delay_ms(500);
ew_yellow=1;
}}
}
void display25(){
int i,j,k;
for(j=2;j>=0;j--){
if(j==0){
for(i=9;i>=5;i--){
for(k=0;k<=10;k++){
P0=shuzi[j];
LED1=1;
delay_ms(50);
LED1=0;
P0=shuzi[i];
LED2=1;
delay_ms(50);
LED2=0;
delay_ms(1);
}}}
if(j>0){
for(i=9;i>=0;i--){
for(k=0;k<=10;k++){
P0=shuzi[j];
LED1=1;
delay_ms(50);
LED1=0;
P0=shuzi[i];
LED2=1;
delay_ms(50);
LED2=0;}}}}
}
void alldown()
{ns_red=0;ns_green=0;ns_yellow=0;ew_red=0;ew_green=0;ew_yellow=0;
}
void main()
{
while(1)
{
pthread_t tid;
pthread_create(tid,NULL,display25,NULL);
alldown();
ew_green=1;
ns_red=1;
display25();
alldown();
ew_yellow=1;
ns_red=1;
displayew5();
alldown();
ew_red=1;
ns_green=1;
display25();
alldown();
ew_red=1;
ns_yellow=1;
displayns5();
}
}
转送请标明出处,否则禁止转送
|