一位共阴数码管显示档位,一个开关控制开关机,一个开关调节档位,共四挡。
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源程序如下:
- #include <reg51.h>
- #include"intrins.h"
- sbit pump=P3^7;
- sbit pump_button=P3^5;
- sbit ON_OFF=P3^6;
- sbit COM1=P3^4;
- unsigned char zero_crossing=0;
- unsigned char setting=0;
- unsigned char k=0;
- unsigned char tab[ ]={0x03f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
- /****************************************************************************
- display
- ****************************************************************************/
- void delay1(void)
- {
- unsigned int j;
- for(j=0;j<100;j++)
- ;
- }
- void display1()
- {
- COM1=0;
- P1=tab[setting%10];
- delay1();
- COM1=1;
-
- }
- void Delayms(unsigned int n)//ms delay
- {
- unsigned int i,j;
- for(j=n;j>0;j--)
- for(i=112;i>0;i--);
- }
- void main(void)
- {
- IT0=1;
- EX0=1;
- EA=0;
- pump=0;
- setting=1;
- zero_crossing=0;
- while(1)
- {
- if(k==1)
- {
- display1();
- }
- if(ON_OFF==0)
- {
- Delayms(20);
- if(ON_OFF==0)
- {
- EA=~EA;
- setting=1;
- k++;
- if(k>=2)
- {
- k=0;
- }
-
-
-
- while(!ON_OFF);
- }
- }
-
-
- if(pump_button==0)
- {
- Delayms(20);
- if(pump_button==0)
- {
- setting++;
- if (setting==5)
- {
- setting=1;
- }
- while(!pump_button);
- }
- }
- }
- }
- //zero crossing checking
- void ext0(void) interrupt 0
- {
- zero_crossing++;
- if(zero_crossing>=setting)
- {
- pump=1;
- Delayms(4);
- pump=0;
- zero_crossing=0;
- }
- }
复制代码
Keil5代码与Proteus8.13仿真下载:
51单片机可控硅调档位 仿真 程序.rar
(68.08 KB, 下载次数: 90)
|