欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
單片機課程設計~主要是led和點陣顯示方面的東西(附源碼)~
[打印本頁]
作者:
青銅騎士
時間:
2018-6-11 15:57
標題:
單片機課程設計~主要是led和點陣顯示方面的東西(附源碼)~
51單片機的C語言源碼~
顯示效果秀~
大家來一起玩耍吖~
基礎部分最終版
實現功能:
按下獨立按鍵后,分別顯示四種顯示效果,并在靜態數碼管顯示效果編號:
(1)按下k1:乒乓球回彈
(2)按下k2: LED燈1357位和0246位交替亮滅
(3)按下k3: 中心波浪向兩側推出
(4)按下k4:點陣顯示桃心笑臉
接線:
靜態數碼管JP3------P0
數碼管段選J12------P2
點陣J17------P595_A,J18------P595_B
獨立按鍵k1------P1^1
K2------P1^2
K3------P1^3
K4------P1^4
注意:595跳帽要接上,165和JP1302的跳帽要摘去
0.jpg
(39.2 KB, 下載次數: 25)
下載附件
2018-6-11 17:22 上傳
單片機源程序如下:
#include "reg52.h" //此文件中定義了單片機的一些特殊功能寄存器
#include "intrins.h"
typedef unsigned int u16; //對數據類型進行聲明定義
typedef unsigned char u8;
#define GPIO_DIG P0
sbit k1=P1^1;
sbit k2=P1^2;
sbit k3=P1^3;
sbit k4=P1^4;
#define led P2 //將P2口定義為led 后面就可以使用led代替P2口
u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//顯示0~F的值
//--定義使用的IO口--//
sbit SRCLK=P3^6;
sbit R_CLK=P3^5;
sbit SER=P3^4;
//定義LED點陣的位選,也就是類似于數碼管的位選,因為要對其動態掃描操作
//數組前16位和后16位數據正好是相反的,也就是說先讓第3個595輸出低電平,然后再讓第4個595輸出低電平
u8 code ledwei[]=
{
0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,
};
u8 code ledduan1[]=
{
/*-- 表情: 桃心笑臉 --*/
/*-- 宋體12; 此表情下對應的點陣為:寬x高=16x16 --*/
0x00,0x08,0x1C,0x3E,0x7C,0x7C,0x3E,0x1C,
0x08,0x00,0x20,0x70,0xE0,0xE0,0x70,0x20,
0x00,0x04,0x08,0x10,0x20,0x20,0x40,0x41,
0x42,0x41,0x20,0x20,0x10,0x08,0x04,0x00
};
/*******************************************************************************
* 函 數 名 : delay
* 函數功能 : 延時函數,i=1時,大約延時10us
*******************************************************************************/
void delay(u16 i)
{
while(i--);
}
/******************************************************************************
函數功能:第一種LED運行效果 :乒乓球回彈
******************************************************************************/
void firstLedDisplay()
{
u8 i;
led=0x01;
{
for(i=0;i<7;i++) //將led左移一位
{
led=_crol_(led,1);
delay(30000); //大約延時450ms
}
for(i=0;i<7;i++) //將led右移一位
{
led=_cror_(led,1);
delay(30000); //大約延時450ms
}
}
}
/**********************************************
函數功能:LED運行第二種效果:0,2,4,6和1,3,5,7交替亮滅
**********************************************/
void secondLedDisplay()
{
led=0x55;
delay(50000); //大約延時450ms
led=~led;
delay(50000);
}
/*****************************************************
函數功能:LED運行第三種效果:中心波浪向兩側推出
*****************************************************/
void thirdLedDisplay()
{
led=0x18;
delay(50000);
led=0x24;
delay(50000);
led=0x42;
delay(50000);
led=0x81;
delay(50000);
}
/*******************************************************************************
* 函 數 名 : Hc595SendByte(u8 dat1,u8 dat2,u8 dat3,u8 dat4)
* 函數功能 : 通過595發送四個字節的數據
* 輸 入 : dat1:第4個595輸出數值
* * dat2: 第3個595輸出數值
* * dat3:第2個595輸出數值
* * dat4:第1個595輸出數值
* 輸 出 : 無
*******************************************************************************/
void Hc595SendByte(u8 dat1,u8 dat2,u8 dat3,u8 dat4)
{
u8 a;
SRCLK = 1;
R_CLK = 1;
for(a=0;a<8;a++) //發送8位數
{
SER = dat1 >> 7; //從最高位開始發送
dat1 <<= 1;
SRCLK = 0; //發送時序
_nop_();
_nop_();
SRCLK = 1;
}
for(a=0;a<8;a++) //發送8位數
{
SER = dat2 >> 7; //從最高位開始發送
dat2 <<= 1;
SRCLK = 0; //發送時序
_nop_();
_nop_();
SRCLK = 1;
}
for(a=0;a<8;a++) //發送8位數
{
SER = dat3 >> 7; //從最高位開始發送
dat3 <<= 1;
SRCLK = 0; //發送時序
_nop_();
_nop_();
SRCLK = 1;
}
for(a=0;a<8;a++) //發送8位數
{
SER = dat4 >> 7; //從最高位開始發送
dat4 <<= 1;
SRCLK = 0; //發送時序
_nop_();
_nop_();
SRCLK = 1;
}
R_CLK = 0;
_nop_();
_nop_();
R_CLK = 1;
}
void dianZhenDisplay()
{
u8 i;
for(i=0;i<16;i++)
{
Hc595SendByte(~ledwei[i+16],~ledwei[i],ledduan1[16+i],ledduan1[i]);
delay(10);
}
}
/*******************************************************************************
* 函 數 名 : BreakInit()
* 函數功能 : 設置中斷
* 輸 入 : 無
* 輸 出 : 無
*******************************************************************************/
void BreakInit()
{
EA=0;
TMOD=0x01;
TH0=0XFC; //給定時器賦初值,定時1ms
TL0=0X18;
IE=0x82;
TR0=1;//打開定時器
}
/*main()*/
u8 flag = 0 ;
void main()
{
BreakInit();
while(1)
{
switch (flag) {
case 1 :
GPIO_DIG=~smgduan[1];
firstLedDisplay() ;
break ;
case 2 :
GPIO_DIG=~smgduan[2];
secondLedDisplay() ;
break ;
case 3 :
GPIO_DIG=~smgduan[3];
thirdLedDisplay() ;
break ;
case 4 :
GPIO_DIG=~smgduan[4];
dianZhenDisplay() ;
break ;
default :
break ;
}
}
}
/*******************************************************************************
* 函 數 名 : void Timer0() interrupt 1
* 函數功能 : 定時器0中斷函數
* 輸 入 : 無
* 輸 出 : 無
*******************************************************************************/
void Timer0() interrupt 1
{
static u16 i;
TH0=0XFC; //給定時器賦初值,定時1ms
TL0=0X18;
i++;
if(i==100)
{
i=0;
if(k1==0)
{
flag=1;
}
if(k2==0)
{
flag=2;
}
if(k3==0)
{
flag = 3 ;
}
if(k4==0)
{
flag=4;
}
}
}
復制代碼
所有資料51hei提供下載:
基礎部分最終版.docx
(163.52 KB, 下載次數: 14)
2018-6-11 15:56 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
喜羊羊19856
時間:
2018-6-15 00:42
你好,我想問一下led那附近接線的情況是怎么樣的,怎么我接出來的樣式跟你的不一樣
作者:
小胖子迷你版
時間:
2018-6-22 23:44
你好,我想問一下led那附近接線的情況是怎么樣的,怎么我接出來的樣式跟你的不一樣
作者:
小胖子迷你版
時間:
2018-6-22 23:47
點陣不亮
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1