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