问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

单片机的跑马灯程序 求注释 尽量每行都注释 我几乎看不懂啊! 谢谢= =!!明天就要答辩啦!!快的话加分加

发布网友 发布时间:2022-04-23 14:03

我来回答

3个回答

热心网友 时间:2023-10-17 05:43

哈哈 这不难啊!!!!…………单片机的跑马灯程序主要用到了延时子程序,clr,lcall,ajmp 指令, 通过轮流点亮p1.0 …..P1.7 实现效果。你可以通过此程序的学习, 进一步掌握单片机的IO端口操作。
汇编语言参考程序:

org 0000h ;开始
ajmp loop
org 0080h ;到0030h处避开00-30的敏感地址
loop:
mov p1,#0ffh ;关闭所有灯
clr p1.0 ;点亮灯p1.0
lcall delay ;延时一段时间?
clr p1.1 ;点亮灯p1.1
lcall delay
clr p1.2 ;点亮灯p1.2
lcall delay
clr p1.3 ;点亮灯p1.3
lcall delay
clr p1.4 ;点亮灯p1.4
lcall delay

clr p1.5 ;点亮灯p1.5
lcall delay
clr p1.6 ;点亮灯p1.6
lcall delay
clr p1.7 ;点亮灯p1.7
lcall delay
AJMP LOOP ;到最开始loop处重新运行
delay: mov r5,#20 ;延时。
d1: mov r6,#40
d2: mov r7,#248
djnz r7,$
djnz r6,d2
djnz r5,d1
ret
end
 

c语言参考程序:

#include<reg51.h> //头文件
#define uchar unsigned char //宏定义,为方便编程
#define uint unsigned int
#define LED P1 //宏定义,将P1口定义为LED
uchar led_value[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0x00}; //定义一数组,内存放跑马灯数据
uchar *p=led_value; //定义指针,指向跑马灯数组首地址
void delay() //延迟函数,与跑马灯跳动频率有关
{
uchar ii,jj;
for(ii=0;ii<200;ii++)
for(jj=0;jj<200;jj++);
}
void run_led() //跑马灯运行函数
{
while(*p!=0x00)
{
LED=*p; //将数组中数据取出赋给P1口
p++; //预取下一数据
delay(); //延迟
}
p=led_value;
}
char code SST516[3] _at_ 0x003b; //仿真器保留
main() //主函数
{
while(1)
run_led(); //上电即运行跑马灯程序
}

哈哈 !!!哈哈哈!!!!打字 打得手都是痛的 …………希望对你有所帮助……

热心网友 时间:2023-10-17 05:43

/*-----------------------------------------------
名称:IO口高低电平控制
论坛:www.doflye.net
编写:shifang
日期:2009.5
修改:无
内容:花样灯一般有两种方法实现:
1、程序循环执行
2、查表法
这里我们两种都使用一下
------------------------------------------------*/
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

/*------------------------------------------------
花样表格
------------------------------------------------*/
unsigned char code seg[]={0x7f,0xbf,0xdf,0xef,
0xf7,0xfb,0xfd,0xfe,
0xff,0xff,0x00,0x00,
0x55,0x55,0xaa,0xaa
};//rom允许情况可以无限添加

void Delay(unsigned int t); //函数声明
/*------------------------------------------------
主函数
------------------------------------------------*/
main()
{
unsigned char i; //定义一个无符号字符型
//局部变量 i 取值范围 0~255
while(1)
{
P1=0xFE; //第1个LED亮
for(i=0;i<8;i++)
{
Delay(20000);
P1 <<=1;
}

P1=0x7F; //第8个LED亮
for(i=0;i<8;i++)
{
Delay(20000);
P1 >>=1;
}

P1=0xFE; //第1个LED亮
for(i=0;i<8;i++)
{
Delay(20000);
P1 <<=1;
P1 |=0x01;
}

P1=0x7F; //第8个LED亮
for(i=0;i<8;i++)
{
Delay(20000);
P1 >>=1;
P1 |=0x80;
}
//下面通过查表方法获得花样参数
for(i=0;i<16;i++)//查表可以简单的显示各种花样 实用性更强
{
Delay(20000);
P1=seg[i];
}
}

}

/*------------------------------------------------
延时函数,含有输入参数 unsigned int t,无返回值
unsigned int 是定义无符号整形变量,其值的范围是
0~65535
------------------------------------------------*/
void Delay(unsigned int t)
{
while(--t);
}追问能不能帮我注释上面我的程序啊 TAT TAT TAT

参考资料:www.doflye.net 单片机爱好者论坛

热心网友 时间:2023-10-17 05:44

下面就是我要问的单片机程序。谢谢啦。尽量详细点啊!
4. 利用GP32模拟霓虹灯效果。用4位数码管作为显示屏,显示效果有:闪烁、从左到右、从右到左、从中间往两边、从两边往中间。各效果切换频率可由键盘设定,范围为0.1~5秒。

//-------------------------------------------------------------------------*
//工 程 名: *
//硬件连接: *
//程序描述: *
//目 的: *
//说 明: *
//日 期: *
//-------------------------------------------------------------------------*

#include "Includes.h" //总头文件

void delay(int n)
{
int i;
for(i=0;i<n;i++) ;
}

const unsigned char Table[16]={0x3F,0x06,0x5B,0x4F,0x66,
0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7c,0x39,0x5f,0x79,0x71}; //显示码表
int sec=0;
unsigned char key=0xff;
//Timer1Init:定时器初始化----------------------------------------*
//功能:将定时器初始化为一秒钟一次溢出中断。
//-------------------------------------------------------------------------*
void Timer1Init(void)
{
//不允许溢出中断、不启动计数、分频因子 = 64
T1SC=0b00100110;
//计数器寄存器初值=0x0000
T1CNTH=0x00; T1CNTL=0x00;
//1秒产生1次溢出中断,预置寄存器=1×(2457600/64)=9600
T1MODH=0x96; T1MODL=0x00;
}
char key_scan(void)
{ int i;
unsigned char line, row;
unsigned char k_value, key;
const unsigned char KBTable[] = {
0x77,'7',0x7B,'4',0x7D,'1',0x7E,'0',
0xB7,'B',0xBB,'F',0xBD,'2',0xBE,'A',
0xD7,'9',0xDB,'6',0xDD,'E',0xDE,'8',
0xE7,'C',0xEB,'D',0xED,'3',0xEE,'5',
0x00,0x00 };
// PTD0~PTD3输出0
PTD=PTD & 0xF0;
if ((PTD & 0xf0) == 0xf0)
return 0xff; //无键按下
row = PTD;
//延时,消除抖动
delay(100);
if (row != PTD)
return 0xff; //判为抖动,无键按下
line=0xFE;
for (i=0;i<4;i++)
{
PTD = line; //输出扫描信号
row=PTD; //读键盘口
if ((row & 0xf0) != 0xf0)
break;
line=(line<<1)+1;
}
if (i==4) return 0xff;
k_value = (row & 0xf0) | (line & 0x0f) ;
for (key=0; key<32; key+=2)
if (k_value == KBTable[key])
break;
return KBTable[key+1];
}

void shanshuo(unsigned char i)
{

while(sec<i)
{
PTC=0xf0;
PTB= Table[i];
delay(5000);
PTB=0x00;
delay(5000);
}
}

void LtoR(unsigned char i)
{
int j;

while(sec<i)
{
for(j=0;j<4;j++)
{
PTC= ~(0b00000001 << j);
PTB=Table[i];
delay(5000);
PTB=0x00;
delay(5000);
}
}
}

void RtoL(unsigned char i)
{
int j;

while(sec<i)
{
for(j=0;j<4;j++)
{
PTC= ~(0b00001000 >> j);
PTB=Table[i];
delay(5000);
PTB=0x00;
delay(5000);
}
}
}

void OtoI(unsigned char i)
{
int j;

while(sec<i)
{
PTC=0x06;
PTB=Table[i];
delay(5000);
PTB=0x00;
delay(5000);

PTC=0x09;
PTB=Table[i];
delay(5000);
PTB=0x00;
delay(5000);
}
}

void ItoO(unsigned char i)
{
int j;

while(sec<i)
{
PTC=0x09;
PTB=Table[i];
delay(5000);
PTB=0x00;
delay(5000);

PTC=0x06;
PTB=Table[i];
delay(5000);
PTB=0x00;
delay(5000);
}
}

void Timer1Over(void)
{
DisableMCUInt();
sec++; //秒加1
T1SC&= ~(1<<7); //清除定时器溢出标志位
EnableMCUInt();
}

void check(void)
{
if((T1SC & 0x80)==0x80)
{
sec++; //秒加1
T1SC&= ~(1<<7); //清除定时器溢出标志位
}
}

//主函数
void main()
{
unsigned char delaysec=2;
unsigned char key_scan(void);

int i,j;
void check(void);
void delay(int n);

DisableMCUInt(); //禁止总中断
MCUInit(); //芯片初始化

Timer1Init(); //定时器1的初始化
T1SC|=(1<<6); //令T1SC.6=1,开放Timer1溢出中断
T1SC &= ~(1<<5); //清T1SC.5,允许定时器1计数
EnableMCUInt(); //开总中断

//在此处添加用户程序
DDRD=0x0f, PTDPUE=0xf0; //PTD0~3输出,PTD4~7带上拉输入
DDRB = 0xff, DDRC = 0xff;
PTC = 0xf0, PTB = 0x40; //显示'-'
while(1)
{
key=key_scan();
if (key!=0xff)
{
if (key >='0' & key <='9')
{
delaysec = key - 0x30;
}
else
{
delaysec = key - 0x37;
}
}
sec=0;
shanshuo(delaysec);

sec=0;
LtoR(delaysec);
sec=0;
RtoL(delaysec);
sec=0;
OtoI(delaysec);
sec=0;
ItoO(delaysec);
sec=0;
}
}

热心网友 时间:2023-10-17 05:43

哈哈 这不难啊!!!!…………单片机的跑马灯程序主要用到了延时子程序,clr,lcall,ajmp 指令, 通过轮流点亮p1.0 …..P1.7 实现效果。你可以通过此程序的学习, 进一步掌握单片机的IO端口操作。
汇编语言参考程序:

org 0000h ;开始
ajmp loop
org 0080h ;到0030h处避开00-30的敏感地址
loop:
mov p1,#0ffh ;关闭所有灯
clr p1.0 ;点亮灯p1.0
lcall delay ;延时一段时间?
clr p1.1 ;点亮灯p1.1
lcall delay
clr p1.2 ;点亮灯p1.2
lcall delay
clr p1.3 ;点亮灯p1.3
lcall delay
clr p1.4 ;点亮灯p1.4
lcall delay

clr p1.5 ;点亮灯p1.5
lcall delay
clr p1.6 ;点亮灯p1.6
lcall delay
clr p1.7 ;点亮灯p1.7
lcall delay
AJMP LOOP ;到最开始loop处重新运行
delay: mov r5,#20 ;延时。
d1: mov r6,#40
d2: mov r7,#248
djnz r7,$
djnz r6,d2
djnz r5,d1
ret
end
 

c语言参考程序:

#include<reg51.h> //头文件
#define uchar unsigned char //宏定义,为方便编程
#define uint unsigned int
#define LED P1 //宏定义,将P1口定义为LED
uchar led_value[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0x00}; //定义一数组,内存放跑马灯数据
uchar *p=led_value; //定义指针,指向跑马灯数组首地址
void delay() //延迟函数,与跑马灯跳动频率有关
{
uchar ii,jj;
for(ii=0;ii<200;ii++)
for(jj=0;jj<200;jj++);
}
void run_led() //跑马灯运行函数
{
while(*p!=0x00)
{
LED=*p; //将数组中数据取出赋给P1口
p++; //预取下一数据
delay(); //延迟
}
p=led_value;
}
char code SST516[3] _at_ 0x003b; //仿真器保留
main() //主函数
{
while(1)
run_led(); //上电即运行跑马灯程序
}

哈哈 !!!哈哈哈!!!!打字 打得手都是痛的 …………希望对你有所帮助……

热心网友 时间:2023-10-17 05:43

/*-----------------------------------------------
名称:IO口高低电平控制
论坛:www.doflye.net
编写:shifang
日期:2009.5
修改:无
内容:花样灯一般有两种方法实现:
1、程序循环执行
2、查表法
这里我们两种都使用一下
------------------------------------------------*/
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

/*------------------------------------------------
花样表格
------------------------------------------------*/
unsigned char code seg[]={0x7f,0xbf,0xdf,0xef,
0xf7,0xfb,0xfd,0xfe,
0xff,0xff,0x00,0x00,
0x55,0x55,0xaa,0xaa
};//rom允许情况可以无限添加

void Delay(unsigned int t); //函数声明
/*------------------------------------------------
主函数
------------------------------------------------*/
main()
{
unsigned char i; //定义一个无符号字符型
//局部变量 i 取值范围 0~255
while(1)
{
P1=0xFE; //第1个LED亮
for(i=0;i<8;i++)
{
Delay(20000);
P1 <<=1;
}

P1=0x7F; //第8个LED亮
for(i=0;i<8;i++)
{
Delay(20000);
P1 >>=1;
}

P1=0xFE; //第1个LED亮
for(i=0;i<8;i++)
{
Delay(20000);
P1 <<=1;
P1 |=0x01;
}

P1=0x7F; //第8个LED亮
for(i=0;i<8;i++)
{
Delay(20000);
P1 >>=1;
P1 |=0x80;
}
//下面通过查表方法获得花样参数
for(i=0;i<16;i++)//查表可以简单的显示各种花样 实用性更强
{
Delay(20000);
P1=seg[i];
}
}

}

/*------------------------------------------------
延时函数,含有输入参数 unsigned int t,无返回值
unsigned int 是定义无符号整形变量,其值的范围是
0~65535
------------------------------------------------*/
void Delay(unsigned int t)
{
while(--t);
}追问能不能帮我注释上面我的程序啊 TAT TAT TAT

参考资料:www.doflye.net 单片机爱好者论坛

热心网友 时间:2023-10-17 05:44

下面就是我要问的单片机程序。谢谢啦。尽量详细点啊!
4. 利用GP32模拟霓虹灯效果。用4位数码管作为显示屏,显示效果有:闪烁、从左到右、从右到左、从中间往两边、从两边往中间。各效果切换频率可由键盘设定,范围为0.1~5秒。

//-------------------------------------------------------------------------*
//工 程 名: *
//硬件连接: *
//程序描述: *
//目 的: *
//说 明: *
//日 期: *
//-------------------------------------------------------------------------*

#include "Includes.h" //总头文件

void delay(int n)
{
int i;
for(i=0;i<n;i++) ;
}

const unsigned char Table[16]={0x3F,0x06,0x5B,0x4F,0x66,
0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7c,0x39,0x5f,0x79,0x71}; //显示码表
int sec=0;
unsigned char key=0xff;
//Timer1Init:定时器初始化----------------------------------------*
//功能:将定时器初始化为一秒钟一次溢出中断。
//-------------------------------------------------------------------------*
void Timer1Init(void)
{
//不允许溢出中断、不启动计数、分频因子 = 64
T1SC=0b00100110;
//计数器寄存器初值=0x0000
T1CNTH=0x00; T1CNTL=0x00;
//1秒产生1次溢出中断,预置寄存器=1×(2457600/64)=9600
T1MODH=0x96; T1MODL=0x00;
}
char key_scan(void)
{ int i;
unsigned char line, row;
unsigned char k_value, key;
const unsigned char KBTable[] = {
0x77,'7',0x7B,'4',0x7D,'1',0x7E,'0',
0xB7,'B',0xBB,'F',0xBD,'2',0xBE,'A',
0xD7,'9',0xDB,'6',0xDD,'E',0xDE,'8',
0xE7,'C',0xEB,'D',0xED,'3',0xEE,'5',
0x00,0x00 };
// PTD0~PTD3输出0
PTD=PTD & 0xF0;
if ((PTD & 0xf0) == 0xf0)
return 0xff; //无键按下
row = PTD;
//延时,消除抖动
delay(100);
if (row != PTD)
return 0xff; //判为抖动,无键按下
line=0xFE;
for (i=0;i<4;i++)
{
PTD = line; //输出扫描信号
row=PTD; //读键盘口
if ((row & 0xf0) != 0xf0)
break;
line=(line<<1)+1;
}
if (i==4) return 0xff;
k_value = (row & 0xf0) | (line & 0x0f) ;
for (key=0; key<32; key+=2)
if (k_value == KBTable[key])
break;
return KBTable[key+1];
}

void shanshuo(unsigned char i)
{

while(sec<i)
{
PTC=0xf0;
PTB= Table[i];
delay(5000);
PTB=0x00;
delay(5000);
}
}

void LtoR(unsigned char i)
{
int j;

while(sec<i)
{
for(j=0;j<4;j++)
{
PTC= ~(0b00000001 << j);
PTB=Table[i];
delay(5000);
PTB=0x00;
delay(5000);
}
}
}

void RtoL(unsigned char i)
{
int j;

while(sec<i)
{
for(j=0;j<4;j++)
{
PTC= ~(0b00001000 >> j);
PTB=Table[i];
delay(5000);
PTB=0x00;
delay(5000);
}
}
}

void OtoI(unsigned char i)
{
int j;

while(sec<i)
{
PTC=0x06;
PTB=Table[i];
delay(5000);
PTB=0x00;
delay(5000);

PTC=0x09;
PTB=Table[i];
delay(5000);
PTB=0x00;
delay(5000);
}
}

void ItoO(unsigned char i)
{
int j;

while(sec<i)
{
PTC=0x09;
PTB=Table[i];
delay(5000);
PTB=0x00;
delay(5000);

PTC=0x06;
PTB=Table[i];
delay(5000);
PTB=0x00;
delay(5000);
}
}

void Timer1Over(void)
{
DisableMCUInt();
sec++; //秒加1
T1SC&= ~(1<<7); //清除定时器溢出标志位
EnableMCUInt();
}

void check(void)
{
if((T1SC & 0x80)==0x80)
{
sec++; //秒加1
T1SC&= ~(1<<7); //清除定时器溢出标志位
}
}

//主函数
void main()
{
unsigned char delaysec=2;
unsigned char key_scan(void);

int i,j;
void check(void);
void delay(int n);

DisableMCUInt(); //禁止总中断
MCUInit(); //芯片初始化

Timer1Init(); //定时器1的初始化
T1SC|=(1<<6); //令T1SC.6=1,开放Timer1溢出中断
T1SC &= ~(1<<5); //清T1SC.5,允许定时器1计数
EnableMCUInt(); //开总中断

//在此处添加用户程序
DDRD=0x0f, PTDPUE=0xf0; //PTD0~3输出,PTD4~7带上拉输入
DDRB = 0xff, DDRC = 0xff;
PTC = 0xf0, PTB = 0x40; //显示'-'
while(1)
{
key=key_scan();
if (key!=0xff)
{
if (key >='0' & key <='9')
{
delaysec = key - 0x30;
}
else
{
delaysec = key - 0x37;
}
}
sec=0;
shanshuo(delaysec);

sec=0;
LtoR(delaysec);
sec=0;
RtoL(delaysec);
sec=0;
OtoI(delaysec);
sec=0;
ItoO(delaysec);
sec=0;
}
}
求51单片机8个LED灯实现跑马灯左移的c语言程序??求每部的详细说明,好的...

如果电路是P1口控制LED,高电平灯亮:include "reg52.h"define uchar unsigned char void delay(void ){ uchar i,y;for(i=100;i&gt;0;i--){ y=200;while(y--);} } void main(void){ uchar i;uchar var=0x01;P1=0X00;while(1){ for(i=0;i&lt;7;i++){ P1= var;delay();var &lt;&lt;...

高手们!帮帮忙看看我的单片机跑马灯程序哪出问题了!!!

两个键盘都不按,显示第三种模式。你原来只是在起动的时候,按键才管用,要想更换模式,必须重新起动。现在增加了三行:“LJMP START ;本行可删除”,就可以在运行期间,更换模式。.ORG 0000H START:MOV P1, #255 CLR P1.6 MOV P2, #0 SETB P2.1 SETB P2.3 JNB P1.0, LOOPB J...

求个89c51单片机 汇编语言设计的LED跑马灯的程序

ajmp loop ; 跳转main继续循环 delay: mov r5,#20 ;延时子程序1闪烁灯调用 d1:mov r6,#20 d2: mov r7,#250 djnz r7,djnz r6,d2 djnz r5,d1(时间此处可自行设置)

哪你们学了多久才学会单片机啊!我早两年就想学了,可是到现在还是不会...

区别,能自己动手搭一个单片机的最小系统,然后就可以直接从程序入手,程序最好还是用 C 语言编程,从简单的跑马灯做起,逐渐深入,陆续可以做一些数码管、液晶、 DS1302 、 DS18B20 等电子元器件的应用,在深入就可以结合一些具体实例扩展一些中断、串口通讯等功能。

请给我翻译一下这个单片机51的程序(加注释)

LJMP MAIN ;转主程序MAIN org 0003h ;指定程序存放的地址 ljmp int0 ;转中断入口INT0 org 000Bh ;指定程序存放的地址 ljmp timer0 ;转定时中断入口timer0 MAIN: ;主程序 MOV SP,#60h ;设栈底60H mov TCON,#00000001b ;mov IE,#10000011b ;开中断 START: ;开始 mov A,#0fh ;送0F到A...

单片机流水灯程序,烧到单片机里,8个灯全亮,是怎么回事,下面使程序...

我有更好的答案推荐于2017-12-15 11:45:02 最佳答案 你这程序写得太复杂了吧,延时位置不对,主循环程序改成下面这样才行。while(1){ if(i!=8) { P2=table[i]; i++; while(num&lt;100);num=0; } else i=0;}还有:c3344c指出的:ET1=1;//这一行应改成ET0 = 1;TR1=1; //这一行应改成...

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
东风风神ax3和长安cs35这两台车的质量哪个更好? 有特别了解东风风神AX3的朋友吗?这款车1.5L的油耗怎么样 东风风神属于国产还是合资 农家酿土酒需要办证吗? 农家土烧酒的制作方法(土烧酒制作工艺流程视频) 农家土烧酒的制作方法(农家土烧酒的制作方法窍门) 家里鱼缸摆放什么最旺财 鱼缸放什么最旺盛 鱼缸放什么聚财最旺 宝宝脸红涂什么能好 用汇编语言编写跑马灯程序 mcs51系列单片机编程 (跑马灯) 51单片机 跑马灯程序 求单片机跑马灯c语言程序! 51单片机跑马灯程序 单片机跑马灯程序 单片机汇编语言跑马灯 单片机的跑马灯C程序如何编写八个LED灯依次点亮而且速度渐变的代码 怎么用单片机按键控制循环跑马灯??? 51单片机跑马灯程序c 单片机跑马灯如何编程! 51单片机设计跑马灯的程序用(c语言)编写 电子邮件什么格式 注册Apple ID的电子邮件地址应该怎么写? 手指背上长很多小痘痘 ID密码里填哪种格式的电子邮件? 怎么去掉背上的痘印啊? 我背上长那种小痘痘,不知道是不是传说中的“搭背疮”呀?求有效的治疗方法。 去痘痘小窍门 海尔热水器EC8002排污口怎么拆 c51编程 四个灯跑马灯 请问以下有关单片机跑马灯的C语言程序各语句的含义(详细) 用51单片机(汇编语言写)写一个跑马灯程序??知道的帮个忙写写。 如何用一个STC单片机做一个跑马灯,菜鸟一只,最好用详细的过程 求一段51单片机控制ws2812灯条的跑马灯程序 电脑的中央处理器指的是什么呀? 中央处理器是什么? 中央处理器的主要功能? 中央处理器主要由哪两部分组成简述它们的功? 如何消灭国字脸? 国字脸的女生如何变好看? 国字脸的矫正 怎样改变国字脸,国字脸太难看了 国字脸怎么办? 体现气质 国字脸MM如何用发型修脸型(组图) 国字脸太大了,怎么让脸更好看 国字脸适合修怎样的眉型? 怎样使国字脸变得很修长? 怎么样用化妆来修饰国字脸 国字脸的女生可以把腮红刷在下颌骨处修饰脸型吗?