一位共陰數碼管顯示檔位,一個開關控制開關機,一個開關調節檔位,共四擋。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.gif (156.68 KB, 下載次數: 27)
下載附件
2023-2-22 18:14 上傳
單片機源程序如下:
- #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;
- }
- }
復制代碼
51hei.png (10.86 KB, 下載次數: 28)
下載附件
2023-2-22 18:13 上傳
Keil5代碼與Proteus8.13仿真下載:
51單片機可控硅調檔位 仿真 程序.rar
(68.08 KB, 下載次數: 90)
2023-2-22 17:29 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|