使用Protues畫原理圖并寫程序:
用定時器1的方式1實現n個發光管200ms間隔閃爍,用定時器0的方式1實現數碼管前兩位59s循環計時,后兩位顯示學號(最后兩位)。
學號除6取余數,余數加2.結果是這個led燈的數目n。
數碼管顯示前兩位循環計時,加上顯示學號后兩位。總共顯示四位。
仿真截圖.GIF (144.94 KB, 下載次數: 54)
下載附件
原理圖
2017-12-25 20:26 上傳
01.GIF (8 KB, 下載次數: 49)
下載附件
文件
2017-12-25 20:28 上傳
中斷LED顯示.rar
(1.94 MB, 下載次數: 4)
2017-12-25 20:29 上傳
點擊文件名下載附件
原理圖及詳細源代碼 下載積分: 黑幣 -5
部分源程序如下:
#include<reg52.h> //52系列單片機頭文件
#define ucharunsigned char //宏定義
#define uintunsigned int
sbitdula=P2^6; //申明U1鎖存器的鎖存端
sbitwela=P2^7; //申明U2鎖存器的鎖存端
sbitled1=P1^0; //LED燈說明
sbit led2=P1^1;
uchar codetable[]={ //數碼管顯示編碼
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
voiddelayms(uint);
voiddisplay(uchar,uchar);
ucharnum,num1,num2,shi,ge;
void main() //主函數
{
TMOD=0x11; //設置定時器0和1為工作方式1(0001 0001)
TH0=(65536-458720)/256; //裝初值
TL0=(65536-458720)%256;
TH1=(65536-458720)/256; //裝初值
TL1=(65536-458720)%256;
EA=1; //開總中斷
ET0=1; //開定時器0中斷
ET1=1; //開定時器1中斷
TR0=1; //啟動定時器0
TR1=1; //啟動定時器1
while(1) //程序在這里不停的對數碼管動態掃描同時等待中斷發生
{
display(shi,ge);
}
}
voiddisplay(uchar shi,uchar ge) //顯示子函數
{
wela=1;
P0=0xfe; //送入位選信號
wela=0;
dula=1;
P0=table[shi]; //送入段選信號
dula=0;
P0=0xff; //消影
delayms(5); //延時5毫秒
wela=1;
P0=0xfd;
wela=0;
dula=1;
|