区别每个数码管子函数(*7)和整体数码管并一类子函数(*1)之间的区别;我们可以看其中数码管显示的停滞与正常之间的差距(proteus的原理图相同,只是稍微了改了下C语言程序)
74hc573-74ls273和单片机数码管的仿真图:
单片机源程序:
- #include<reg52.h>
- #include<intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
- uchar code select[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
- sbit dula=P3^6;
- sbit clk=P3^7;
- uchar miao,fen,shi,adval,a,shih,shil,fenh,fenl,miaoh,miaol;
- void delayms(uint xms)
- {
- uint i,j;
- for(i=xms;i>0;i--)
- for(j=110;j>0;j--);
- }
- void display_shih(uchar shih)
- {
- P0=select[0];
- clk=1;
- clk=0;
- dula=1;
- P0=table[shih];
- dula=0;
- delayms(3);
- }
- void display_shil(uchar shil)
- {
- P0=select[1];
- clk=1;
- clk=0;
- dula=1;
- P0=table[shil];
- dula=0;
- delayms(3);
- }
- void display_fenh(uchar fenh)
- {
- P0=select[3];
- clk=1;
- clk=0;
- dula=1;
- P0=table[fenh];
- dula=0;
- delayms(3);
- }
- void display_fenl(uchar fenl)
- {
- P0=select[4];
- clk=1;
- clk=0;
- dula=1;
- P0=table[fenl];
- dula=0;
- delayms(3);
- }
- void display_miaoh(uchar miaoh)
- {
- P0=select[6];
- clk=1;
- clk=0;
- dula=1;
- P0=table[miaoh];
- dula=0;
- delayms(3);
- }
- void display_miaol(uchar miaol)
- {
- P0=select[7];
- clk=1;
- clk=0;
- dula=1;
- P0=table[miaol];
- dula=0;
- delayms(3);
- }
- void t0() interrupt 1
- {
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- adval++;
- }
- void main()
- {
- TMOD=0x01;
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- EA=1;
- ET0=1;
- TR0=1;
- while(1)
- {
- if(adval==20)
- {
- adval=0;
- miao++;
- if(miao==60)
- {
- miao=0;
- fen++;
- if(fen==60)
- {
- fen=0;
- shi++;
- if(shi==24)
- {
- shi=0;
- }
- }
- }
- miaoh=miao/10;
- miaol=miao%10;
- fenh=fen/10;
- fenl=fen%10;
- shih=shi/10;
- shil=shi%10;
- }
- display_shih(shih);
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
下载:
573-273时钟-停滞未优化.zip
(46.77 KB, 下载次数: 13)
|