1、数码管按键综合应用重庆邮电大学微处理器与嵌入式系统设计课程实验报告实验名称:数码管、按键综合应用学期:2014-2015学年第2学期班级:学号:学生姓名:任课教师:实验教室:YF311二一五年五月九日【实验名称】数码管、按键综合应用 实验要求: 1、按下K0键,LED灯D0亮,数码管12位开始计数(00-FF); 2、按下K1键,LED灯D1亮,数码管34位开始计数(00-FF); 3、按下K2键,LED灯D2亮,数码管56位开始计数(00-FF); 4、按下K3键,LED灯D3亮,数码管78位开始计数(00-FF); 5、按下K4键,D0-D7中奇数位亮(D0、D2、D4、D6); 6、按下
2、K5键,D0-D7中偶数位亮(D1、D3、D5、D7); 7、按下K6键,D0-D7左移流水灯; 8、按下K7键,D0-D7右移流水灯; 9、拓展项目:按下K8键,停止计数器计数且计数器数值清零,数码管全灭。 实验目的: 1、熟悉4位共阴数码管的基本原理,熟悉4位共阴数码管的显示和编程方法; 2、熟悉非编码键盘的工作原理和键盘的扫描方式,熟悉键盘的去抖方法和键盘应用程序的应用; 3、熟悉51单片机中断功能的基本使用方法,熟悉定时器引发中断的方法和中断应用程序的应用; 实验方法:; 1、通过keil软件编写控制单片机并实现相应功能的程序,并生成相应的hex文件; 2、将keil生成的hex文件通
3、过STC-ISP软件导入到单片机中; 3、观察相应的实验现象; 4、根据实现现象优化相应代码。 实验步骤: 1、通过keil软件建立工程并添加文件; 2、编写控制单片机并实现相应功能的程序; 3、编译生成相应的hex文件; 4、将生成的hex文件通过STC-ISP软件导入到单片机中; 5、观察相应的实验现象; 6、根据实现现象优化相应代码。 实验效果: 因数码管图片过多,故截取相应几张呈现实验效果 温馨推荐您可前往XX文库小程序享受更优阅读体验 不去了立即体验实验代码: #include #include #define uint unsigned int #define uchar unsi
4、gned char sbit SLock=P13; void lflash(); /流水灯左移 void rflash(); /流水灯右移 void display0(uchar,uchar);/1、2位数码管显示 void display1(uchar,uchar);/3、4位数码管显示 void display2(uchar,uchar);/5、6位数码管显示 void display3(uchar,uchar);/7、8位数码管显示 void clear();/数码管不显示且显示的数字清零 Uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x
5、7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71; uchar num=0,shi,ge,num0,key; uchar dox1,dox2;/左移、右移端口初始值 void matrixkeyscan(); /延时 void delayms(uint z) uint x,y; for(x=z;x0;x-) for(y=110;y0;y-); /1、2位数码管显示 void display0(uchar shi,uchar ge) SLock=1; P2=tableshi; SLock=0; P0=0xfe; delayms(5); SLock=1
6、; P2=tablege; SLock=0; P0=0xfd; delayms(5); /3、4位数码管显示 void display1(uchar shi,uchar ge) SLock=1; P2=tableshi; SLock=0; P0=0xfb; delayms(5); SLock=1; P2=tablege; SLock=0; P0=0xf7; delayms(5); /5、6位数码管显示 void display2(uchar shi,uchar ge) SLock=1; P2=tableshi; SLock=0; P0=0xef; delayms(5); SLock=1; P2
7、=tablege; SLock=0; P0=0xdf; delayms(5); /7、8位数码管显示 void display3(uchar shi,uchar ge) SLock=1; P2=tableshi; SLock=0; P0=0xbf; delayms(5); SLock=1; P2=tablege; SLock=0; P0=0x7f; void clear() P0=0xff; P2=0xff; num=0; void init() TMOD=0x01; TH0=(65535-50000)/256; TH0=(65535-50000)%256; EA=1; ET0=1; void
8、 T0_time(void) interrupt 1 TH0=(65535-50000)/256; TH0=(65535-50000)%256; num0+; if(num0=5) num0=0; num+; if(num=255) num=0; shi=num/16; ge=num%16; void matrixkeyscan() uchar temp; P3=0xfe; temp=P3; temp=temp&0xf0; if(temp!=0xf0) temp=P3; temp=temp&0xf0; if(temp!=0xf0) temp=P3; switch(temp) case 0xee
9、: key=0; break; case 0xde: key=1; break; case 0xbe: key=2; break; case 0x7e: key=3; break; while(temp!=0xf0) temp=P3; temp=temp&0xf0; TR0=1; P3=0xfd; temp=P3; temp=temp&0xf0; if(temp!=0xf0) delayms(10); temp=P3; temp=temp&0xf0; if(temp!=0xf0) temp=P3; switch(temp) case 0xed: key=4; break; case 0xdd:
10、 key=5; break; case 0xbd: key=6; break; case 0x7d: key=7; break; while(temp!=0xf0) temp=P3; temp=temp&0xf0; P3=0xfb; temp=P3; temp=temp&0xf0; if(temp!=0xf0) delayms(10); temp=P3; temp=temp&0xf0; if(temp!=0xf0) temp=P3; switch(temp) case 0xeb: key=8; break; while(temp!=0xf0) temp=P3; temp=temp&0xf0;
11、void main() init(); dox1=0x7f; dox2=0x7f; while(1) matrixkeyscan(); switch(key) case 0: display0(shi,ge); break; case 1: display1(shi,ge); break; case 2: display2(shi,ge); break; case 3: display3(shi,ge); break; case 4: P2=0xaa; break; case 5: P2=0x55; break; case 6: lflash(); break; case 7: rflash(
12、); break; case 8: TR0=0; clear(); break; /流水灯左移8位 void lflash() P2=dox1; delayms(500); dox1=_crol_(dox1,1); /流水灯右移8位 void rflash() P2=dox2; delayms(500); dox2=_cror_(dox2,1); 心得体会: 在实现实验要求时原本打算在矩阵键盘扫描查询使用switch语句的时候,在case里面完成各功能子函数的调用以完成相应功能。但在观察现象的时候明白无论是实现数码管的动态扫描还是led的循环移位,都需要放在while语句中反复执行。后来通过扫描按键设置标志变量,主函数中反复检测标志变量的方法实现了对数码管和LED的控制,且这样编写的矩阵扫描子函数移植性更高。数码管、按键综合应用的实验并不困难,但在实现过程中的思考是从未有过的。
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2