32单片机用数码管显示周期
时间: 2024-04-21 15:29:36 浏览: 15
32单片机用数码管显示周期,具体实现方法如下:
1. 首先需要将计时器设置为定时器模式,并设置定时时间;
2. 在定时器中断服务程序中进行计数器计数,同时更新数码管的显示值;
3. 将计数值转换为数码管显示的数字值;
4. 将转换后的数字值依次输出到数码管对应的IO口上,实现数码管的显示。
具体实现方法需要根据使用的单片机和数码管型号进行选择和编写相应的程序。需要注意的是,因为数码管的刷新频率有限,所以在定时器中断服务程序中,要控制每次更新数码管的显示值的时间,以保证显示的稳定性。
相关问题
C51单片机LED数码管显示的程序设计过程
C51单片机LED数码管显示的程序设计步骤如下:
1. 定义端口
首先,需要定义使用的端口和引脚。如下所示:
```c
sbit P2_0 = P2^0; // 数码管的A引脚
sbit P2_1 = P2^1; // 数码管的B引脚
sbit P2_2 = P2^2; // 数码管的C引脚
sbit P2_3 = P2^3; // 数码管的D引脚
sbit P2_4 = P2^4; // 数码管的E引脚
sbit P2_5 = P2^5; // 数码管的F引脚
sbit P2_6 = P2^6; // 数码管的G引脚
sbit P2_7 = P2^7; // 数码管的DP引脚
sbit P1_0 = P1^0; // 第1个数码管的选择引脚
sbit P1_1 = P1^1; // 第2个数码管的选择引脚
sbit P1_2 = P1^2; // 第3个数码管的选择引脚
sbit P1_3 = P1^3; // 第4个数码管的选择引脚
```
2. 定义数码管显示的数字
接着,需要定义要显示的数字。例如,要显示数字1234,可以这样定义:
```c
unsigned char code ledData[]={
0x3f, // 0
0x06, // 1
0x5b, // 2
0x4f, // 3
0x66, // 4
0x6d, // 5
0x7d, // 6
0x07, // 7
0x7f, // 8
0x6f, // 9
};
```
其中,ledData数组存储了0到9的数字对应的LED数码管的状态。
3. 主函数中的程序设计
在主函数中,需要做以下几个步骤:
- 初始化
- 数码管扫描显示
- 循环延时
初始化代码如下:
```c
void init(){
P1_0 = P1_1 = P1_2 = P1_3 = 1; // 数码管选择引脚初始化为高电平
P2 = 0xff; // 数码管显示引脚初始化为低电平
}
```
数码管扫描显示代码如下:
```c
void display(unsigned char *p){
unsigned char i;
for(i=0; i<4; i++){
switch(i){
case 0: P1_0 = 0; break;
case 1: P1_1 = 0; break;
case 2: P1_2 = 0; break;
case 3: P1_3 = 0; break;
}
P2 = *(p+i);
delay(1); // 扫描显示周期为1ms
P2 = 0xff; // 关闭数码管
switch(i){
case 0: P1_0 = 1; break;
case 1: P1_1 = 1; break;
case 2: P1_2 = 1; break;
case 3: P1_3 = 1; break;
}
}
}
```
循环延时代码如下:
```c
void delay(unsigned int i){
while(i--);
}
```
4. 调用函数
最后,在主函数中调用上述函数即可完成数码管的显示。例如,要显示数字1234,可以这样写:
```c
void main(){
init();
while(1){
display(ledData+1);
display(ledData+2);
display(ledData+3);
display(ledData+4);
}
}
```
注意,这里使用了ledData+1、ledData+2、ledData+3、ledData+4,因为ledData数组的第一个元素对应数字0,所以要从第二个元素开始显示数字。
单片机在数码管上温度显示程序
这是一个基于51单片机的数码管温度显示程序,使用的是DS18B20温度传感器。
```c
#include<reg52.h>
#include<intrins.h>
typedef unsigned char u8;
typedef unsigned int u16;
#define DQ P3_7
#define LED P2
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
u8 code ledCode[]={ //显示0~9的编码
0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f
};
u8 tempH,tempL; //温度高位和低位
void delay(u16 i){
while(i--);
}
void delay1ms(){
u8 i,j;
for(i=12;i>0;i--)
for(j=32;j>0;j--);
}
void init_DS18B20(){
DQ=1;
_nop_();
_nop_();
DQ=0;
delay(100);
DQ=1;
delay1ms();
}
u8 read_DS18B20(){
u8 i,dat=0;
for(i=8;i>0;i--){
DQ=0;
_nop_();
_nop_();
dat>>=1;
DQ=1;
_nop_();
_nop_();
if(DQ) dat|=0x80;
else dat&=0x7f;
}
return dat;
}
void write_DS18B20(u8 dat){
u8 i;
for(i=8;i>0;i--){
DQ=0;
_nop_();
_nop_();
DQ=dat&0x01;
dat>>=1;
_nop_();
_nop_();
DQ=1;
}
}
void change_DS18B20(){
init_DS18B20();
write_DS18B20(0xcc);
write_DS18B20(0x44);
}
void readTemp_DS18B20(){
init_DS18B20();
write_DS18B20(0xcc);
write_DS18B20(0xbe);
tempL=read_DS18B20();
tempH=read_DS18B20();
}
void display(u8 dat,u8 num){
switch(num){
case 1:
LSA=1;LSB=1;LSC=1;break;
case 2:
LSA=0;LSB=1;LSC=1;break;
case 3:
LSA=1;LSB=0;LSC=1;break;
case 4:
LSA=0;LSB=0;LSC=1;break;
case 5:
LSA=1;LSB=1;LSC=0;break;
case 6:
LSA=0;LSB=1;LSC=0;break;
case 7:
LSA=1;LSB=0;LSC=0;break;
case 8:
LSA=0;LSB=0;LSC=0;break;
}
LED=ledCode[dat];
delay1ms();
LED=0x00;
}
void main(){
u8 i;
while(1){
change_DS18B20(); //启动温度转换
readTemp_DS18B20(); //读取温度值
display(tempH/10,1); //显示十位
display(tempH%10,2); //显示个位
display(tempL/10,3); //显示小数点前一位
display(tempL%10,4); //显示小数点后一位
for(i=0;i<50;i++) //延时约1s
delay1ms();
}
}
```
该程序主要实现了以下功能:
1. 初始化DS18B20温度传感器;
2. 启动温度转换并读取温度值;
3. 将温度值分解成高位和低位,分别显示在数码管上;
4. 使用延时函数实现温度的周期性显示,约每秒钟更新一次。
需要注意的是,DS18B20温度传感器的数据线应连接到51单片机的P3.7口,且需要在程序中进行定义。同时,数码管的连接方式应根据具体硬件连接进行调整。
相关推荐
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)