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

📄 smg.c

📁 AVR16单片机集成10位AD程序
💻 C
字号:
/*******************************************
  文件:SMG.C
  环境:编译为ICC AVR6.25A,仿真为AVR Studio4.10 
  硬件:ATMEGA16芯片
  日期:2006年12月10日 
  功能:驱动开发板上的数码管,滚动显示1、2、3、4、5、6
  备注:参考《AVR系列单片机C语言编程与应用实例》(清华大学出版社)
/******************************************/
#include <iom16v.h>			//包含型号头文件
#include <macros.h>			//包含"位"操作头文件
#include <stdio.h>			//标准输入输出头文件

#pragma data:code 
const SEGMENT[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,
		   0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

/*******************************************
函数名称: One_smg_display
功    能: 指定的数码管显示指定的内容
参    数: data--显示的内容(0-15)
	  	  number--指定的数码管(1-6)
返回值  : 无
/********************************************/
void One_smg_display(uchar data,uchar number)
{ 
 PORTB|=0x3F;			   //输出位选
 PORTA|=BIT(BITLK);		   //更新位选
 Delayus(50);			   //调整时序
 PORTA&=~BIT(BITLK);	   //锁存位选

 PORTB=SEGMENT[data];	   //输出段选
 PORTA|=BIT(SEGLK);		   //更新段选
 Delayus(50);			   //调整时序
 PORTA&=~BIT(SEGLK);	   //锁存段选
 
 number=~BIT(number-1);	   //调整位选(指定时是1~6,而操作的时候是0~5)
 PORTB=number;			   //输出位选
 PORTA|=BIT(BITLK);		   //更新位选
 Delayus(50);				   //调整时序
 PORTA&=~BIT(BITLK);	   //锁存位选
}
/*******************************************
函数名称: All_smg_display
功    能: 6个数码管显示指定的内容
参    数: *pdata--显示内容数组地址
返回值  : 无
/********************************************/
void All_smg_display(uchar *pdata)
{
 uchar i;
 for(i=0;i<6;i++)
 	{
	 One_smg_display(pdata[i],i+1);
	 Delayms(1);
	}
}
/*******************************************
函数名称: Cycle_smg_display
功    能: 6个数码管从右向左循环滚动显示指定的内容(循环一次)
参    数: *pdata--显示内容数组地址
返回值  : 无
/********************************************/
void Cycle_smg_display(uchar *pdata)
{
 uchar i,j;
 for(i=0;i<240;i++)			 //共滚动6次,每次内容显示40个循环
 { 
  for(j=0;j<6;j++)			 //扫描6个数码管
 	{
	 One_smg_display(pdata[(i/40+j)%6],j+1);//显示
	 Delayus(2000);			 //调整显示时间和亮度(时间越长亮度越高,但是太长数码管就闪了)
	}
 }
}

⌨️ 快捷键说明

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