一、 實驗原理及實驗線路
74LS47是七段譯碼器。它是將BCD碼翻譯成七段驅動碼,驅動數碼管顯示數據,數碼管為共陰普亮數碼管,型號為LTS547R,BCD碼由P0口的低四位輸出,P2口作為位選口,P2.0對應左(右)邊哪塊是顯示塊,P2.3對應右(左)邊的哪塊是末顯示塊。工作時,先送BCD碼,再選位,使選中的數碼管點亮,往復循環。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
二、 實驗內容
1. 開機上電后,左循環顯示“1”,“2”,“3”,“4”。
2. 按K1鍵,右循環顯示“1”,“2”,“3”,“4”。
3. 按K2鍵,要求無閃爍顯示,先四個顯示塊顯示1,2,3,4,1秒后四個顯示塊同時顯示5,6,7,8。
仿真圖、C語言源程序見圖片和附件
單片機源程序如下:
- #include<reg51.h>
- #define uchar unsigned char//宏 定義
- #define uint unsigned int
- sbit K1=P3^2;
- sbit K2=P3^3;
- uchar flag=1;
- uchar bint=0;
- void delay1(uint z)//延時約 1ms
- {
- while(z--);
- }
- void delay()//延時約 1ms
- {
- uint m;
- for(m=0;m<0xFFFF;m++);
- }
- uchar table[]={0x01,0x02,0x03,0x04};
- uchar table1[]={0x05,0x06,0x07,0x08};
- uchar table2[]={0x01,0x02,0x04,0x08};
- uchar table3[]={0x08,0x04,0x02,0x01};
- void disp1()
- {
- uchar i;
- for(i=0;i<4;i++)
- {
- P0=table[i];
- P2=table2[i];
- if(bint==1)
- break;
- delay();
- }
- bint=0;
- }
- void disp2()
- {
- uchar j;
- for(j=0;j<4;j++)
- {
- P0=table[j];
- P2=table3[j];
- delay();
- }
- flag=1;
- }
- void disp3()
- {
- uchar k,m;
- m=0x0035;
- while(m)
- {
- for(k=0;k<4;k++)
- {
- P0=table[k];
- P2=table2[k];
- delay1(1000);
- P2=0X00;
- }
- m--;
- }
- m=0x0080;
- while(m)
- {
- for(k=0;k<4;k++)
- {
- P0=table1[k];
- P2=table2[k];
- delay1(1000);
- P2=0X00;
- }
- m--;
- }
- flag=1;
- }
- void Mainloop()
- {
- switch(flag)
- {
- case 1:disp1();
- break;
- case 2:disp2();
- break;
- case 3:disp3();
- break;
- }
- }
- void int0() interrupt 0
- {
- flag=2;
- bint=1;
- }
- void int1() interrupt 2
- {
- flag=3;
- bint=1;
- }
- void main()
- {
- EX0=1;
- IT0=1;
- EX1=1;
- IT1=1;
- EA=1;
- while(1)
- {
- Mainloop();
- }
- }
復制代碼
所有資料51hei提供下載:
Desktop.rar
(16.3 KB, 下載次數: 9)
2018-5-9 18:23 上傳
點擊文件名下載附件
|