介绍一些基础知识
单片机实验板
普中51单片机
软件 keil 和 stc-isp
我们安装的是 Keil5 C51 另外的版本 比如 Keil5 MDK 是用来开发 stm32的
单片机介绍
是什么
它是一块芯片 集成电路 英文Micro Controller Unit,简称MCU
内部集成了CPU、RAM、ROM、IO口输入/输出设备、定时器、中断系统、通讯接口等一系列电脑的常用硬件功能
单片机的任务是信息采集(依靠传感器)、处理(依靠CPU)和硬件设备(例如电机,LED等)的控制
单片机跟计算机相比,单片机算是一个袖珍版计算机,一个芯片就能构成完整的计算机系统。但在性能上,与计算机相差甚远,但单片机成本低、体积小、结构简单,在生活和工业控制领域大有所用
学习使用单片机是了解计算机原理与结构的最佳选择 要学STM32 先花点时间入门51
型号
51 单片机是对所有兼容 Intel 8031 指令系统的单片机的统称。有很多公司 做单片机 有很多型号:
Intel(英特尔)的:i80C31、i80C51、i87C51,i80C32、i80C52、i87C52 等;
ATMEL(艾德梅尔)的:AT89C51、AT89C52、AT89C2051,AT89S51(RC),AT89S52 (RC)等;
Philips(飞利浦)、华邦、Dallas(达拉斯)、Siemens(西门子)等公司的许多产品;
STC(国产宏晶)单片机:STC89C51、STC89C52、STC89C516、STC90C516 等众多品牌。
能做什么
单片机目前的应用可以说是铺天盖地,比如说家里的电饭煲、微波炉、电磁炉、冰箱、空调、洗衣机,内部就是用单片机加不同的外围电路实现的。 还有就是共享单车、共享充电宝、充电桩、指纹锁这些就是属于物联网的一些应用,内部也是单片机配合不同电路实现。
如何学
C语言基础
数电模电很少的基础
跟着做
调试
兴趣… 作品 竞赛 考研 工作…
单片机原理介绍
单片机内部结构
单片机管脚图
单片机最小系统
开发板原理图
KeilC51安装
安装破解
工程项目建立
工程项目设置 魔术棒 点一下 output 生成hex 打钩 在编译生成hex文件
使用stc-isp 把hex文件烧录到 单片机内部
烧录之前记得 安装 ch340 驱动
直接安装 就可以
点亮LED灯
#include<reg51.h>
void delay()
{
int i,j;
for(i=0;i<1000;i++)
for(j=0;j<100;j++);
}
int main()
{
while(1)
{
P2 = 0xfe;
delay();
P2 = 0xff;
delay();
}
}
了解 led 电路原理
了解 单片机 IO口 和 电路图之间的联系
熟悉 二进制 十六进制
十进制 | 二进制 | 十六进制 |
---|---|---|
0 | 0 | 0 |
1 | 1 | 1 |
2 | 10 | 2 |
3 | 11 | 3 |
4 | 100 | 4 |
5 | 101 | 5 |
6 | 110 | 6 |
7 | 111 | 7 |
8 | 1000 | 8 |
9 | 1001 | 9 |
10 | 1010 | A |
11 | 1011 | B |
12 | 1100 | C |
13 | 1101 | D |
14 | 1110 | E |
15 | 1111 | F |
C51数据类型
8个LED灯移位
向右移位 >> 位运算 或 |
#include<reg51.h>
unsigned char leds,i;
void delay()
{
int i,j;
for(i=0;i<1000;i++)
for(j=0;j<10;j++);
}
int main()
{
leds = 0x7f; //0111 1111
//1011 1111
//1101 1111
while(1)
{
leds = 0x7f;
for(i=0;i<8;i++)
{
P2 = leds;
delay();
leds = (leds>>1)|0x80;
}
}
}
通过数组完成
#include<reg51.h>
unsigned char leds,i;
unsigned char led_s[8]={0x7f,0xbf ,0xdf ,0xef ,0xf7 ,0xfb ,0xfd ,0xfe};
void delay()
{
int i,j;
for(i=0;i<1000;i++)
for(j=0;j<10;j++);
}
int main()
{
leds = 0x7f;//0111 1111
//1011 1111
//1101 1111....
while(1)
{
for(i=0;i<8;i++)
{
P2 = led_s[i];
delay();
}
}
}
发现Keil 的tab键是2个空格
蜂鸣器
//蜂鸣器模块 三个脚 VCC GND I/O--P1.0
#include<reg51.h>
sbit feng = P1^0; //sbit定义IO口
unsigned char leds,i;
unsigned char led_s[8]={0x7f,0xbf ,0xdf ,0xef ,0xf7 ,0xfb ,0xfd ,0xfe};
void delay()
{
int i,j;
for(i=0;i<1000;i++)
for(j=0;j<10;j++);
}
void delay_1()//蜂鸣器小延时
{
unsigned int i,j;
for(i=0;i<6000;i++);
}
int main()
{
feng = 0; //蜂鸣器
leds = 0x7f;
while(1)
{
for(i=0;i<8;i++)
{
P2 = led_s[i];
delay();
}
//蜂鸣器响一次
feng = 1;
delay_1();//蜂鸣器小延时
feng = 0;
}
}
静态数码管实验
//0-9循环显示
#include "reg51.h"
typedef unsigned int uint;
typedef unsigned char uchar;
#define duanma P0
uchar duanmas[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar n=0;
void delay()
{
int i,j;
for(i=0;i<1000;i++)
for(j=0;j<100;j++);
}
void main()
{
P2 = 0x0c; //138译码器 选择哪个数码管 P2.2 P2.3 P2.4三个脚决定
while(1)
{
duanma = duanmas[n];//查表得到短码给 P0
delay();
n++;
if(n==10)
n=0;
}
}
数码管动态扫描
//0-9循环显示
#include "reg51.h"
typedef unsigned int uint;
typedef unsigned char uchar;
#define duanma P0
uchar duanmas[18]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};
uchar s[8]={8,2,4,17,17,17,17,17};
uint n;
void delay()
{
int i,j;
for(i=0;i<10;i++)
for(j=0;j<10;j++);
}
jisuan()
{
s[0]=n%10;
s[1]=n/10%10;
s[2]=n/100;
}
void main()
{
uchar i=1;
P2 = i<<2; //138译码器 选择哪个数码管 P2.2 P2.3 P2.4三个脚决定
n=567;
s[0]=n%10;
s[1]=n/10%10;
s[2]=n/100;
while(1)
{
for(i=0;i<8;i++)
{
P2 = i<<2; //显示位置 138译码器 选择哪个数码管 P2.2 P2.3 P2.4三个脚决定
duanma = duanmas[s[i]];//查表得到短码给 P0
delay();
jisuan();
duanma = 0x00;//消影
}
}
}
数码管时钟显示
//0-9循环显示
#include "reg51.h"
typedef unsigned int uint;
typedef unsigned char uchar;
#define duanma P0
uchar duanmas[19]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00,0,0x40};
uchar s[8]={2,1,18,6,5,18,3,1};
uint h=23, m=59, sec=50;//小时分钟秒
uchar t = 0;
void delay()
{
int i,j;
for(i=0;i<10;i++)
for(j=0;j<10;j++);
}
jisuan()
{
s[0]=sec%10;
s[1]=sec/10;
s[3]=m%10;
s[4]=m/10;
s[6]=h%10;
s[7]=h/10;
}
void main()
{
uchar i=1;
P2 = i<<2; //138译码器 选择哪个数码管 P2.2 P2.3 P2.4三个脚决定
jisuan();
while(1)
{
//刷新8个数码管
for(i=0;i<8;i++)
{
P2 = i<<2; //显示位置 138译码器 选择哪个数码管 P2.2 P2.3 P2.4三个脚决定
duanma = duanmas[s[i]];//查表得到短码给 P0
delay();
duanma = 0x00;//消影
}
t++;
if(t==80)//一秒差不多到了
{
t=0;
sec++;
if(sec==60)
{
sec = 0;
m ++;
if(m==60)
{
m = 0;
h++;
if(h==24)
{
h=0;
}
}
}
jisuan();//将变量的 每一位 分配到s数组 用于显示
}
}
}
调整时间
- 第0位闪烁 shezhiwei
- key1 移位按键 shezhiwei 可以 加1
- key2 加一键 某一位 加1 调整 sec m h
- 取余 数据合规
//0-9循环显示
#include "reg51.h"
typedef unsigned int uint;
typedef unsigned char uchar;
#define duanma P0
//定义独立按键控制脚
sbit KEY1=P3^1;
sbit KEY2=P3^0;
sbit KEY3=P3^2;
sbit KEY4=P3^3;
uchar duanmas[19]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00,0,0x40};
uchar s[8]={2,1,18,6,5,18,3,1};
uint h=23, m=59, sec=50;//小时分钟秒
uchar t = 0;
uchar shezhi_wei=-1;
/*******************************************************************************
* 函数功能 : 延时函数,ten_us=1时,大约延时10us
*******************************************************************************/
void delay_10us(uint ten_us)
{
while(ten_us--);
}
void delay()
{
int i,j;
for(i=0;i<10;i++)
for(j=0;j<10;j++);
}
jisuan()
{
s[0]=sec%10;
s[1]=sec/10;
s[3]=m%10;
s[4]=m/10;
s[6]=h%10;
s[7]=h/10;
}
void main()
{
uchar i=1;
P2 = i<<2; //138译码器 选择哪个数码管 P2.2 P2.3 P2.4三个脚决定
jisuan();
while(1)
{
//刷新8个数码管
for(i=0;i<8;i++)
{
P2 = i<<2; //显示位置 138译码器 选择哪个数码管 P2.2 P2.3 P2.4三个脚决定
if(t<50 && i==shezhi_wei)
duanma = 0;
else
duanma = duanmas[s[i]];//查表得到短码给 P0
delay();
duanma = 0x00;//消影
}
t++;
if(t==100)//一秒差不多到了
{
t=0;
if(shezhi_wei==-1)
{
sec++;
if(sec==60)
{
sec = 0;
m ++;
if(m==60)
{
m = 0;
h++;
if(h==24)
{
h=0;
}
}
}
jisuan();//将变量的 每一位 分配到s数组 用于显示
}
}
if(KEY1 == 0)//检测按键K1是否按下 移位
{
delay_10us(1000);//消抖
while(KEY1==0);
shezhi_wei++;
if(shezhi_wei==8)
shezhi_wei=-1;
if(shezhi_wei==2)
shezhi_wei++;
else if(shezhi_wei==5)
shezhi_wei++;
}
if(KEY2 == 0)//检测按键K2是否按下 某位 +1
{
delay_10us(1000);//消抖
while(KEY2==0);
if(shezhi_wei==0)
{
sec++;
sec%=60;
jisuan();
}
else if(shezhi_wei==1)
{
sec+=10;
sec%=60;
jisuan();
}
else if(shezhi_wei==3)
{
m++;
m%=60;
jisuan();
}
else if(shezhi_wei==4)
{
m+=10;
m%=60;
jisuan();
}
else if(shezhi_wei==6)
{
h++;
h%=24;
jisuan();
}
else if(shezhi_wei==7)
{
h+=10;
h%=24;
jisuan();
}
}
}
}
LCD1602
详见开发板程序即可
液晶打印number
//方法1 自己写一个 变量分配到字符串数组的函数 jisuan
u8 num = 123;
u8 num_s[5] = {'1','5','6','\0'};
void jisuan()
{
num_s[0]='0'+num/100;
num_s[1]='0'+num/10%10;
num_s[2]='0'+num%10;
}
lcd1602_show_string(0,0,num_s);//µÚÒ»ÐÐÏÔʾ
//方法2 网上找个程序 大致如下
int LCD_Pow(unsigned char x,unsigned char y)
{
int result = 1;
unsigned char i = 0;
for(i=0;i<y;i++)
{
result *= x;
}
return result;
}
void LCD_ShowNum(unsigned char Line,unsigned char Columu,unsigned int Num,unsigned int Length)
{
unsigned char i = 0;
LCD_SetCursor(Line,Columu);
for(i=Length;i>0;i--)
{
LCD_WriteData('0'+Num/LCD_Pow(10,i-1)%10);
}
}
方法3 通过 sprintf(buf, "a = %d", (int)m);
需要加上 头文件 #include <stdio.h>
u8 buf1[16];
u8 buf2[16];
float f1 = 3.14;
u8 num=123;
sprintf(buf1, "a = %d", (int)m);
sprintf(buf2, "f = %.2f", f1);
lcd1602_init();//LCD1602初始化
lcd1602_show_string(0,0,buf1);//显示 buf1
lcd1602_show_string(0,1,buf2);//显示 buf2
温度传感器 DS18B20
//添加 ds18b20 public lcd1602 .c和.h的文件
#include "public.h"
#include "lcd1602.h"
#include <stdio.h>
#include "ds18b20.h"
void main()
{
u8 buf1[16];
float t;
ds18b20_init();//DS18B20³õʼ»¯
lcd1602_init();//LCD1602³õʼ»¯
while(1)
{
delay_ms(1000);
t = ds18b20_read_temperture(); //»ñȡζÈ
sprintf(buf1, "t = %.2f",t); //t --> buf1
lcd1602_show_string(0,0,buf1);//ÏÔʾζÈ
}
}
定时器中断
- 中断 类型 中断的概念
- 中断涉及到的特殊寄存器 在内存里 每个字节的每一位 就像有特殊功能的开关
- 中断的触发条件 外部终端 信号的跳变 ;定时器中断是 计数器溢出
- 定时器的模式
#include "public.h"
#include "lcd1602.h"
#include <stdio.h>
#include "ds18b20.h"
u8 buf1[16];
float t;
u8 flag = 0;
//¶¨Ê±Æ÷0³õʼ»¯º¯Êý
void time0_init(void)
{
TMOD|=0X01;//Ñ¡ÔñΪ¶¨Ê±Æ÷0ģʽ£¬¹¤×÷·½Ê½1
TL0 = 0x00; //??????
TH0 = 0x4C; //??????
ET0=1;//´ò¿ª¶¨Ê±Æ÷0ÖжÏÔÊÐí
EA=1;//´ò¿ª×ÜÖжÏ
TR0=1;//´ò¿ª¶¨Ê±Æ÷
}
void time0() interrupt 1 //¶¨Ê±Æ÷0ÖжϺ¯Êý
{
static u16 i;//¶¨Ò徲̬±äÁ¿i
TL0 = 0x00; //¸ø¶¨Ê±Æ÷¸³³õÖµ£¬¶¨Ê±50ms
TH0 = 0x4C;
i++;
if(i==20)
{
i=0;
flag = 1;
}
}
void main()
{
ds18b20_init();//DS18B20³õʼ»¯
lcd1602_init();//LCD1602³õʼ»¯
time0_init();//¶¨Ê±Æ÷0ÖжÏÅäÖÃ
while(1)
{
if(flag==1)
{
flag=0;
t = ds18b20_read_temperture(); //»ñȡζÈ
sprintf(buf1, "t = %.2f",t); //t --> buf1
lcd1602_show_string(0,0,buf1);//ÏÔʾζÈ
}
}
}
多位数码管扫描(定时器)
//0-9循环显示
#include "reg51.h"
typedef unsigned int uint;
typedef unsigned char uchar;
#define duanma P0
//定义独立按键控制脚
sbit KEY1=P3^1;
sbit KEY2=P3^0;
sbit KEY3=P3^2;
sbit KEY4=P3^3;
uchar duanmas[19]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00,0,0x40};
uchar s[8]={2,1,18,6,5,18,3,1};
uint h=23, m=59, sec=50;//小时分钟秒
uint t = 0;
uchar shezhi_wei=-1;
//定时器初始化
uchar i=0;//显示位置
void time0_init(void)
{
TMOD|=0X01;//选择为定时器0模式,工作方式1
TL0 = (-2000)%256; //2ms延时
TH0 = (-2000)/256; //
ET0=1;//打开定时器0中断允许
EA=1;//打开总中断
TR0=1;//打开定时器
}
/*******************************************************************************
* 函数功能 : 延时函数,ten_us=1时,大约延时10us
*******************************************************************************/
void delay_10us(uint ten_us)
{
while(ten_us--);
}
void delay()
{
int i,j;
for(i=0;i<10;i++)
for(j=0;j<10;j++);
}
jisuan()
{
s[0]=sec%10;
s[1]=sec/10;
s[3]=m%10;
s[4]=m/10;
s[6]=h%10;
s[7]=h/10;
}
void time0() interrupt 1 //定时器0中断函数 2ms
{
TL0 = (-2000)%256; //2ms延时
TH0 = (-2000)/256; //
duanma = 0x00;//消影
P2 = i<<2; //显示位置 138译码器 选择哪个数码管 P2.2 P2.3 P2.4三个脚决定
if(t<250 && i==shezhi_wei)
duanma = 0;
else
duanma = duanmas[s[i]];//查表得到短码给 P0
i++;
if(i==8)
i=0;
t++;
if(t==500)//一秒差不多到了
{
t=0;
if(shezhi_wei==-1)
{
sec++;
if(sec==60)
{
sec = 0;
m ++;
if(m==60)
{
m = 0;
h++;
if(h==24)
{
h=0;
}
}
}
jisuan();//将变量的 每一位 分配到s数组 用于显示
}
}
}
void main()
{
P2 = i<<2; //138译码器 选择哪个数码管 P2.2 P2.3 P2.4三个脚决定
time0_init();
jisuan();
while(1)
{
if(KEY1 == 0)//检测按键K1是否按下 移位
{
delay_10us(1000);//消抖
while(KEY1==0);
shezhi_wei++;
if(shezhi_wei==8)
shezhi_wei=-1;
if(shezhi_wei==2)
shezhi_wei++;
else if(shezhi_wei==5)
shezhi_wei++;
}
if(KEY2 == 0)//检测按键K1是否按下 +1
{
delay_10us(1000);//消抖
while(KEY2==0);
if(shezhi_wei==0)
{
sec++;
sec%=60;
jisuan();
}
else if(shezhi_wei==1)
{
sec+=10;
sec%=60;
jisuan();
}
else if(shezhi_wei==3)
{
m++;
m%=60;
jisuan();
}
else if(shezhi_wei==4)
{
m+=10;
m%=60;
jisuan();
}
else if(shezhi_wei==6)
{
h++;
h%=24;
jisuan();
}
else if(shezhi_wei==7)
{
h+=10;
h%=24;
jisuan();
}
}
}
}
PWM
什么是PWM
脉冲宽度调制。。。
#include "public.h"
#include "lcd1602.h"
#include <stdio.h>
sbit led = P2^0;
//定时器初始化
void time0_init(void)
{
TMOD|=0X01;//
TL0 = 0x48; // 约200us
TH0 = 0xFF; //
ET0=1;//´
EA=1;//
TR0=1;//´
}
void time0() interrupt 1 //
{
static u16 i;//
TL0 = 0x48; //
TH0 = 0xFF; //
i++;
if(i<20) //i 0-99 之间给占空比
led = 1;
else
led = 0;
if(i==100)
i = 0;
}
void main()
{
time0_init();//
while(1)
{
}
}
速度控制
#include "public.h"
#include "lcd1602.h"
#include <stdio.h>
#include "ds18b20.h"
u8 buf1[16];
float t;
u8 flag = 0;
u16 zhuansu=0;
u8 mubiaozs= 36;
u8 pwm = 20;
sbit led = P2^0;
//¶¨Ê±Æ÷0³õʼ»¯º¯Êý
void time_init(void)//ÅäÖà ¶¨Ê±Æ÷0 ¼ÆÊýÆ÷1
{
TMOD|=0x51;//Ñ¡ÔñΪ¶¨Ê±Æ÷0ģʽ£¬¹¤×÷·½Ê½1
TL0 = 0x48; //
TH0 = 0xFF; //
TL1 = 0x00; //
TH1 = 0x00; //
ET0=1;//´ò¿ª¶¨Ê±Æ÷0ÖжÏÔÊÐí
EA=1;//´ò¿ª×ÜÖжÏ
TR0=1;//´ò¿ª¶¨Ê±Æ÷0
TR1=1;//´ò¿ª¼ÆÊýÆ÷1
}
void time0() interrupt 1 //¶¨Ê±Æ÷0ÖжϺ¯Êý 200us
{
static u16 i;//¶¨Ò徲̬±äÁ¿i
TL0 = 0x48; //
TH0 = 0xFF; //
i++;
if(i<pwm) //i´Ó0-99µ÷½Ú Õ¼¿Õ±È
led = 1;
else
led = 0;
if(i==100)//20ms
{
i = 0;
zhuansu = TH1*256+TL1;//»ñµÃÂö³åÊý
TH1=0; //Çå0
TL1=0;
flag=1;
//获得速度 与 目标速度 比较 调整 pwm
if(zhuansu < mubiaozs)
{
pwm++;
}
else if(zhuansu > mubiaozs)
{
pwm--;
}
if(pwm>90)//限制pwm
pwm = 90;
else if(pwm<0)
pwm = 0;
}
}
void main()
{
lcd1602_init();//LCD1602³õʼ»¯
time_init();//¶¨Ê±Æ÷0ÖжÏÅäÖÃ
while(1)
{
if(flag==1)
{
flag=0;
sprintf(buf1, "zhuansu = %d",(int)zhuansu); //ËÙ¶ÈÏÔʾ
lcd1602_show_string(0,0,buf1);//ÏÔʾζÈ
sprintf(buf1, "pwm = %d",(int)pwm); //PWMÏÔʾ
lcd1602_show_string(0,1,buf1);//ÏÔʾPWM
}
}
}
红外遥控
#include "public.h"
#include "smg.h"
#include "ired.h"
void main()
{
u8 ired_buf[3];
ired_init();//ºìÍâ³õʼ»¯
while(1)
{
ired_buf[0]=gsmg_code[gired_data[2]/16];//½«¿ØÖÆÂë¸ß4λת»»ÎªÊýÂë¹Ü¶ÎÂë
ired_buf[1]=gsmg_code[gired_data[2]%16];//½«¿ØÖÆÂëµÍ4λת»»ÎªÊýÂë¹Ü¶ÎÂë
ired_buf[2]=0X76;//ÏÔʾHµÄ¶ÎÂë
smg_display(ired_buf,6);
}
}
if(i==100)//20ms
{
i = 0;
zhuansu = TH1*256+TL1;//»ñµÃÂö³åÊý
TH1=0; //Çå0
TL1=0;
flag=1;
//获得速度 与 目标速度 比较 调整 pwm
if(zhuansu < mubiaozs)
{
pwm++;
}
else if(zhuansu > mubiaozs)
{
pwm--;
}
if(pwm>90)//限制pwm
pwm = 90;
else if(pwm<0)
pwm = 0;
}
}
void main()
{
lcd1602_init();//LCD1602³õʼ»¯
time_init();//¶¨Ê±Æ÷0ÖжÏÅäÖÃ
while(1)
{
if(flag==1)
{
flag=0;
sprintf(buf1, "zhuansu = %d",(int)zhuansu); //ËÙ¶ÈÏÔʾ
lcd1602_show_string(0,0,buf1);//ÏÔʾζÈ
sprintf(buf1, "pwm = %d",(int)pwm); //PWMÏÔʾ
lcd1602_show_string(0,1,buf1);//ÏÔʾPWM
}
}
}
# 红外遥控
[外链图片转存中...(img-ltTdETXp-1697851615282)]
~~~c
#include "public.h"
#include "smg.h"
#include "ired.h"
void main()
{
u8 ired_buf[3];
ired_init();//ºìÍâ³õʼ»¯
while(1)
{
ired_buf[0]=gsmg_code[gired_data[2]/16];//½«¿ØÖÆÂë¸ß4λת»»ÎªÊýÂë¹Ü¶ÎÂë
ired_buf[1]=gsmg_code[gired_data[2]%16];//½«¿ØÖÆÂëµÍ4λת»»ÎªÊýÂë¹Ü¶ÎÂë
ired_buf[2]=0X76;//ÏÔʾHµÄ¶ÎÂë
smg_display(ired_buf,6);
}
}