单片机课程设计实验
实验课程题目:倒计时器
班级:
姓名:
学号:
一、 实验目的:
学习JD51单片机定时器时间计时处理、按键扫描及LED数码管显示的设计方法。
二、 设计要求:
设计一个倒计时器,用数码管显示剩余时间,通电后显示初始值10.00表示设定初始值为10分钟,按开始/取消按钮(K4开关键)开始倒计时,再次按开始/取消按钮(K4开关键)则复位到10.00;复位后可按时间调整按钮(K1与K2开关键)调整倒计时的初始时间,当数码管显示00.00时蜂鸣响6声。
三、程序设计:
#include #define uchar unsigned char #define uint unsigned int uchar Count = 0; uint fs=0; sbit BELL = P2^4; //设置P2.4口,为控制蜂鸣器发声的引脚 sbit K1 = P3^2; sbit K2 = P3^3; sbit K3 = P3^5; uchar min = 10 ; uchar sec = 0 ; uchar ws[4] = {0x01,0x02,0x04,0x08}; uchar table[10] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //数码管的段码编码 (0-9) uchar table_d[10] = {0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}; //带点数码管的段码编码 (0-9) void delay(void) //误差 0us { unsigned char a,b; for(b=1;b>0;b--) for(a=7;a>0;a--); } void Delay(uint del) { uint x,j; for(j=0;j } void Delay2(uint m) // 延时子程序,延时时间为 1ms * del { while(--m); } void beep(uint n) { uint i; for(i=0;i BELL=0; Delay2(10000); BELL=1; Delay2(10000); } //蜂鸣器响N次 } void Time0_Init() //初始化定时器 11.0592M 50ms { EA = 1 ; TMOD = 0x01; TH0= 0x4E; TL0=0x58; TR0 = 0; ET0 = 1; } void time0() interrupt 1 { TH0= 0x4E; /*定时器0中断程序*/ TL0=0x58; if (Count == 20) { Count = 0; if(sec == 0) { if(min == 0) { min = 10; } else min--; sec = 59; } else sec--; } else Count++; if(min==0&&sec==0) { beep(3); min=0; sec=0;TR0=0; } } void display(void) { P2 = 0xfe; /*调用蜂鸣器程序*/ //数码管每位动态显示 P0 = table[min/10]; Delay(2); P2 = 0xfd; P0 = table_d[min%10]; Delay(2); P2 = 0xfb; P0 = table[sec/10]; Delay(2); P2 = 0xf7; P0 = table[sec%10]; Delay(2); P2=0xf0; delay(); } void key1() //按键功能函数 { if(K1==0||K2==0||K3==0) //判断是否有按键按下 { display(); /*调用显示函数*/ if(K3==0) { if(K3==0) { if(fs==0) /*如果K3按下判定如果fs为0,开始计时*/ { TR0 = 1; } else /*如果fs为1,计时器复位*/ { min=10; sec=0; TR0=0; } while(!K3) ; /*按键消抖,每按一次只执行一次*/ Delay(10); while(!K3) ; fs=(!fs); } } else if (K1==0) /*按键K1判定函数*/ { if(K1==0) { if(TR0!=1) { min++; if(min==100) { min=0; } while(!K1); delay(); while(!K1); } /*按键K1消抖*/ } } else { display(); if(K2==0) { if(TR0!=1) { min--; } if(min==-1) { min=99; } /*按键K2判定函数*/ /*调用显示函数*/ while(!K2); /*按键K2消抖*/ delay(); while(!K2); } } } } void main() { BELL = 1; Time0_Init(); while(1) { display(); //主函数 key1(); if(K3==0) { key1(); } } } 三、 经验和体会 在这次的单片机程序课程设计中,学到了关于单片机的很多东西。单片机本就是计算机的一种,对其内部结构的学习同时也让我了解到一些计算机的工作机理。单片机具有软硬结合,体积小,可以很容易嵌入到各种应用系统中,单片机为核心的嵌入式控制系统在工业检测与控制、仪器仪表、消费类电子产品、通信、武器装备、各种终端及计算机外部设备、汽车电子设备和分布式多机系统领域中得到了广泛了应用。单片机是我们的这个专业中很重要的一门课程,同时也是一门比较难学的课程,刚开始学习单片机的时候,觉得很难,在自己的摸索中慢慢的有点懂了。其实单片机主要是难在写程序和写代码,程序主要是用C语言编程,有时候脑子里没有一点思绪,什么都想不出来,所以,如果想要把单片机学好的话,首先就要把C语言学好,单片机主要是建立在C语言的基础上的,不过单片机也可以用汇编语言编译。虽然我们的单片机课程结束了,我们的课程设计也顺利地做 完了,但是我对学单片机的热情只增不减,还是想要更深一步的去了解单片机。 因篇幅问题不能全部显示,请点此查看更多更全内容for(x=0;x<=148;x++);
Copyright © 2019- huatuowenda.com 版权所有 湘ICP备2023022495号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务