📄 smg_run.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 + -