一、实验目的
在小板单片机上实现按键加一
二、实验器材
装有keil,STC-ICP的计算机、小板单片机三、实验步骤
1.知晓原理
2.找出大小版单片机的不同以便修改代码(1)大板是共阴极电路,小板则恰恰相反,修改代码的时候要注意小板的位选信号是高电平有效,段选信号为低电平有效(2)两者的控制端口不同,大板三位控制信号,小板则为4位
3.用K51编写代码(借鉴了百度和老师的代码)
4.用STC-ICP烧录软件进行烧录(别忘了先调试之后再进行创建.hex文件)
5.最后在单片机上进行显示
四、实验代码
#include <reg52.h> typedef unsigned int u16;typedef unsigned char u8;sbit LSA=P2^0;sbit LSB=P2^1;sbit LSC=P2^2;sbit LSD=P2^3;sbit Init=P3^2;u8 code smgduan[17]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//0-9,A-F 字形码//{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, //0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//0-9,A-F 字形码u8 number[4]={0,0,0,0}; //用于显示计数值的4位数/******************************************************************************** 延时函数,i=1时约延时10us*******************************************************************************/void delay(u16 i){ while(i--); }/******************************************************************************** 动态数码管显示*******************************************************************************/void DigDisplay(){ u8 i; for(i=0;i<4;i++) //依次显示第1-4位数字 { switch(i) { case(0): LSA=1;LSB=1;LSC=1;LSD=0; break; case(1): LSA=1;LSB=1;LSC=0;LSD=1; break; case(2): LSA=1;LSB=0;LSC=1;LSD=1; break; case(3): LSA=0;LSB=1;LSC=1;LSD=1; break; } P0=smgduan[number[i]];//发送第i位数字的字形码 delay(100); //延时约1ms P0=0xff; //消隐 }}void main(){ u16 n=0, m=0; //n用于存储记录按键次数的值,m用于临时变量 u8 i=0; Init = 1; //读取IO口前先置1 while(1) { if (Init == 0) //若按键K3按下 { while (Init==0); //等待按键K3抬起,确保按动一下,计数加1 //将此while语句注释掉,会产生什么结果?为何会这样? n++; //计数加1 m=n; for (i=0;i<4;i++) //依次将计数值n的个位、十位、百位和千位数字赋值给number[0-3] { number[i]=m%10; m=m/10; } } DigDisplay(); } }
五、实验结果
六、实验心得1 刚做完第一个实验,这一个实验不知道从哪下手,当时下载安装软件的时候,因为此软件老师不推荐使用,我就没有下载,用的上一个软件进行烧录的发现有错误,而且怎么调试都会有错误,后来翻阅同学的简书才找到自己问题的所在,有时候不要只顾自己低头看书,问一下别人也会有不少的收获
2
一开始发生这样的错误就是因为没有用对软件,以后无论任务多少都要静下心来慢慢来,不要想当然
3要注意每一个位所代表的权值,否则会出现显示的数字是反方向的情况