1、数码管动态显示的三种实验/* 实 验 名 : 动态显示数码管实验* 使用的IO : 数码管使用P0,P2.2,P2.3,P2.4键盘使用P1* 实验效果 : 按矩阵键盘分别显示在数码管上面显示十六进制的0到F。* 注 意 :*/#include/#include #define GPIO_DIG P0#define GPIO_KEY P1sbit LSA=P22;sbit LSB=P23;sbit LSC=P24;unsigned char code DIG_CODE17=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0
2、x39,0x5e,0x79,0x71;/0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码unsigned char KeyValue;/用来存放读取到的键值unsigned char KeyState; /记录按键的状态,0没有,1有unsigned char DisplayData8;/用来存放要显示的8位数的值unsigned char Num;/用来存放中断的时候显示的第位数值void Delay50us(); /延时50usvoid KeyDown(); /检测按键函数void DigDisplay(); /动态显示函数void TimerConfiguratio
3、n();/定时器初始化设置/* 函 数 名 : main* 函数功能 : 主函数* 输 入 : 无* 输 出 : 无*/void main(void) TimerConfiguration(); KeyState=0; /初始化按键状态 while(1) KeyDown(); if(KeyState=1) DisplayData7=DisplayData6; DisplayData6=DisplayData5; DisplayData5=DisplayData4; DisplayData4=DisplayData3; DisplayData3=DisplayData2; DisplayData
4、2=DisplayData1; DisplayData1=DisplayData0; DisplayData0=DIG_CODEKeyValue; KeyState=0; / DigDisplay(); /* 函 数 名 : TimerConfiguration* 函数功能 : 定时器初始化* 输 入 : 无* 输 出 : 无*/void TimerConfiguration() TMOD=0X02;/选择为定时器0模式,工作方式2,仅用TRX打开启动。 TH0=0X9C; /给定时器赋初值,定时100us TL0=0X9C; ET0=1;/打开定时器0中断允许 EA=1;/打开总中断 TR0
5、=1;/打开定时器 /* 函 数 名 : DigDisplay* 函数功能 : 使用数码管显示* 输 入 : 无* 输 出 : 无*/void DigDisplay() unsigned char i,j;/ for(i=0;i7) i=0;/ j=10; /扫描间隔时间设定/ while(j-)/ Delay50us(); / GPIO_DIG=0x00;/消隐/ /* 函 数 名 : KeyDown* 函数功能 : 检测有按键按下并读取键值* 输 入 : 无* 输 出 : 无*/void KeyDown(void) unsigned int a=0; GPIO_KEY=0x0f; if(G
6、PIO_KEY!=0x0f) Delay50us(); a+; a=0; if(GPIO_KEY!=0x0f) ET0=0;/关定时器中断 KeyState=1;/有按键按下 /测试列 GPIO_KEY=0X0F;/ Delay50us(); switch(GPIO_KEY) case(0X07): KeyValue=0;break; case(0X0b): KeyValue=1;break; case(0X0d): KeyValue=2;break; case(0X0e): KeyValue=3;break;/ default: KeyValue=17; /检测出错回复17意思是把数码管全灭
7、掉。 /测试行 GPIO_KEY=0XF0; Delay50us(); switch(GPIO_KEY) case(0X70): KeyValue=KeyValue;break; case(0Xb0): KeyValue=KeyValue+4;break; case(0Xd0): KeyValue=KeyValue+8;break; case(0Xe0): KeyValue=KeyValue+12;break;/ default: KeyValue=17; ET0=1;/开定时器中断 while(a0;b-) for(a=22;a0;a-);/* 函 数 名 : Delay50us* 函数功能
8、 : 延时函数,延时50us* 输 入 : 无* 输 出 : 无*/void Timer() interrupt 1 DigDisplay(); /* 实 验 名 : 动态显示数码管实验* 使用的IO : 数码管使用P0,P2.2,P2.3,P2.4* 实验效果 : 数码管显示76543210。* 注 意 :*/#include#define GPIO_DIG P0sbit LSA=P22;sbit LSB=P23;sbit LSC=P24;unsigned char code DIG_CODE17=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x
9、6f,0x77,0x7c,0x39,0x5e,0x79,0x71;/0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码unsigned char DisplayData8;/用来存放要显示的8位数的值void DigDisplay(); /动态显示函数/* 函 数 名 : main* 函数功能 : 主函数* 输 入 : 无* 输 出 : 无*/void main(void) unsigned char i; for(i=0;i8;i+) DisplayDatai=DIG_CODEi; while(1) DigDisplay(); /* 函 数 名 : DigDisplay*
10、 函数功能 : 使用数码管显示* 输 入 : 无* 输 出 : 无*/void DigDisplay() unsigned char i; unsigned int j; for(i=0;i8;i+) switch(i) /位选,选择点亮的数码管, case(0): LSA=0;LSB=0;LSC=0; break;/显示第0位 case(1): LSA=1;LSB=0;LSC=0; break;/显示第1位 case(2): LSA=0;LSB=1;LSC=0; break;/显示第2位 case(3): LSA=1;LSB=1;LSC=0; break;/显示第3位 case(4): LS
11、A=0;LSB=0;LSC=1; break;/显示第4位 case(5): LSA=1;LSB=0;LSC=1; break;/显示第5位 case(6): LSA=0;LSB=1;LSC=1; break;/显示第6位 case(7): LSA=1;LSB=1;LSC=1; break;/显示第7位 GPIO_DIG=DisplayDatai;/发送段码 j=10; /扫描间隔时间设定 while(j-); GPIO_DIG=0x00;/消隐 /* 实 验 名 : 动态显示数码管实验* 使用的IO : 数码管使用P0,P2.2,P2.3,P2.4键盘使用P1* 实验效果 : 按矩阵键盘分别
12、显示在数码管上面显示十六进制的0到F。* 注 意 :*/#include#define GPIO_DIG P0#define GPIO_KEY P1sbit LSA=P22;sbit LSB=P23;sbit LSC=P24;unsigned char code DIG_CODE17=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;/0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码unsigned char KeyValue;/用来存放读取到的键值unsigne
13、d char KeyState; /记录按键的状态,0没有,1有unsigned char DisplayData8;/用来存放要显示的8位数的值void Delay10ms(); /延时10msvoid KeyDown(); /检测按键函数void DigDisplay(); /动态显示函数/* 函 数 名 : main* 函数功能 : 主函数* 输 入 : 无* 输 出 : 无*/void main(void) KeyState=0; while(1) KeyDown(); if(KeyState=1) DisplayData7=DisplayData6; DisplayData6=Dis
14、playData5; DisplayData5=DisplayData4; DisplayData4=DisplayData3; DisplayData3=DisplayData2; DisplayData2=DisplayData1; DisplayData1=DisplayData0; DisplayData0=DIG_CODEKeyValue; KeyState=0; DigDisplay(); /* 函 数 名 : DigDisplay* 函数功能 : 使用数码管显示* 输 入 : 无* 输 出 : 无*/void DigDisplay() unsigned char i; unsig
15、ned int j; for(i=0;i8;i+) switch(i) /位选,选择点亮的数码管, case(0): LSA=0;LSB=0;LSC=0; break;/显示第0位 case(1): LSA=1;LSB=0;LSC=0; break;/显示第1位 case(2): LSA=0;LSB=1;LSC=0; break;/显示第2位 case(3): LSA=1;LSB=1;LSC=0; break;/显示第3位 case(4): LSA=0;LSB=0;LSC=1; break;/显示第4位 case(5): LSA=1;LSB=0;LSC=1; break;/显示第5位 case
16、(6): LSA=0;LSB=1;LSC=1; break;/显示第6位 case(7): LSA=1;LSB=1;LSC=1; break;/显示第7位 GPIO_DIG=DisplayDatai;/发送段码 j=10; /扫描间隔时间设定 while(j-); GPIO_DIG=0x00;/消隐 /* 函 数 名 : KeyDown* 函数功能 : 检测有按键按下并读取键值* 输 入 : 无* 输 出 : 无*/void KeyDown(void) unsigned int a=0; GPIO_KEY=0x0f; if(GPIO_KEY!=0x0f) Delay10ms(); a+; a=
17、0; if(GPIO_KEY!=0x0f) KeyState=1;/有按键按下 /测试列 GPIO_KEY=0X0F;/ Delay10ms(); switch(GPIO_KEY) case(0X07): KeyValue=0;break; case(0X0b): KeyValue=1;break; case(0X0d): KeyValue=2;break; case(0X0e): KeyValue=3;break;/ default: KeyValue=17; /检测出错回复17意思是把数码管全灭掉。 /测试行 GPIO_KEY=0XF0; Delay10ms(); switch(GPIO_KEY) case(0X70): KeyValue=KeyValue;break; case(0Xb0): KeyValue=KeyValue+4;break; case(0Xd0): KeyValue=KeyValue+8;break; case(0Xe0): KeyValue=KeyValue+12;break;/ default: KeyValue=17; while(a0;c-) for(b=38;b0;b-) for(a=130;a0;a-);
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1