51单片机的模拟电梯仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源程序如下:
- /******************************************************************
- AT89S51的T0,T1计数器对输入的信号进行频率计数,测量结果用数码管
- 动态显示,要求对0~65KHZ的信号频率进行准确测量,误差不超过5HZ
- *****************************************************************/
- #include <reg51.h>
- #define uint unsigned int
- sbit KEY_1=P2^0;
- sbit KEY_2=P2^1;
- sbit KEY_3=P2^2;
- sbit KEY_4=P3^3;
- sbit LED1=P3^0;
- sbit LED2=P3^1;
- sbit LED3=P3^2;
- unsigned int num=0;
- code unsigned char TAB[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0X77};
- /*显示变量对应的数值*/
- /***************定时器0中断服务函数************************/
- void timer0()interrupt 1{
- TH0 = (65536 - 10000) / 256;
- TL0 = (65536 - 10000) % 256;
- num++;//记到20就直接停止
- //if(num>=50)
- }
- /**************************延时函数************************************/
- void delay(unsigned char t){
- unsigned char i,j;
- for(i=0;i<t;i++)
- for(j=0;j<125;j++);
- }
- void delayms(unsigned int xms)
- {
- unsigned int x;
- unsigned char y;
- for(x = xms; x > 0; x--)
- for(y = 124; y>0; y--);//11.0592MHz: 114 //12MHz: 124
- }
- void delayus( int xus)
- {
- while(--xus>0);
- }
- /*************************显示函数**************************************/
- void main(){
-
- TMOD=0x01;//T0 记时 T1计数
- TH0 = (65536 - 10000) / 256;
- TL0 = (65536 - 10000) % 256;
-
- TR0=1; //开T0 // IT1=1;
- ET0=1;//开中断
- EA=1;//打开总中断 0x86 0xdb 0xcf
- LED1=1;
- LED2=1;
- LED3=1;
- num=0; //1 1000 0110 2 1101 1011 3 1100 1111
- while(1)
- {
- if(KEY_1==0){ LED1=1; LED2=1; LED3=1;while(P1!=0X86);num=0; LED1=0; while(num<500){if(KEY_2==0||KEY_3==0)break;} if(P1==0X86)LED1=1; }
- else if(KEY_2==0) {LED1=1; LED2=1; LED3=1;while(P1!=0Xdb);num=0; LED2=0; while(num<500){if(KEY_1==0||KEY_3==0)break;} if(P1==0Xdb)LED2=1;}
- else if(KEY_3==0) {LED1=1; LED2=1; LED3=1;while(P1!=0Xcf);num=0; LED3=0; while(num<500){if(KEY_1==0||KEY_2==0)break;} if(P1==0Xcf)LED3=1;}
- }
- }
- //
复制代码
所有资料51hei提供下载:
模拟3层电梯.rar
(100.19 KB, 下载次数: 50)
|