IMG_20181019_070308_HHT.jpg (37.9 KB, 下載次數: 50)
下載附件
2018-10-19 07:04 上傳
/***********四位共陰數碼管驅動程序************/
#include <STC15F2K60S2.H>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit H1 = P3^2;//設置第1位數碼管陽極連接的I/O口
sbit H2 = P3^7;//設置第2位數碼管陽極連接的I/O口
sbit H3 = P1^0;//設置第3位數碼管陽極連接的I/O口
sbit H4 = P1^2;//設置第4位數碼管陽極連接的I/O口
sbit key1=P3^1;
sbit key2=P3^0;
sbit a = P3^3;
sbit b = P1^1;
sbit c = P1^4;
sbit d = P5^4;
sbit e = P5^5;
sbit f = P3^6;
sbit g = P1^3;
sbit h = P1^5;
unsigned char int_time ; //中斷次數計數變量
unsigned char second; //秒計數變量
unsigned char minute; //分鐘計數變量
unsigned char hour; //小時計數變量
/*********************************************************************************************/
unsigned char code disdata[]={
0x01,0x02,0x04,0x08,0x10,
0x12,0x14,0x16,0x18,0x20,
};//0-9,A-F,-
void Delay10us() //@11.0592MHz
{
unsigned char i;
_nop_();
i = 25;
while (--i);
}
void Delay10ms() //@11.0592MHz
{
unsigned char i, j;
i = 108;
j = 145;
do
{
while (--j);
} while (--i);
}
/*********************************************************************************************/
void displayHH1 (unsigned char q){ //第1位數碼管顯示程序
switch(q)
{ case 0x01:{
a=b=c=d=e=f=0;g=h=1;} ; break; //0
case 0x02:{
b=c=0;a =d=e=f=g=h=1;}; break; //1
case 0x04:{
a=b=g=d=e=0;c=f=h=1;}; break; //2
case 0x08:{
a=b=c=d=g=0;e=f=h=1;}; break; //3
case 0x10:{
b=c=f=g=0;a=d=e=h=1;}; break; //4
case 0x12:{
a=c=d=f=g=0;b=e=h=1;}; break; //5
case 0x14:{
a=c=d=e=f=g=0;b=h=1;}; break;//6
case 0x16:{
a=b=c=0;d=e=f=g=h=1;}; break;//7
case 0x18:{
a=b=c=d=e=f=g=0;h=1;}; break; //8
case 0x20:{
a=b=c=d=f=g=0;e=h=1;}; break; //9
}
}
void xian( uint num,uint num1)
{
displayHH1 (disdata[num/10]); H1=1;Delay10us() ;H1=0;
displayHH1 (disdata[num%10]); H2=1;Delay10us() ;H2=0;
displayHH1 (disdata[num1/10]); H3=1;Delay10us() ;H3=0;
displayHH1 (disdata[num1%10]); H4=1;Delay10us() ;H4=0;
}
void main()
{
P5M1=0x00;
P5M0=0xff;
P3M1=0x00;
P3M0=0xff;
P1M0=0xff;
P1M1=0x00;
TMOD=0x00; //使用定時器T0
EA=1; //開中斷總允許
ET0=1; //允許T0中斷
TH0=(65536-50000)/256; //定時器高八位賦初值
TL0=(65536-50000)%256; //定時器低八位賦初值
TR0=1;
int_time=0; //中斷計數變量初始化
second=0; //秒計數變量初始化
minute=0; //分鐘計數變量初始化
hour=12; //小時計數變量初始化
while(1){
xian( hour,minute);
if(key1==0)
{
if(key1==0)
if(++minute==60)minute=0;
while(!key1);
}
if(key2==0)
{
if(key2==0);
if(++hour==13)hour=1;
while(!key2) ;
}
}
}
void interserve(void ) interrupt 1 using 1 //using Time0
{
int_time++;
if(int_time==20)
{
int_time=0; //中斷計數變量清0
second++; //秒計數變量加1
}
if(second==60)
{
second=0; //如果秒計滿60,將秒計數變量清0
minute++; //分鐘計數變量加1
}
if(minute==60)
{
minute=0; //如果分鐘計滿60,將分鐘計數變量清0
hour++; //小時計數變量加1
}
if(hour==13)
{
hour=1; //如果小時計滿24,將小時計數變量清0
}
}
|