/*用定時(shí)器以間隔1000MS在6位數(shù)碼管上依次顯示
0、1、2、3....C、D、E、F,重復(fù)。同時(shí)讓數(shù)碼管亮
設(shè)時(shí)鐘頻率為12M
*/
/*********************************************************/
#include<reg52.h> //52單片機(jī)頭文件
#include <intrins.h> //包含有左右循環(huán)移位子函數(shù)的庫(kù)
#include "51hei.h"
#define uint unsigned int //宏定義
#define uchar unsigned char //宏定義
sbit dula=P2^6; //數(shù)碼管段選鎖存端
sbit wela=P2^7; ////數(shù)碼管位選鎖存端
sbit den_con=P1^4; /// 燈的控制端口
uchar num,tt,i;
uchar code table[]={ //段碼表
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void main()
{guandz();
num=0;
tt=0;
den_con=1;
TMOD=0x01;//設(shè)置定時(shí)器0為工作方式1
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;//開總中斷
ET0=1;//開定時(shí)器0中斷
TR0=1;//啟動(dòng)定時(shí)器0
dula=1;
P0=0x3f; //給段開始送顯示0。
dula=0;//關(guān)閉段選鎖存端,防止開始時(shí)出現(xiàn)亂碼。
wela=1;//11101010
P0=0x00; // 打開六個(gè)數(shù)碼管位選
wela=0;
while(1) //死循環(huán)
{
if(tt==20) //每進(jìn)入10次中斷即為500ms,執(zhí)行一次顯示變化。
{
tt=0;
num++;
if(num==16)
num=0;
dula=1; //開通74hc573,使p0口數(shù)據(jù)能直通
P0=table[num]; //送數(shù)碼管段選值
dula=0; //鎖存負(fù)責(zé)段選的74hc573
den_con=0; //燈亮的控制口打開
P0=0xfe;
for(i=0;i<100;i++);
den_con=1; //燈亮控制口關(guān)閉
}
}
}
void exter0() interrupt 1 // 定時(shí)器0中斷
{
TH0=(65536-50000)/256; //送初值
TL0=(65536-50000)%256;
tt++; //tt=tt+1
}
|