89s51单片机控制9个彩灯的循环变化

花样不限!不要超过10个就好,硬件电路已经做好了!就是编程不知道怎么弄!想用查表做!

/*单片机综合演示 */
#include <reg51.h>
#include<absacc.h>
/************共阳数码管*************/
unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
/****************定义全局变量*****************/
int keyval; //按键值
/********端口定义************/
sfr key=0xb0;//定义键盘端口P3
sbit s4=P3^5;
sbit s3=P3^4;
sbit s2=P3^3;
sbit s1=P3^2;
/************
/******************
LED闪动延时
*******************/
void leddelay(void)
{
unsigned char i,j;
for(i=0;i<255;i++)
for(j=0;j<255;j++)
;
}
/*****
LED流水灯
***************/
void ledflow(void)
{
unsigned char i;
unsigned char temp;
temp=0x01//赋初值给temp只有一位为1
for(i=0;i<8;i++)
{
P1=~temp;//将temp取反送给P1
leddelay();
temp=temp<<1;//左移一位
}
}
/********************************************
函数主程序

***************************************************/
void main(void)
{
keyval=0;//按键值清零
key=0xff;//按键置输入状态
P2=0xff;//熄灭所有数码管
/**************************************定时器初始化****************/
EA=1;//中断总允许
ET0=1; //T0 中断使能
ET1=1; //T1中断使能
TMOD=0x11;//定时器工作方式1
TH0=-10000/256;//定时器T0高4位赋值
TL0=-10000%256;//定时器T0低4位赋值
TH1=-100/256; //定时器T1高4位赋值
TL1=-100%256; //定时器T1低4位赋值
TR0=1;// 开TR0中断,启动定时器
TR1=1; // 开TR1中断,启动定时器
while(1)//主循环
{
display(keyval); //显示功能号
if(kayval==1) //是否功能1
if(kayval==2) //是否功能2
ledflow();// 调用LED流水灯
if(kayval==3) //是否功能3
if(kayval==4) //是否功能1
display(keyval);
}
}
/*****************************************
函数:中断服务程序T1
*****************************************/
void intserv3(void)interrupt 3 using 3
{
TR1=0;//关闭定时器1
if((key&0x30)!=0x30)//判断是否有按键按下
delay();
if((key&0x30)!=0x30)//再次判断是否有按键按下
{
if(s1==0)//s1按下
keyval=1;
if(s2==0)
keyval=2;
if(s3==0)
keyval=3;
if(s4==0)
keyval=4;
}
TR1=1;//启动定时器T1
}
这是我以前写的,其中就有LED灯的控制,流水灯等,也可以每次让他跳两位,等等吧,你参考一下吧,有ji部分你是用不到的
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-04-11
给你推荐个网站protues,那里面有很多你需要的例子。

89s51单片机控制9个彩灯的循环变化
\/*单片机综合演示 *\/ include <reg51.h> include<absacc.h> \/***共阳数码管***\/ unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};\/***定义全局变量***\/ int keyval; \/\/按键值 \/***端口定义***\/ sfr key=0xb0;\/\/定义键盘端口P3 sbit s4=P...

通过89s51单片机实现交通灯
通过89s51单片机实现交通灯东西红灯亮南北绿灯亮15s,东西红灯亮南北黄灯闪烁5s,东西绿灯亮南北红灯亮15s,东西等闪烁南北红等亮5s的循环控制点亮,选用单片机I\/O口的线控制各盏灯。... 通过89s51单片机实现交通灯东西红灯亮南北绿灯亮15s,东西红灯亮南北黄灯闪烁5s,东西绿灯亮南北红灯亮15s,东西等闪烁南北红等亮5s的循...

用89S52单片机构件建一个彩灯控制系统,系统用P1口外接8个发光二极管...
用89S52单片机构件建一个彩灯控制系统,系统用P1口外接8个发光二极管,没有键按下时,8支彩灯每隔0.5s全亮全灭一次。按K1时,8支彩灯从左至右循环点亮。按K2时,8支彩灯从右至左循环点亮。按K3时,8支彩灯先右循环点亮后左循环点亮。同时按下K1和K2时,8支彩灯从中间向外循环点亮。同时按下K...

帮忙解释下这个单片机电子钟原理图,谢谢。5分!
这是一个用单片机89S51控制来显示时间的,89S51内部一直在计数,数据通过74hc138和74ls47相连的IO输出。74HC138和74LS47都为译码驱动器。调整时间是由89S51内部程序完成的。你按相应的按钮会进入相应的调整程序。显示部分如为7段数码管,那就是动态扫描完成的。显示屏如为段式液晶,那扫描的电压就要低电,...

AT89S51单片机的内部资源有哪些,分别是怎么使用的?
单片机上除了刚才用掉的5个管脚,还有35个,我们将这个LED和1脚相连。(见图1,其中R1是限流电阻) 按照这个图的接法,当1脚是高电平时,LED不亮,只有1脚是低电平时,LED才发亮。因此要1脚我们要能够控制,也就是说,我们要能够让1管脚按要求变为高或低电平。即然我们要控制1脚,就得给它起个名字,总不能就叫它...

如何简捷地判断单片机89c51\/89s51正在工作
我的习惯是 用一个IO口,控制一个LED灯按照一定频率闪烁。这个灯在上电后就开始闪烁,不受其他任何过程影响, 除非MCU没有运行,否则它就一直闪烁

用89s51设计1个记录时间间隔并显示的电路图
40个引脚按引脚功能大致可分为4个种类:电源、时钟、控制和I\/O引脚。 ⒈ 电源: ⑴ VCC - 芯片电源,接+5V; ⑵ VSS - 接地端; 注:用万用表测试单片机引脚电压一般为0v或者5v,这是标准的TTL电平。但有时候在单片机程序正在工作时候测试结果并不是这个值而是介于0v-5v之间,其实这是万用表的响应速度没这么...

怎样设计一个用ADE7755和用AT89S51的单片机设计出一个电能表?_百度知 ...
掉电保护电路,用 AT89S52的 P1.7输进引脚检测掉电信号,当系统正常工作是 P1.7位高电平,当忽然发生断电时,P1.7变成低电平,采用查询方式检测到 P1.7的变为低电平后,将进进掉电保护程序。电源电路中有个大滤波电容1000uf\/25v,当掉电后能维持系统十多秒的工作时间,确保电能表存储好重要数据。光电隔离电路,在系统...

12M晶振,89S51单片机的一秒延时程序,请高手帮忙
L1:MOV R6,#250 设定中循环次数250,本条指令用时1us,可忽略 L2:MOV R5,#10 设定内循环次数10,本条指令用时1us,可忽略 L3JNZ R5,L3 内循环语句,本条指令用时2us DJNZ R6,L2 中循环语句,本条指令用时2us DJNZ R7,L1 外循环语句,本条指令用时2us RET 本条指令用时1us,可...

9单片机,AT89S51单片机中既可位寻址又可字节寻址的单元是
A20H89s51单片机中可位寻址和字节寻址的范围为20H~2FH,共128位。内部存储器地址为00H~FFH,而00H~7FH低128字节是RAM区,都是字节寻址的。其中权20H~2FH,共16个字节的RAM,即可以位寻址,也可以字节寻址。单片机具有体积小、控制功能强、功耗低、环境适应能力强、扩展灵活和使用方便等优点,用...

相似回答
大家正在搜