|
這是我做的流水燈+中斷計(jì)數(shù),流水燈每亮一下,數(shù)碼管自動(dòng)加1,有仿真圖
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png (20.41 KB, 下載次數(shù): 73)
下載附件
2019-10-5 16:14 上傳
單片機(jī)源程序如下:
- #include <reg51.h>
- #define DATAPORT P2 //數(shù)碼管數(shù)據(jù)口
- sbit COM1 = P3^0; //數(shù)碼管位1驅(qū)動(dòng)口
- sbit COM2 = P3^1; //數(shù)碼管位2驅(qū)動(dòng)口
- sbit COM3=P3^7;//第三個(gè)數(shù)碼管
- sbit key1=P3^5;//清零按鍵
- sbit led=P1^0;//20分鐘那個(gè)小燈
- unsigned char miao,fen;//計(jì)時(shí)變量
- code unsigned char cc_table[] = { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //數(shù)碼管段碼
- unsigned int num;//計(jì)數(shù)變量
- void delay(unsigned char t)//延時(shí)函數(shù)
- {
- unsigned char x,y;
- for(x=t;x>0;x--)
- for(y=110;y>0;y--);
- }
- void display(void)
- {
- COM1 = 1; //打開(kāi)第一個(gè)數(shù)碼管,讓他亮
- DATAPORT = cc_table[num/100]; //顯示百位段碼
- delay(5);//延時(shí)5ms
- COM1 = 0;//關(guān)閉第一個(gè)數(shù)碼管,滅,消影
- COM2 = 1;//打開(kāi)第二個(gè)數(shù)碼管
- DATAPORT = cc_table[num%100/10];//顯輸十位段碼
- delay(5);
- COM2 = 0;//關(guān)閉
-
- COM3 = 1; //打開(kāi)第三個(gè)數(shù)碼管
- DATAPORT = cc_table[num%10];//顯輸個(gè)位段碼
- delay(5);
- COM3 = 0;//關(guān)閉三個(gè)數(shù)碼管,滅,消影
- }
- void main(void)
- {
- TMOD = 0X01; //初始化定時(shí)器
- TH0 =(65536-46078)/256;//定時(shí)器初始化
- TL0 =(65536-46078)%256;//定時(shí)器初始化
- EA = 1; //開(kāi)總中斷
- ET0 = 1; //開(kāi)T0中斷
- TR0=1; //啟動(dòng)定時(shí)器0
- TH1 =(65536-46078)/256;//定時(shí)器初始化
- TL1 =(65536-46078)%256;//定時(shí)器初始化
-
- ET1 = 1; //開(kāi)T1中斷
- TR1=1;//啟動(dòng)定時(shí)器1
- IT0=1; //下降沿觸發(fā)
- EX0=1;//打開(kāi)外部0中斷
- P0=0x01;//P1第一燈亮
- led=1;//20分鐘小燈亮
- while(1)
- {
-
- display(); //顯示脈沖數(shù)
-
- if(key1==0)//清零按鍵按下
- {
- delay(2);//延時(shí)消去按鍵抖動(dòng)
- if(key1==0)//按鍵按下
- {
- while(!key1);//按鍵可釋放
- num=0;//清零
- }
- }
-
-
- }
- }
- /********************************************************
- * INT0中斷函數(shù) *
- ********************************************************/
- void counter0(void) interrupt 0 using 1
- {
-
- EX0=0; //關(guān)中斷
- num++;//計(jì)數(shù)值加1
- EX0=1;//開(kāi)中斷
- }
- void T0_ISR(void) interrupt 1
- {
- static unsigned char count,temp=0x02;
- TH0 =(65536-46078)/256;//定時(shí)器初始化
- TL0 =(65536-46078)%256;//定時(shí)器初始化
- count++;//累計(jì)20次為1秒
-
- if(count==20)//1秒到
- {
- P0=0x00;//不亮
- }
- if((count>=60)&&(count>20))//2秒
- {
- count=0;//計(jì)數(shù)值清零
- P0=temp;
- temp=temp<<1;//左移動(dòng)
- if(temp==0x40)// 0X40是循環(huán)6位,0X00是循環(huán)8位
- temp=0x01; // 循環(huán)結(jié)束,由第一個(gè)燈開(kāi)始
- }
-
- }
- void T1_ISR(void) interrupt 3
- {
- static unsigned int count1;
- TH1 =(65536-46078)/256;//定時(shí)器初始化
- TL1 =(65536-46078)%256;//定時(shí)器初始化
- count1++;
- if(count1==20)//計(jì)數(shù)1秒
- {
- count1=0;
- miao++;
- if(miao==60)//計(jì)時(shí)60秒到
- {
- miao=0;
- fen++;
- if(fen>=150)//計(jì)時(shí)20分鐘
- {
-
- led=0;
- TR1=0;
- }
- }
- }
- }
復(fù)制代碼
0.png (5.52 KB, 下載次數(shù): 70)
下載附件
2019-10-5 16:15 上傳
全部資料51hei下載地址:
流水燈中斷計(jì)數(shù)(帶仿真).rar
(46.1 KB, 下載次數(shù): 70)
2019-10-5 11:55 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|