⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 smg_run.c

📁 此程序是通过位选选取那位显示来实现数码管的显示。
💻 C
字号:

#include <iom16v.h>
#include <macros.h>


/***********宏定义*************/
#define  uchar unsigned char 
#define  uint unsigned int

//将数据保存在程序存储器中,单片机数据存储器很小,可以将不变动的数据放在程序存储器中。
#pragma data:code                            
const  table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
		        0x80,0x90,0x88,0x83,0xc6,0x98,0x86,0x8e};
#pragma data:data  //设置数据区回到数据存储区

/***************************************************
宏定义名称:IO端口操作宏定义。
功      能:实现数码管的位选。
***************************************************/
#define SET_WEI1 PORTA|=BIT(0)   
#define SET_WEI2 PORTA|=BIT(1)
#define SET_WEI3 PORTA|=BIT(2)
#define SET_WEI4 PORTA|=BIT(3)
#define SET_WEI5 PORTA|=BIT(4)
#define SET_WEI6 PORTA|=BIT(5)

#define CLR_WEI1 PORTA&=~BIT(0)
#define CLR_WEI2 PORTA&=~BIT(1)
#define CLR_WEI3 PORTA&=~BIT(2)
#define CLR_WEI4 PORTA&=~BIT(3)
#define CLR_WEI5 PORTA&=~BIT(4)
#define CLR_WEI6 PORTA&=~BIT(5)
#define CLR_ALL  PORTA&=0XE0
                          

/*******************************************
函数名称: IO口初始化程序
功    能: 实现IO初始化
参    数: 无
返 回 值: 无
/********************************************/
void port_init(void)
{
 PORTA = 0x00;
 DDRA  = 0x3F;
 PORTB = 0xFF;
 DDRB  = 0xFF;
}

/*******************************************
函数名称: 软件延时函数
功    能: 实现软件延时
参    数: ms--延时的毫秒数
返 回 值: 无
/********************************************/
void Delay_ms(uint ms)
{
   unsigned int i,j;
   for(i=0;i<ms;i++)
     for(j=0;j<1141;j++);//1141是在8MHz晶振下,通过软件仿真反复实验得到的数值
}

/*************************************************************
函数名称: 数码管显示函数。
功    能: 实现在某位数码管上显示要显示的数值。
参    数: value--数码管上要显示的值;wei--在哪一位数码管上显示
返 回 值: 无
/************************************************************/
void disp_smg(uchar value,uchar wei)
{
  PORTB=value;//给数码管赋值
  switch(wei)
    {
	  case 1:SET_WEI1;CLR_WEI2;CLR_WEI3;CLR_WEI4;CLR_WEI5;CLR_WEI6;break;
	  case 2:CLR_WEI1;SET_WEI2;CLR_WEI3;CLR_WEI4;CLR_WEI5;CLR_WEI6;break;
	  case 3:CLR_WEI1;CLR_WEI2;SET_WEI3;CLR_WEI4;CLR_WEI5;CLR_WEI6;break;
	  case 4:CLR_WEI1;CLR_WEI2;CLR_WEI3;SET_WEI4;CLR_WEI5;CLR_WEI6;break;
	  case 5:CLR_WEI1;CLR_WEI2;CLR_WEI3;CLR_WEI4;SET_WEI5;CLR_WEI6;break;
	  case 6:CLR_WEI1;CLR_WEI2;CLR_WEI3;CLR_WEI4;CLR_WEI5;SET_WEI6;break;
	  default:break;
	}
  Delay_ms(2);//延时2ms
  CLR_ALL;//关显示
}

/********************************************
函数名称: 主函数
功    能: 实现函数主体功能。
参    数: 无
返 回 值: 无
********************************************/
void main(void)
{
  uchar i;
  port_init();//端口初始化
  while(1)
    {
	  for(i=1;i<7;i++)
	    disp_smg(table[i],i);
	}
  
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -