?? controler.c
字號:
#include <reg51.h>
#define LEDLen 3
sbit OUT0 = P1^0;
sbit OUT1 = P1^1;
sbit OUT2 = P1^2;
sbit OUT3 = P1^3;
sbit OUT4 = P1^4;
sbit OUT5 = P1^5;
sbit OUT6 = P1^6;
sbit OUT7 = P1^7;
int bdata Second;
sbit TURN0 = Second^8;
sbit TURN1 = Second^9;
sbit TURN2 = Second^10;
int bdata flag;
sbit I_test = flag^0; //電流測試標志
unsigned char Sec,Time;
unsigned int w;
unsigned char LEDBuf[LEDLen]; //顯示緩沖區
unsigned char Buf0[LEDLen];
unsigned char Buf1[LEDLen];
code unsigned char LEDMAP[] = {
0x80, 0xb9, 0x24, 0x30, 0x19, 0x12, 0x02, 0xb8, 0x00, 0x10
};
void delay1() {
unsigned int j;
for (j=0;j<30000; j++){}
}
void Delay(unsigned char CNT) { //延時函數
unsigned int i;
while (CNT-- !=0)
for (i=100; i !=0; i--);
}
void DisplayLED() { //顯示函數
unsigned char i;
for (i = 0; i < LEDLen; i++) {
P3 = LEDBuf[i];
if (i == 0) {
OUT4 = 1;
OUT3 = 1;
OUT2 = 0;
}
else if (i == 1) {
OUT4 = 1;
OUT3 = 0;
OUT2 = 1;
}
else {
OUT4 = 0;
OUT3 = 1;
OUT2 = 1;
}
Delay(1);
}
}
//中斷函數
#define Tick 4000 //4000x250us=1s
#define T250us (256-230) //250us 時間常數(fosc11.0592
unsigned char Hour, Minute;
unsigned int C250us; //250us 計數單元
void T0Int() interrupt 1 { //T0 中斷服務函數
C250us--;
if (C250us == 0) {
C250us = Tick/8; //250us 計數器為0,重置計數器
Second++; //秒進位
if (Time == 8){ //點位處理
OUT5 = TURN2;
}
else {
OUT5 = TURN0;
}
if (Second == 480) {
Second = 0; //秒清零
Minute++;
if (Minute == 60) {
Minute = 0;
Hour++;
if (Hour == Time){
OUT5 = 1;
TURN0 = 1;
TR0 = 0;
}
}
}
}
}
void main() { //主函數
Time = 8; //
TMOD = 0X02; //設置T0工作方式與處置
TH0 = T250us;
TL0 = T250us;
IE = 0x82; //開中斷
Hour = 0;
Minute = 0;
Second = 0;
C250us = Tick;
TR0 = 1; //啟動定時器 0
I_test = 0; //啟動程序
P3 = 0x00;
if (P3 == 0x00 ){ //啟動檢測電流
OUT6 = 0;
delay1();
OUT6 = 1;
delay1();
if (P3 == 0x00){ //確認電流
OUT6 = 0;
delay1();
OUT6 = 1;
delay1();
while (1) { //循環函數
LEDBuf[0] = LEDMAP[Hour%10];
LEDBuf[1] = LEDMAP[Minute/10];
LEDBuf[2] = LEDMAP[Minute%10];
DisplayLED();
if (Hour == Time){
OUT7 = 0;
TURN0 = 1;
OUT5 = 1;
}
if (Time == 8){ //轉浮沖的翻轉函數
P3 = 0x00;
if (P3 != 0x00){ //檢測電流是否反轉
Buf0[0]=LEDBuf[0];
Buf0[1]=LEDBuf[1];
Buf0[2]=LEDBuf[2];
Second=0x00;
Minute=0x00;
Hour=0x00;
Time = 2;
}
}
else //如果已經進入浮充
if (TURN0 == 1) //翻看函數
if (OUT5 == 0){
w=600; //翻看時間
while (w){
w--;
LEDBuf[0]=Buf0[0];
LEDBuf[1]=Buf0[1];
LEDBuf[2]=Buf0[2];
DisplayLED();
}
}
}
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -