一、 实验原理及实验线路
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)
|