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

📄 demo_6_5__.c

📁 CVAVR完整程序
💻 C
字号:
/*********************************************
File name			: demo_6_5.c
Chip type           : ATmega16
Program type        : Application
Clock frequency     : 4.000000 MHz
Memory model        : Small
External SRAM size  : 0
Data Stack size     : 256
*********************************************/

#include <mega16.h>
	#ifndef __SLEEP_DEFINED__
	#define __SLEEP_DEFINED__
	.EQU __se_bit=0x40
	.EQU __sm_mask=0xB0
	.EQU __sm_powerdown=0x20
	.EQU __sm_powersave=0x30
	.EQU __sm_standby=0xA0
	.EQU __sm_ext_standby=0xB0
	.EQU __sm_adc_noise_red=0x10
	.SET power_ctrl_reg=mcucr
	#endif
#include <delay.h>
flash unsigned char led_7[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
flash unsigned char position[6]={0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
flash unsigned char signal[10]={0x00,0x10,0x20,0x30,0x40,0x50,0x60,0x70,0x80,0x90};
unsigned char time[3];					// 时、分、秒计数
unsigned char dis_buff[6];				// 显示缓冲区,存放要显示的6个字符的段码值
unsigned char time_counter;				// 1秒计数器
unsigned char led_light;
bit point_on;					// 秒显示标志

void display(void)				// 扫描显示函数,执行时间12ms
{
	unsigned char i;
 	for(i=0;i<=5;i++)
	{
		PORTC = led_7[dis_buff[i]];
		if (point_on && ( i==2 || i==4 )) PORTC |= 0x80;	// (1)
		PORTA = position[i];
       	delay_ms(2);									// (2)
       	PORTA = 0xff;									// (3)
  	}
}

void time_to_disbuffer(void)			// 时间值送显示缓冲区函数
{
	unsigned char i,j=0;
	for (i=0;i<=2;i++)
	{
		dis_buff[j++] = time[i] % 10;
		dis_buff[j++] = time[i] / 10;
	}
	led_light=dis_buff[0];
}

void main(void)
{
    PORTC=0x00;		// PORTC初始化
    DDRC=0xFF;
    PORTA=0x3F;		// PORTA初始化
    DDRA=0xFC;
    PORTD=0x00;
    DDRD=0xF0;
    time[2] = 23; time[1] = 58; time[0] = 55;	// 时间初值23:58:55
    time_to_disbuffer();

    while (1)
    {
	    display();						// 显示扫描,执行时间12ms
	    PORTD=signal[led_light];
	    if (++time_counter >= 40)
	    {
		    time_counter = 0;				// (4)
		    point_on = ~point_on;			// (5)
		    if (++time[0] >= 60)
		    {
			    time[0] = 0;
			    if (++time[1] >= 60)
			    {
				    time[1] = 0;
				    if (++time[2] >= 24) time[2] = 0;
			    }
		    }
		    time_to_disbuffer();
	    }
        delay_ms(13);					// 延时13ms,可进行其它处理(6)

    }
}

⌨️ 快捷键说明

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