基于STC89C52的单摆测周期程序

来源:本站
导读:目前正在解读《基于STC89C52的单摆测周期程序》的相关信息,《基于STC89C52的单摆测周期程序》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《基于STC89C52的单摆测周期程序》的详细说明。
简介:本文给大家介绍了一个基于STC89C52的单摆测周期程序。

#include<reg52.h>#define uchar unsigned char#define uint unsigned int sfr ISP_CONTR=0xe7;unsigned long num;uchar j,k;uchar a0,b0,c0,d0,e0,f0,g0,h0;sbit dula=P2^6;sbit wela=P2^7;sbit s2=P3^5;sbit s3=P3^6;sbit s4=P3^7;sbit beep=P2^3;unsigned char j,k,c4,c3,c2,c1,ms,m,n=255;//unsigned char pp;unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,                        0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};void delay(uchar i){for(j=i;j>0;j--)for(k=125;k>0;k--);}void display(uchar a,uchar b,uchar c,uchar d,uchar e,uchar f,uchar g,uchar h){   dula=0;   P0=table[a];   dula=1;   dula=0;      wela=0;   P0=0xfe;   wela=1;   wela=0;   delay(5);      P0=table[b];   dula=1;   dula=0;      P0=0xfd;   wela=1;   wela=0;   delay(5);   P0=table[c];   dula=1;   dula=0;      P0=0xfb;   wela=1;   wela=0;   delay(5);      P0=table[d];   dula=1;   dula=0;      P0=0xf7;   wela=1;   wela=0;   delay(5);      P0=table[e];   dula=1;   dula=0;      P0=0xef;   wela=1;   wela=0;   delay(5);      P0=table[f];   dula=1;   dula=0;      P0=0xdf;   wela=1;   wela=0;   delay(5);   P0=table[g];   dula=1;   dula=0;      P0=0xbf;   wela=1;   wela=0;   delay(5);   P0=table[h];   dula=1;   dula=0;      P0=0x7f;   wela=1;   wela=0;   delay(5);}void display1(uchar miao1,uchar miao0,uchar haomiao1,uchar haomiao0){   P0=table[miao1];   dula=1;   dula=0;      P0=0xef;   wela=1;   wela=0;   delay(5);   P0=table[miao0]|0x80;   dula=1;   dula=0;      P0=0xdf;   wela=1;   wela=0;   delay(5);      P0=table[haomiao1];   dula=1;   dula=0;      P0=0xbf;   wela=1;   wela=0;   delay(5);   P0=table[haomiao0];   dula=1;   dula=0;      P0=0x7f;   wela=1;   wela=0;   delay(5);}void keyscan(){if(s2==0){    while(s2==0);TR0=1; //打开定时器num++;}}void main(){   TMOD=0x01; //模式设置,00000001,可见采用的是定时器0,工作与模式1(M1=0,M0=1)。//TR0=1; //打开定时器TH0=(65536-46080)/256;// 由于晶振为11.0592,故所记次数应为46080,计时器每隔50000微秒发起一次中断。TL0=(65536-46080)%256;//46080的来历,为50000*11.0592/12ET0=1; //开定时器0中断EA=1; //开总中断   while(1){        keyscan();  if(num<10){a0=num;b0=16;c0=16;d0=16;e0=16;f0=16;g0=16;h0=16;}else{if(num<=20){a0=num/10;b0=num%10;c0=16;d0=16;e0=16;f0=16;g0=16;h0=16;}    }if(num==20){ TR0=0;//时间到,定时器关闭ET0=0;        beep=0;}if(s3==0) //按键清零   {       delay(5);   if(s3==0)   {    ms=0;m=0;     num=0;     ET0=0;beep=1;}}if(s4==0){   ISP_CONTR=0x20;   }c3=m%10;  //取出当前描述的个位与十位c4=m/10;c1=ms%10;  //取出当前描述的个位与十位c2=ms/10;display1(c4,c3,c2,c1);   //显示display(a0,b0,c0,d0,e0,f0,g0,h0);}}void timer0() interrupt 1           //中断服务程序{     TH0=(65536-10000)/256;     TL0=(65536-10000)%6;     ms++;     if(ms==100)                     //定时器中断次为s     {                             //把这部分放在中断中,能减少程序执行时间对中断时间的影响         ms=0; n--; P1=n;//闪烁灯         m++; }}

提醒:《基于STC89C52的单摆测周期程序》最后刷新时间 2024-03-14 01:02:40,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《基于STC89C52的单摆测周期程序》该内容的真实性请自行鉴别。