程式名: LED屏流動基礎程式
撰寫人: 阿當
撰寫時間: 2018年11月19日
硬體支持: STC12C5A60S2 外部12MHZ晶振
介面說明:
修改日志:
/*********************************************************************************************
說明:
使用PWM方式調整LED的亮滅周期,達到亮度變化。
用點掃描方式,顯示漢字,16X16點,
/*********************************************************************************************/
#include <STC12C5A60S2.H> //STC頭檔案
unsigned char DY_PWM; //每個點的顯示時間,與delay程式配合。
/*********************************************************************************************/
sbit DY_LED1_H1 =P0 ^ 0; //設定LED點陣屏連接的I/O口
sbit DY_LED1_H2 =P0 ^ 1; //設定LED點陣屏連接的I/O口
sbit DY_LED1_H3 =P0 ^ 2; //設定LED點陣屏連接的I/O口
sbit DY_LED1_H4 =P0 ^ 3; //設定LED點陣屏連接的I/O口
sbit DY_LED1_H5 =P0 ^ 4; //設定LED點陣屏連接的I/O口
sbit DY_LED1_H6 =P0 ^ 5; //設定LED點陣屏連接的I/O口
sbit DY_LED1_H7 =P0 ^ 6; //設定LED點陣屏連接的I/O口
sbit DY_LED1_H8 =P0 ^ 7; //設定LED點陣屏連接的I/O口
sbit DY_LED2_H1 =P1 ^ 0; //設定LED點陣屏連接的I/O口
sbit DY_LED2_H2 =P1 ^ 1; //設定LED點陣屏連接的I/O口
sbit DY_LED2_H3 =P1 ^ 2; //設定LED點陣屏連接的I/O口
sbit DY_LED2_H4 =P1 ^ 3; //設定LED點陣屏連接的I/O口
sbit DY_LED2_H5 =P1 ^ 4; //設定LED點陣屏連接的I/O口
sbit DY_LED2_H6 =P1 ^ 5; //設定LED點陣屏連接的I/O口
sbit DY_LED2_H7 =P1 ^ 6; //設定LED點陣屏連接的I/O口
sbit DY_LED2_H8 =P1 ^ 7; //設定LED點陣屏連接的I/O口
sbit DY_LED1_L1 =P2 ^ 0; //設定LED點陣屏連接的I/O口
sbit DY_LED1_L2 =P2 ^ 1; //設定LED點陣屏連接的I/O口
sbit DY_LED1_L3 =P2 ^ 2; //設定LED點陣屏連接的I/O口
sbit DY_LED1_L4 =P2 ^ 3; //設定LED點陣屏連接的I/O口
sbit DY_LED1_L5 =P2 ^ 4; //設定LED點陣屏連接的I/O口
sbit DY_LED1_L6 =P2 ^ 5; //設定LED點陣屏連接的I/O口
sbit DY_LED1_L7 =P2 ^ 6; //設定LED點陣屏連接的I/O口
sbit DY_LED1_L8 =P2 ^ 7; //設定LED點陣屏連接的I/O口
sbit DY_LED1_L9 =P3 ^ 0; //設定LED點陣屏連接的I/O口
sbit DY_LED1_L10 =P3 ^ 1; //設定LED點陣屏連接的I/O口
sbit DY_LED1_L11 =P3 ^ 2; //設定LED點陣屏連接的I/O口
sbit DY_LED1_L12 =P3 ^ 3; //設定LED點陣屏連接的I/O口
sbit DY_LED1_L13 =P3 ^ 4; //設定LED點陣屏連接的I/O口
sbit DY_LED1_L14 =P3 ^ 5; //設定LED點陣屏連接的I/O口
sbit DY_LED1_L15 =P3 ^ 6; //設定LED點陣屏連接的I/O口
sbit DY_LED1_L16 =P3 ^ 7; //設定LED點陣屏連接的I/O口
sbit DY_BEEP =P1 ^ 0; //揚聲器
sbit DY_18B20 =P2 ^ 1; //溫度傳感器
sbit DY_KEY =P2 ^ 2; //按鍵
sbit DY_POWER =P2 ^ 0; //電源監測
#define DY_P0M1SET 0x00 //設定I/O口作業方式//00000000
#define DY_P0M0SET 0xff //設定I/O口作業方式//11010011
#define DY_P1M1SET 0x00 //設定I/O口作業方式//00000000
#define DY_P1M0SET 0xff //設定I/O口作業方式//00101000
#define DY_P2M1SET 0x00 //設定I/O口作業方式//00000000
#define DY_P2M0SET 0x00 //設定I/O口作業方式//01011000
#define DY_P3M1SET 0x00 //設定I/O口作業方式//00000000
#define DY_P3M0SET 0x00 //設定I/O口作業方式//10010100
#define DY_P4M1SET 0x00 //設定I/O口作業方式//00000000
#define DY_P4M0SET 0x00 //設定I/O口作業方式//11100000
/**********************************************************************************************/
unsigned char code SPEED[]={//顯示“SPEED”即速度設定字樣陣列用從上到下從左到右縱向8點下高位
0x00,0x00,0x00,0x00,0xF8,0x07,0xF0,0x03,
0x10,0x02,0x10,0x02,0x10,0x02,0xFF,0xFF,//"中",
0xFE,0x7F,0x10,0x02,0x10,0x02,0x10,0x02,
0xF0,0x07,0xF8,0x03,0x10,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0xFF,0xFF,0xFE,0x7F,
0x02,0x50,0x92,0x50,0x92,0x50,0xF2,0x5F,//"國",
0xF2,0x5F,0x92,0x53,0xDA,0x5E,0x92,0x54,
0x02,0x50,0xFE,0xFF,0xFF,0x7F,0x02,0x00,
0x00,0x00,0x00,0x10,0x80,0x10,0x80,0x08,
0x88,0x0C,0x88,0x06,0x88,0x03,0xFF,0x7F,
0xFE,0xFF,0xC8,0xC8,0xE8,0xC8,0xB8,0xCC,//"老",
0x9C,0xF6,0xC8,0x44,0x80,0x00,0x00,0x00,
0x00,0x00,0x00,0x84,0x00,0x84,0x00,0x44,
0xFE,0x77,0xFC,0x3F,0x24,0x14,0x24,0x04,//"兵",
0x26,0x04,0x22,0x04,0xE3,0x0F,0xE3,0x17,
0x32,0x74,0x20,0xE4,0x00,0x46,0x00,0x04
};
/*********************************************************************************************/
void delay (unsigned int a){ // 0.1ms延時程式(12MHz 10倍于51單片機速度時)
unsigned int i;
while( --a != 0){
for(i = 0; i < 1; i++);
}
}
/*********************************************************************************************/
void dis_off (void){
P0 = ~DY_P0M0SET; //關所有顯示
P1 = ~DY_P1M0SET;
P2 = ~DY_P2M0SET;
P3 = ~DY_P3M0SET;
P4 = ~DY_P4M0SET;
delay(20-DY_PWM);
}
/*********************************************************************************************/
void displayLL1 (unsigned char d,c){ //第1列橫向顯示程式
unsigned char i;
i = d & 0x01;
if(i == 0x01){ // 第一屏的8列
DY_LED1_H1 = 1;DY_LED1_L1 = 0;delay(DY_PWM);dis_off();}
i = d & 0x02;
if(i == 0x02){
DY_LED1_H2 = 1;DY_LED1_L1 = 0;delay(DY_PWM);dis_off();}
i = d & 0x04;
if(i == 0x04){
DY_LED1_H3 = 1;DY_LED1_L1 = 0;delay(DY_PWM);dis_off();}
i = d & 0x08;
if(i == 0x08){
DY_LED1_H4 = 1;DY_LED1_L1 = 0;delay(DY_PWM);dis_off();}
i = d & 0x10;
if(i == 0x10){
DY_LED1_H5 = 1;DY_LED1_L1 = 0;delay(DY_PWM);dis_off();}
i = d & 0x20;
if(i == 0x20){
DY_LED1_H6 = 1;DY_LED1_L1 = 0;delay(DY_PWM);dis_off();}
i = d & 0x40;
if(i == 0x40){
DY_LED1_H7 = 1;DY_LED1_L1 = 0;delay(DY_PWM);dis_off();}
i = d & 0x80;
if(i == 0x80){
DY_LED1_H8 = 1;DY_LED1_L1 = 0;delay(DY_PWM);dis_off();}
i = c & 0x01;
if(i == 0x01){ // 第二屏的8列
DY_LED2_H1 = 1;DY_LED1_L1 = 0;delay(DY_PWM);dis_off();}
i = c & 0x02;
if(i == 0x02){
DY_LED2_H2 = 1;DY_LED1_L1 = 0;delay(DY_PWM);dis_off();}
i = c & 0x04;
if(i == 0x04){
DY_LED2_H3 = 1;DY_LED1_L1 = 0;delay(DY_PWM);dis_off();}
i = c & 0x08;
if(i == 0x08){
DY_LED2_H4 = 1;DY_LED1_L1 = 0;delay(DY_PWM);dis_off();}
i = c & 0x10;
if(i == 0x10){
DY_LED2_H5 = 1;DY_LED1_L1 = 0;delay(DY_PWM);dis_off();}
i = c & 0x20;
if(i == 0x20){
DY_LED2_H6 = 1;DY_LED1_L1 = 0;delay(DY_PWM);dis_off();}
i = c & 0x40;
if(i == 0x40){
DY_LED2_H7 = 1;DY_LED1_L1 = 0;delay(DY_PWM);dis_off();}
i = c & 0x80;
if(i == 0x80){
DY_LED2_H8 = 1;DY_LED1_L1 = 0;delay(DY_PWM);dis_off();}
}
/*********************************************************************************************/
void displayLL2 (unsigned char d,c){ //第2列橫向顯示程式
unsigned char i;
i = d & 0x01;
if(i == 0x01){ // 第一屏的8列
DY_LED1_H1 = 1;DY_LED1_L2 = 0;delay(DY_PWM);dis_off();}
i = d & 0x02;
if(i == 0x02){
DY_LED1_H2 = 1;DY_LED1_L2 = 0;delay(DY_PWM);dis_off();}
i = d & 0x04;
if(i == 0x04){
DY_LED1_H3 = 1;DY_LED1_L2 = 0;delay(DY_PWM);dis_off();}
i = d & 0x08;
if(i == 0x08){
DY_LED1_H4 = 1;DY_LED1_L2 = 0;delay(DY_PWM);dis_off();}
i = d & 0x10;
if(i == 0x10){
DY_LED1_H5 = 1;DY_LED1_L2 = 0;delay(DY_PWM);dis_off();}
i = d & 0x20;
if(i == 0x20){
DY_LED1_H6 = 1;DY_LED1_L2 = 0;delay(DY_PWM);dis_off();}
i = d & 0x40;
if(i == 0x40){
DY_LED1_H7 = 1;DY_LED1_L2 = 0;delay(DY_PWM);dis_off();}
i = d & 0x80;
if(i == 0x80){
DY_LED1_H8 = 1;DY_LED1_L2 = 0;delay(DY_PWM);dis_off();}
i = c & 0x01;
if(i == 0x01){ // 第二屏的8列
DY_LED2_H1 = 1;DY_LED1_L2 = 0;delay(DY_PWM);dis_off();}
i = c & 0x02;
if(i == 0x02){
DY_LED2_H2 = 1;DY_LED1_L2 = 0;delay(DY_PWM);dis_off();}
i = c & 0x04;
if(i == 0x04){
DY_LED2_H3 = 1;DY_LED1_L2 = 0;delay(DY_PWM);dis_off();}
i = c & 0x08;
if(i == 0x08){
DY_LED2_H4 = 1;DY_LED1_L2 = 0;delay(DY_PWM);dis_off();}
i = c & 0x10;
if(i == 0x10){
DY_LED2_H5 = 1;DY_LED1_L2 = 0;delay(DY_PWM);dis_off();}
i = c & 0x20;
if(i == 0x20){
DY_LED2_H6 = 1;DY_LED1_L2 = 0;delay(DY_PWM);dis_off();}
i = c & 0x40;
if(i == 0x40){
DY_LED2_H7 = 1;DY_LED1_L2 = 0;delay(DY_PWM);dis_off();}
i = c & 0x80;
if(i == 0x80){
DY_LED2_H8 = 1;DY_LED1_L2 = 0;delay(DY_PWM);dis_off();}
}
/*********************************************************************************************/
void displayLL3 (unsigned char d,c){ //第3列橫向顯示程式
unsigned char i;
i = d & 0x01;
if(i == 0x01){ // 第一屏的8列
DY_LED1_H1 = 1;DY_LED1_L3 = 0;delay(DY_PWM);dis_off();}
i = d & 0x02;
if(i == 0x02){
DY_LED1_H2 = 1;DY_LED1_L3 = 0;delay(DY_PWM);dis_off();}
i = d & 0x04;
if(i == 0x04){
DY_LED1_H3 = 1;DY_LED1_L3 = 0;delay(DY_PWM);dis_off();}
i = d & 0x08;
if(i == 0x08){
DY_LED1_H4 = 1;DY_LED1_L3 = 0;delay(DY_PWM);dis_off();}
i = d & 0x10;
if(i == 0x10){
DY_LED1_H5 = 1;DY_LED1_L3 = 0;delay(DY_PWM);dis_off();}
i = d & 0x20;
if(i == 0x20){
DY_LED1_H6 = 1;DY_LED1_L3 = 0;delay(DY_PWM);dis_off();}
i = d & 0x40;
if(i == 0x40){
DY_LED1_H7 = 1;DY_LED1_L3 = 0;delay(DY_PWM);dis_off();}
i = d & 0x80;
if(i == 0x80){
DY_LED1_H8 = 1;DY_LED1_L3 = 0;delay(DY_PWM);dis_off();}
i = c & 0x01;
if(i == 0x01){ // 第二屏的8列
DY_LED2_H1 = 1;DY_LED1_L3 = 0;delay(DY_PWM);dis_off();}
i = c & 0x02;
if(i == 0x02){
DY_LED2_H2 = 1;DY_LED1_L3 = 0;delay(DY_PWM);dis_off();}
i = c & 0x04;
if(i == 0x04){
DY_LED2_H3 = 1;DY_LED1_L3 = 0;delay(DY_PWM);dis_off();}
i = c & 0x08;
if(i == 0x08){
DY_LED2_H4 = 1;DY_LED1_L3 = 0;delay(DY_PWM);dis_off();}
i = c & 0x10;
if(i == 0x10){
DY_LED2_H5 = 1;DY_LED1_L3 = 0;delay(DY_PWM);dis_off();}
i = c & 0x20;
if(i == 0x20){
DY_LED2_H6 = 1;DY_LED1_L3 = 0;delay(DY_PWM);dis_off();}
i = c & 0x40;
if(i == 0x40){
DY_LED2_H7 = 1;DY_LED1_L3 = 0;delay(DY_PWM);dis_off();}
i = c & 0x80;
if(i == 0x80){
DY_LED2_H8 = 1;DY_LED1_L3 = 0;delay(DY_PWM);dis_off();}
}
/*********************************************************************************************/
void displayLL4 (unsigned char d,c){ //第4列橫向顯示程式
unsigned char i;
i = d & 0x01;
if(i == 0x01){ // 第一屏的8列
DY_LED1_H1 = 1;DY_LED1_L4 = 0;delay(DY_PWM);dis_off();}
i = d & 0x02;
if(i == 0x02){
DY_LED1_H2 = 1;DY_LED1_L4 = 0;delay(DY_PWM);dis_off();}
i = d & 0x04;
if(i == 0x04){
DY_LED1_H3 = 1;DY_LED1_L4 = 0;delay(DY_PWM);dis_off();}
i = d & 0x08;
if(i == 0x08){
DY_LED1_H4 = 1;DY_LED1_L4 = 0;delay(DY_PWM);dis_off();}
i = d & 0x10;
if(i == 0x10){
DY_LED1_H5 = 1;DY_LED1_L4 = 0;delay(DY_PWM);dis_off();}
i = d & 0x20;
if(i == 0x20){
DY_LED1_H6 = 1;DY_LED1_L4 = 0;delay(DY_PWM);dis_off();}
i = d & 0x40;
if(i == 0x40){
DY_LED1_H7 = 1;DY_LED1_L4 = 0;delay(DY_PWM);dis_off();}
i = d & 0x80;
if(i == 0x80){
DY_LED1_H8 = 1;DY_LED1_L4 = 0;delay(DY_PWM);dis_off();}
i = c & 0x01;
if(i == 0x01){ // 第二屏的8列
DY_LED2_H1 = 1;DY_LED1_L4 = 0;delay(DY_PWM);dis_off();}
i = c & 0x02;
if(i == 0x02){
DY_LED2_H2 = 1;DY_LED1_L4 = 0;delay(DY_PWM);dis_off();}
i = c & 0x04;
if(i == 0x04){
DY_LED2_H3 = 1;DY_LED1_L4 = 0;delay(DY_PWM);dis_off();}
i = c & 0x08;
if(i == 0x08){
DY_LED2_H4 = 1;DY_LED1_L4 = 0;delay(DY_PWM);dis_
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/128094.html
標籤:單片機/工控
上一篇:輸入是24伏為什么M1 場效應管輸出的為什么只有5伏左右的電壓
下一篇:請求洗掉我的資源 https://download.csdn.net/download/fcc2008/10748717 ,謝謝了
