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

📄 counter.c

📁 ATmega8515 avr单片机做的计数器程序
💻 C
字号:
/*********************************************
;Counter.c
;作者:胡进
;计数程序,T/C0工作在计数模式,显示在数码管上。
;2007年3月15日
*********************************************/

#include <avr/io.h>
#define uint unsigned int
#define uchar unsigned char

//数码管字型表,对应0~9
uchar Table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar Data[4]={0,0,0,0}; //显示初始值
uint CNT=0;              //初始计数值

void DelayMs(uint t)     //毫秒级延时子函数
{
 uint i;
 for(;t!=0;t--)
     {for(i=100;i!=0;i--) {;}} 
 }

//计数值处理子函数
//i为计数值;p为处理后存放数据的数组名
//功能为拆分千,百,十,个位数据,用于查表
void Process(uchar i,uchar *p)
{
 p[0]=i/1000;
 i=i%1000;
 p[1]=i/100;
 i=i%100;
 p[2]=i/10;
 i=i%10;
 p[3]=i;
 }

void Display(uchar *p)
{
 uchar i,sel=0x01;
 for(i=0;i<4;i++)
    {
	 PORTC=~sel;        //选通最右边的数码管
	 PORTD=Table[p[i]]; //送字型码
	 DelayMs(2);
	 sel=sel<<1;        //移位,以显示前一位
	 }
 }

void Init_io(void)             //端口初始化子程序
{
 DDRB=0x00;                    //设置B口为不带上拉电阻输入
 PORTB=0x00;
 DDRC=0xff;                    //设置C口为推挽1输出;             
 PORTC=0xff;
 DDRD=0xff;                    //设置D口为推挽1输出
 PORTD=0xff;    
 }

void main(void)  //主程序
{
 uchar push;
 Init_io();
 PORTC=0xff;     //熄灭所有数码管
 TCCR0=0x06;     //T/C0工作与计数方式,下降沿计数
 TCNT0=CNT;      //计数初始值为0
 while(1)
     {
	  push=TCNT0;
	  Process(push,Data);      //计数值处理
	  Display(Data);           //动态扫描显示
	  }
 }

⌨️ 快捷键说明

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