#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的单摆测周期程序》的相关信息,《基于STC89C52的单摆测周期程序》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《基于STC89C52的单摆测周期程序》的详细说明。
简介:本文给大家介绍了一个基于STC89C52的单摆测周期程序。
提醒:《基于STC89C52的单摆测周期程序》最后刷新时间 2024-03-14 01:02:40,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《基于STC89C52的单摆测周期程序》该内容的真实性请自行鉴别。