?? chengxu.c
字號:
/********************************************************************
匯誠科技
實現功能: 接通電源繼電器吸合30分鐘斷開
使用芯片:STC12C5204AD
晶振:11.0592MHZ
編譯環境:Keil
硬件環境:四位數顯兩路輸入三按鍵 (kzs1211-75150k (雙路輸入,繼電器單路輸出,三個按鍵,四位數碼管模塊))
作者:yang
QQ:790244909
網站:www.ourhc.cn
物聯網測試網站:http://hualongelectron.eicp.net/
日期:2013-04-02
淘寶店:
華龍電子直銷:http://hlelectrony.taobao.com
電子開發直銷:http://shop63233873.taobao.com
匯誠科技網路購物:http://shop36330473.taobao.com
【聲明】此程序僅用于學習與參考,引用請注明版權和作者信息!
********************************************************************/
/********************************************************************
接通電源繼電器吸合30分鐘斷開,數碼管前兩位顯示分鐘,后兩位顯示秒
采用倒計時方式計時
********************************************************************/
#include<STC12C52.h> //庫文件
#include <intrins.h>
#define uchar unsigned char//宏定義無符號字符型
#define uint unsigned int //宏定義無符號整型
#define FOSC 11059200L
#define BAUD 9600
#define ADC_POWER 0x80 //ADC 電源控制位
#define ADC_FLAG 0x10 //ADC 轉換結束標志位
#define ADC_START 0x08 //ADC 開始轉換控制位
#define ADC_SPEEDLL 0x00 //420個時鐘周期轉換一次
#define ADC_SPEEDL 0x20 //280 個時鐘周期轉換一次
#define ADC_SPEEDH 0x40 //140個時鐘周期轉換一次
#define ADC_SPEEDHH 0x60 //70個時鐘周期轉換一次
void display(void); //顯示函數
void t_to_dis(uchar num);
#define DUAN P2 //P0口控制段
#define WEI P1 //P2口控制位
/********************************************************************
初始定義
*********************************************************************/
//數碼管顯示段碼
code uchar seg7code[11]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0XBF};
//數碼管位控制端
sbit wei1=P1^0;
sbit wei2=P1^1;
sbit wei3=P1^2;
sbit wei4=P1^3;
//繼電器輸出控制端
sbit OUT=P3^7;
//按鍵輸入控制端
sbit key1=P3^2;
sbit key2=P3^3;
sbit key3=P3^4;
//兩路輸入控制端可做ad采樣
sbit IN0=P1^6;
sbit IN1=P1^7;
uchar numb[4]; //定義字符串用于數值轉換
uint tcnt;
uchar miao=0;
uchar fen=0;
/********************************************************************
延時函數
*********************************************************************/
void delay(uint x)//延時程序 0.1秒
{
uint m,n,s;
for(m=x;m>0;m--)
for(n=20;n>0;n--)
for(s=248;s>0;s--);
}
/********************************************************************
IO口初始化函數
*********************************************************************/
void init_all(void)
{
P2M1=0;
P2M0=0xff;
P1M1=0x80;
P1M0=0x0f;
P3M1&=0x7f;
P3M0|=0x80;
}
/********************************************************************
定時器T1初始化
*********************************************************************/
void timer0init(void)
{
TMOD=0X10; //設定定時器工作方式
TH1 =0x4c;
TL1 =0x00;
ET1=1;
TR1=1;
EA=1;
}
/********************************************************************
主函數
*********************************************************************/
void main()
{
init_all(); //初始化IO
timer0init();//定時器初始化
OUT=1;
while(1)
{
t_to_dis(miao); //數值變換
display(); //顯示
if(tcnt>=20) //秒減去1
{
tcnt=0;
miao++;
if(miao>=60) //60秒,分鐘變量加1
{
miao=0;
fen++;
if(fen>=30)
{
fen=0;
TR1=0;
OUT=0;
}
}
}
}
}
/********************************************************************
定時器T1中斷函數
*********************************************************************/
void timer1(void)interrupt 3 using 2
{
TH1 =0x4c;
TL1 =0x00;
tcnt++;
}
/********************************************************************
求值函數
*********************************************************************/
void t_to_dis(uchar num)
{
numb[0]=fen/10; //顯示千位
numb[1]=fen%10; //顯示百位
numb[2]=num/10; //顯示十位
numb[3]=num%10; //顯示個位
}
/********************************************************************
顯示函數
*********************************************************************/
void display() //顯示函數
{
WEI&=0XF0;
DUAN=seg7code[numb[0]];
wei1=1;
delay(1);
WEI&=0XF0;
DUAN=seg7code[numb[1]]&0x7f;
wei2=1;
delay(1);
WEI&=0XF0;
DUAN=seg7code[numb[2]];
wei3=1;
delay(1);
WEI&=0XF0;
DUAN=seg7code[numb[3]];
wei4=1;
delay(1);
WEI&=0XF0;
}
/********************************************************************
結束
*********************************************************************/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -