|
include "reg52.h" //此文件中定義了單片機的一些特殊功能寄存器
#include <intrins.h> //51基本運算(包括_nop_空函數)
typedef unsigned int u16; //對數據類型進行聲明定義
typedef unsigned char u8;
sbit k3=P3^2; //定義按鍵K3
sbit led=P2^0;
u8 t=1;
u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//顯示0~F的值
sbit RR=P0^0;//red紅燈
sbit GG=P0^1;//green綠燈
sbit BB=P0^2;//blue藍燈
u8 r,g,b,min,max;
void ledout(unsigned char r,g,b)
{ unsigned char n;
for (n=0;n<255;n++)
{
if(g>n)
GG=0;
else
GG=1;
if(b>n)
BB=0;
else
BB=1;
if(r>n)
RR=0;
else
RR=1;
_nop_();
_nop_();
_nop_();
}
}
void Colors(u16 c)
{
if(c==1)
{
ledout(255,0,0);
}
if(c==2)
{
ledout(250,250,0);
}
if(c==3)
{
ledout(0,250,250);
}
if(c==4)
{
ledout(250,0,250);
}
if(c==5)
{
ledout(0,250,0);
}
if(c==6)
{
ledout(0,0,250);
}
if(c==7)
{
u8 i;
min=5;
max=250;
r=min;
g=min;
for (i=min;i<=max;i++)
{
b=max+min-i-1;
ledout(r,g,b);
if(t!=7)
{
return ;
}
}
for (i=min;i<=max;i++)
{
g=i;
ledout(r,g,b);
if(t!=7)
{
return ;
}
}
for (i=min;i<=max;i++)
{
r=max+min-i-1;
ledout(r,g,b);
if(t!=7)
{
return ;
}
}
for (i=min;i<=max;i++)
{
b=i;
ledout(r,g,b);
if(t!=7)
{
return ;
}
}
for (i=min;i<=max;i++)
{
g=max+min-i-1;
ledout(r,g,b);
if(t!=7)
{
return ;
}
}
for (i=min;i<=max;i++)
{
r=i;
ledout(r,g,b);
if(t!=7)
{
return ;
}
}
}
}
/*******************************************************************************
* 函 數 名 : delay
* 函數功能 : 延時函數,i=1時,大約延時10us
*******************************************************************************/
void delay(u16 i)
{
while(i--);
}
/*******************************************************************************
* 函 數 名 : Int1Init()
* 函數功能 : 設置外部中斷1
* 輸 入 : 無
* 輸 出 : 無
*******************************************************************************/
void Int0Init()
{
//設置INT0
IT0=1;//跳變沿出發方式(下降沿)
EX0=1;//打開INT0的中斷允許。
EA=1;//打開總中斷
}
/*******************************************************************************
* 函 數 名 : main
* 函數功能 : 主函數
* 輸 入 : 無
* 輸 出 : 無
*******************************************************************************/
void main()
{
Int0Init(); // 設置外部中斷0
while(1)
{
P1=~smgduan[t];
Colors(t);
EA=1;
}
}
/*******************************************************************************
* 函 數 名 : Int0() interrupt 0
* 函數功能 : 外部中斷0的中斷函數
* 輸 入 : 無
* 輸 出 : 無
*******************************************************************************/
void Int0() interrupt 0 //外部中斷0的中斷函數
{
delay(1000); //延時消抖
if(k3==0)
{
led=~led;
if(t<7)
{
t=t+1;
}
else
{
t=1;
}
}
while(!k3) ;
}
|
-
-
main.c.rar
2017-10-1 09:12 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
1.13 KB, 下載次數: 15, 下載積分: 黑幣 -5
評分
-
查看全部評分
|