数码显示实验报告C语言stm
时间: 2023-07-02 15:16:33 浏览: 140
c语言实验报告
以下是一个基本的数码管动态显示的C语言代码(使用STM32开发板),仅供参考:
```
#include "stm32f10x.h" //STM32头文件
//数码管的引脚定义
#define LSA GPIO_Pin_8 //P2.2
#define LSB GPIO_Pin_9 //P2.3
#define LSC GPIO_Pin_10 //P2.4
#define DIO GPIO_Pin_0 //P1.0
#define SCLK GPIO_Pin_1 //P1.1
//数码管显示的数据
unsigned char code smgduan[]=//0~F的显示码
{
// 0 1 2 3 4 5 6 7 8 9 A B C D E F
0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e
};
//延时函数
void Delay(unsigned int t)
{
unsigned int i;
while(t--)
{
for(i=0;i<1000;i++);
}
}
//发送一个字节到数码管
void SendByte(unsigned char dat)
{
unsigned char i;
for(i=0;i<8;i++)
{
GPIO_ResetBits(GPIOA,SCLK); //初始状态,时钟信号为低电平
GPIO_WriteBit(GPIOA,DIO,dat&0x01); //将数据的最低位赋值给DIO
dat>>=1; //数据右移一位,准备发送下一位
GPIO_SetBits(GPIOA,SCLK); //时钟信号为高电平,上升沿发送数据
}
}
//设置数码管显示的位数和显示的数值
void SetPos(unsigned char pos,unsigned char dat)
{
GPIO_SetBits(GPIOB,LSA); //锁存器输入方式为并行输入
GPIO_SetBits(GPIOB,LSB);
GPIO_SetBits(GPIOB,LSC);
SendByte(0x44); //发送设置命令
GPIO_ResetBits(GPIOB,LSA); //锁存器输入方式切换为单个输入
SendByte(pos<<1); //设置要显示的数码管位置
SendByte(dat); //设置要显示的数值
}
int main()
{
unsigned char i,j;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB,ENABLE); //使能GPIOA和GPIOB时钟
//配置数码管的引脚为输出模式
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10; //P1.0、P1.1、P2.2、P2.3、P2.4
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
//配置数码管驱动芯片的引脚为输出模式
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10; //P2.2、P2.3、P2.4
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
while(1)
{
for(i=0;i<8;i++) //依次显示八个数码管
{
SetPos(i,smgduan[i]); //设置要显示的数码管位置和数值
Delay(500); //延时,控制数码管动态显示的速度
}
}
}
```
这个代码通过循环依次控制八个数码管的显示,同时实现了数码管动态显示的效果。在实际应用中,可以根据需要进行修改和优化。
阅读全文