51单片机输入数字并数码管倒计时典型C语言代码.doc_第1页
51单片机输入数字并数码管倒计时典型C语言代码.doc_第2页
51单片机输入数字并数码管倒计时典型C语言代码.doc_第3页
51单片机输入数字并数码管倒计时典型C语言代码.doc_第4页
51单片机输入数字并数码管倒计时典型C语言代码.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

51单片机输入数字并数码管倒计时典型C语言代码使用STC89C52RC单片机,外接数码管、蜂鸣器。改代码非常适合初学者学习借鉴。#include#define uchar unsigned char#define uint unsigned intsbit dula=P00;sbit wela=P01;sbit p17=P03;sbit p02=P02;sbit p32=P32;sbit p04=P04;uchar count;uint Sumnum;uint circle,circle1;uint time;float top;/定义top为浮点型变量uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;uchar temp,count;uint bian,num,e,d,c,b,a;void delay(uchar x)uchar a1,b1;for(a1=x;a10;a1-) for(b1=200;b10;b1-);void chaishu(uint sum1)uint e1,b1,c1,d1;e=sum1/10000;/e=6*e1=sum1%10000;/e1=5535d=e1/1000;/d=5*d1=e1%1000;/d1=535c=d1/100;/c=5*c1=d1%100;/c1=35b=c1/10;/b=3*b1=c1%10;/b1=5a=b1;/a=5*void display(uint wan,uint qian,uint bai,uint shi,uint ge)wela=1;P2=0xfe;wela=0;P2=0xff;dula=1;P2=tablewan;dula=0;delay(3);P2=0xff;wela=1;P2=0xfd;wela=0;P2=0xff;dula=1;P2=tableqian;dula=0;delay(3);P2=0xff;wela=1;P2=0xfb;wela=0;P2=0xff;dula=1;P2=tablebai;dula=0;delay(3);P2=0xff;wela=1;P2=0xf7;wela=0;P2=0xff;dula=1;P2=tableshi;dula=0;delay(3);P2=0xff;wela=1;P2=0xef;wela=0;P2=0xff;dula=1;P2=tablege;dula=0;delay(3);P2=0xff;/switchvoid suanbian(uchar cont)switch (cont)/松开按键后对bian进行赋值case 1:bian=num;break;/跳出switchcase 2:bian=(bian*10)+num;break;/跳出switchcase 3:bian=(bian*10)+num;break;/跳出switchcase 4:bian=(bian*10)+num;break;/跳出switchcase 5:bian=(bian*10)+num;break;/跳出switch/switch结束/switchvoid keyscan()/以下测456P1=0xfd;/ P1口等于11111101temp=P1;/ temp等于P1口的值if(P1!=0xfd)/ 如果P1口不等于11111101 delay(100);/延时100毫秒if(P1!=0xfd)/再测一下如果P1口是否等于11111101switch(temp)/如果不等于,那么检测temp取到的P1口的值并进入选择。case 0xed: num=4;count=count+1;/如果=0xed那么num设定为4break;/跳出switchcase 0xdd:num=5;count=count+1;/如果=0xed那么num设定为5break;/跳出switchcase 0xbd: num=6;count=count+1;/如果=0xed那么num设定为6break;/跳出switch/switch结束while(P1!=0xfd);/此处为一个等待按键松开的while语句:没松开就一直停在while中suanbian(count);/chaishu(bian); /第二个if结束 /第一个if结束/以下测123P1=0xfe;/ P1口等于11111101temp=P1;/ temp等于P1口的值if(P1!=0xfe)/ 如果P1口不等于11111101 delay(100);/延时100毫秒if(P1!=0xfe)/再测一下如果P1口是否等于11111101switch(temp)/如果不等于,那么检测temp取到的P1口的值并进入选择。case 0xee: num=1;count=count+1;/如果=0xed那么num设定为4break;/跳出switchcase 0xde:num=2;count=count+1;/如果=0xed那么num设定为5break;/跳出switchcase 0xbe: num=3;count=count+1;/如果=0xed那么num设定为6break;/跳出switch/switch结束while(P1!=0xfe);/此处为一个等待按键松开的while语句:没松开就一直停在while中suanbian(count);/chaishu(bian); /第二个if结束 /第一个if结束/以下测789P1=0xfb;/ P1口等于11111101temp=P1;/ temp等于P1口的值if(P1!=0xfb)/ 如果P1口不等于11111101 delay(100);/延时100毫秒if(P1!=0xfb)/再测一下如果P1口是否等于11111101switch(temp)/如果不等于,那么检测temp取到的P1口的值并进入选择。case 0xeb: num=7;count=count+1;/如果=0xed那么num设定为4break;/跳出switchcase 0xdb:num=8;count=count+1;/如果=0xed那么num设定为5break;/跳出switchcase 0xbb: num=9;count=count+1;/如果=0xed那么num设定为6break;/跳出switch/switch结束while(P1!=0xfb);/此处为一个等待按键松开的while语句:没松开就一直停在while中suanbian(count);/chaishu(bian); /第二个if结束 /第一个if结束/以下测0和ce键ok键P1=0xf7;/ P1口等于11111101temp=P1;/ temp等于P1口的值if(P1!=0xf7)/ 如果P1口不等于11111101 delay(100);/延时100毫秒if(P1!=0xf7)/再测一下如果P1口是否等于11111101switch(temp)/如果不等于,那么检测temp取到的P1口的值并进入选择。case 0xe7: bian=0;count=0;/按下ce键后清零(直接给bian赋值为0)break;/跳出switchcase 0xd7:num=0;count=count+1;/按下0后*break;/跳出switchcase 0xb7: Sumnum=bian;count=0;/按下OK后,将bian赋值给Sumnum,同时将count赋值为零, /以防止个位堆积(实际上count保持原数)break;/跳出switch/switch结束while(P1!=0xf7);/此处为一个等待按键松开的while语句:没松开就一直停在while中suanbian(count); /第二个if结束 /第一个if结束/整个键盘检测程序完成/以下为主函数/void main()circle=0;TMOD=0x01;/设定定时器工作模式00000001TH0=(65536-50000)/256;/50毫秒TL0=(65536-50000)%256;/装入定时器0初值EA=1;/开总允许ET0=1;/开源定时器0允许1EX0=1;/开外部中断0源允许IT0=1;/外部中断0下降沿有效while(1)if(Sumnum!=0)/如果按下了OK键TR0=1;/启动定时器0if(time=200)/如果时间到了200个50毫秒(共10秒)if(circle=Sumnum)p17=0;/开发光二极管TR0=0;/不允许定时器再次启动/EX0=0;/关外部中断0源允许circle1=circle/10;chaishu(circle1);while(1)display(e,d,c,b,a);else TH0=(65536-50000)/256;/50毫秒TL0=(65536-50000)%256;/装入定时器0初值circle=0;time=0;keyscan();chaishu(bian);display(e,d,c,b,a);/主函数结束/定时中断函数内

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论