欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
16X32雙色點陣全亮的單片機程序
[打印本頁]
作者:
liuliujia
時間:
2017-12-9 16:38
標題:
16X32雙色點陣全亮的單片機程序
16X32雙色點陣屏的原理圖與相關資料到這里:
http://m.raoushi.com/bbs/dpj-101081-1.html
單片機源程序如下:
/***********************************************************
實現功能:紅綠全亮
可以根據下面的接口用杜邦線與點陣連接即可測試
單片機:STC89C52 或者其他型號都可以
晶振無要求
*************************************************************/
/*
標準08接口點陣屏管腳定義
GND A ABCD是行掃描信號
GND B
GND C
OE D OE是屏的使能端 低有效
R1 G1 上半屏綠色
R2 G2 下半屏綠色 本板由于沒有使用R2 G2,故把這兩腳改接為VCC,方便大家接線。
GND STR 鎖存信號
GND SCK 時鐘信號
*/
/*接口說明*/
//A B C D 是138行掃描信號
// SCK 是595的移位信號
// STR 是595的鎖存信號
// OE 是屏的使能端 可以控制亮度
// R 是紅色信號線
// G 是綠色信號線
// 本板由于沒有使用R2 G2,故把這兩腳改接為VCC,方便大家接線。
#include<stc89c51rc.h>
#define uchar unsigned char
#define uint unsigned int
#define light 3 //定義亮度
/*****************************接口定義********************************/
sbit SHCP=P2^7;//595的移位信號
sbit STCP=P4^1;//是595的鎖存信號 /*如果用的是普通單片機 沒有P4.1口 請改為其他口*/
sbit SDA_R=P2^3;//紅數據
sbit SDA_G=P2^5;//綠數據
sbit OE=P0^4;//輸出使能
sbit IA=P4^0;//行控制線A /*如果用的是普通單片機 沒有P4.0口 請改為其他口*/
sbit IB=P2^0;//行控制線B
sbit IC=P2^1;//行控制線C
sbit ID=P2^2;//行控制線D
sbit Speek=P3^5;//蜂鳴器
/********************************************************************/
#define scan0 {IA=0;IB=0;IC=0;ID=0;}
#define scan1 {IA=1;IB=0;IC=0;ID=0;}
#define scan2 {IA=0;IB=1;IC=0;ID=0;}
#define scan3 {IA=1;IB=1;IC=0;ID=0;}
#define scan4 {IA=0;IB=0;IC=1;ID=0;}
#define scan5 {IA=1;IB=0;IC=1;ID=0;}
#define scan6 {IA=0;IB=1;IC=1;ID=0;}
#define scan7 {IA=1;IB=1;IC=1;ID=0;}
#define scan8 {IA=0;IB=0;IC=0;ID=1;}
#define scan9 {IA=1;IB=0;IC=0;ID=1;}
#define scan10 {IA=0;IB=1;IC=0;ID=1;}
#define scan11 {IA=1;IB=1;IC=0;ID=1;}
#define scan12 {IA=0;IB=0;IC=1;ID=1;}
#define scan13 {IA=1;IB=0;IC=1;ID=1;}
#define scan14 {IA=0;IB=1;IC=1;ID=1;}
#define scan15 {IA=1;IB=1;IC=1;ID=1;}
uchar Move,Speed,line; //(移位 速度 行 ) 定義
uint zimuo; //字模計數器
uint uiAllData;
void DelayMs(void); // 延時
void in_data(); // 調整移動數據
void rxd_data(); // 發送移動數據
/******************************************************/
/*****不影響其他端口的掃描*************************/
void scan(unsigned char Value)
{switch(Value)
{case 0: scan0;break;
case 1: scan1;break;
case 2: scan2;break;
case 3: scan3;break;
case 4: scan4;break;
case 5: scan5;break;
case 6: scan6;break;
case 7: scan7;break;
case 8: scan8;break;
case 9: scan9;break;
case 10:scan10;break;
case 11:scan11;break;
case 12:scan12;break;
case 13:scan13;break;
case 14:scan14;break;
case 15:scan15;break;
default:break;
}
}
/***********************************************************************************
函數名:毫秒級CPU延時函數
調 用:DELAY_MS (?);
參 數:1~65535(參數不可為0)
返回值:無
結 果:占用CPU方式延時與參數數值相同的毫秒時間
備 注:應用于1T單片機時i<600,應用于12T單片機時i<125
/************************************************************************************/
void DELAY_US(int num) //延時函數
{while(--num);
}
/*************************************/
void Beep_key(void) //揚聲器--按鍵音
{
unsigned char a ; //定義變量用于發聲的長度設置
for(a=150; a>0; a--) //聲音的長度
{
Speek=0; //取反 揚聲器
DELAY_US(350); //音調設置延時
}
Speek=1; //音樂結束后揚聲器拉高關閉
}
/**************************延時***********************/
void DelayMs(void)
{
uchar TempCyc;
for(TempCyc=250;TempCyc>1;TempCyc--)
{;}
}
/********************************************/
/*主函數*/
void main()
{
P3M0=0X20;
P3M1=0X00;
Beep_key();
Speek=1;
while(1)
{
while(Move<16) //數據移位。
{
for(Speed=0;Speed<3;Speed++) //移動速度控制
{
for(line=0;line<16;line++)
{
rxd_data(); //裝載移動數據
scan(line); //輸出行掃描
STCP=1;//鎖存
STCP=0;
OE=0;
DelayMs(); //延時,等待一段時間,讓這列顯示的內容在人眼內產生“視覺暫留”現象。
OE=1;
DelayMs(); //亮度控制在70% 以免過大電流
}
}
Move++; //移動一步
}
Move=0;
//zimuo=zimuo+32; //換下一個字
}
}
/***********************發送移動的數據****************************/
void rxd_data(void) //串行發送數據
{
uchar s;
uchar temp,k;
for(s=0;s<4;s++) //發送4字節數據
{
for(k=0;k<8;k++)//一個字節8位 發送給595
{
SHCP=0; //上升沿移位595
SDA_R=SDA_G=0;//通過IO口送一個位給 595
temp=temp>>1; //字節移位 準備送下一位
SHCP=1;
}
}
}
復制代碼
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1