毕业设计论文范文(单片机数字电子钟设计)(6)
来源:56doc.com 资料编号:5D4688 资料等级:★★★★★ %E8%B5%84%E6%96%99%E7%BC%96%E5%8F%B7%EF%BC%9A5D4688
资料介绍
4.3 主程序 #include<reg52.h> sbit ksec=P3^0; sbit kmin=P3^1; sbit khour=P3^2; unsigned char secshi=0,secge=0,minshi=0,minge=0,hourshi=0,hourge=0; unsigned int num=0,sec=0,min=0,hour=0; unsigned char code table[10]={0x3f,0xxx,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; void delay(unsigned int); void keyscan(); void display(); main() {TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1;ET0=1;TR0=1; while(1) {display(); keyscan(); } } void delay(unsigned int z) {unsigned int x,y; for(x=z;x>0;x--) for(y=110;y>0;y--);} 4.4 时钟设置子程序 void time0() interrupt 1 {num++; TH0=(65536-50000)/256; TL0=(65536-50000)%256; } 4.5 定时器中断子程序 void time0() interrupt 1 {num++; TH0=(65536-50000)/256; TL0=(65536-50000)%256; } 在这里,我们有必要介绍一下单片机的中断系统,以利于我们的学习。 中断技术在单片系统中有着十分重要的作用,它不仅可以提高单片机CPU的效率,也可以对突发事件处理。所谓中断就是当CPU正在执行程序A时,发生了另一个急需处理的事件B,这是CPU暂停当前执行的程序A,立即转去执行处理事件B的程序,处理完事件B后,再返回到程序A继续执行,这个过程被叫做中断。关于中断的概念有下列几个名词:(1)程序A称为主程序,(2)处理事件B的程序称为中断服务程序,(3)主程序中转向中断服务程序的地方称为断点,(4)引起中断的原因即事件B称为中断源,(5)转去执行中断服务程序称为中断响应。关于中断的概念可以打个如下的比喻。领导(CPU)在自己的房间办公(执行主程序),下属(外设)有问题打电话来请示(中断源),领导停下正在进行的工作,通过电话给下属做指示(执行中断服务程序),指示完后,领导挂断电话,继续做自己的工作(返回主程序继续执行)。 中断是一个过程,当中央处理器CPU在处理某件事情时,外部又发生了另一紧急事件,请求CPU暂停当前的工作而去迅速处理该紧急事件。处理结束后,再回到原来被中断的地方,继续原来的工作。引起中断的原因或发出中断请求的来源,称为中断源。 单片机一般允许有多个中断源,当几个中断源同时向CPU请求中断时,就存在CPU优先响应哪一个中断请求源的问题(优先级问题),一般根据中断源的轻重缓急排队,优先处理最紧急事件的中断请求,于是便规定每一个中断源都有一个中断优先级别,并且CPU总是响应级别最高的中断请求。 当CPU正在处理一个中断源请求的时候,又发生了另一个优先级比它高的中断源请求,如果CPU能够暂时中止对原来中断处理程序的执行,转而去处理优先级更高的中断源请求,待处理完以后,再继续执行原来的低级中断处理程序,这样的过程称为中断嵌套。 4.6 LED显示程序 void display() {if(num==20) {num=0; sec++; if(sec==60) {sec=0; min++; if(min==60) {min=0; hour++; if(hour==24) {hour=0; min=0; sec=0; } } } } secge=sec%10; secshi=sec/10; minge=min%10; minshi=min/10; hourge=hour%10; hourshi=hour/10; P2=0xfe; P0=table[secge]; delay(5); P2=0xfd; P0=table[secshi]; delay(5); P2=0xfb; P0=0x40; delay(5); P2=0xf7; P0=table[minge]; delay(5); P2=0xef; P0=table[minshi]; delay(5); P2=0xdf; P0=0x40; delay(5); P2=0xbf; P0=table[hourge]; delay(5); P2=0x7f; P0=table[hourshi]; delay(5); } 4.7 按键控制子程序 void keyscan() {if(ksec==0) {delay(10); if(ksec==0) {sec++; if(sec>=60) sec=0; } while(ksec==0) display();} if(kmin==0) {delay(10); if(kmin==0) {min++; if(min>=60) min=0; } |