单片机c语言clk

单片机中有一元件引脚上标注为“CLK”请问这个CLK是什么意思???

时钟信号引脚。

“清除”的英文是clear,在电子方面的英文缩写是CLR

单片机c语言clk

求用单片机c语言做一个电子时钟,实现调时、显示、整点报时等功能。

(1)用数字逻辑集成块实现;

(2)时间以24小时为一个周期,显示时、分、秒;

(3)计时过程具有报时功能,当时间到达整点前5秒进行蜂鸣报时;

(4)为了保证计时的稳定及准确须由晶体振荡器提供表针时间基准信号。

c51单片机 晶振为11.0592MHz

#includereg52.h

#define HOUR1 1

#define HOUR0 0

#define MIN1 2

#define MIN0 8

#define SEC1 2

#define SEC0 0

#define uint unsigned int

#define ulint unsigned long int

#define uchar unsigned char

sbit dula=P2^6;

sbit wela=P2^7;

sbit beep=P2^3;

int i;

ulint

sharp,second,count=0,sec0=SEC0,sec1=SEC1,min0=MIN0,min1=MIN1,hour0=HOUR0,hour1=HOUR1;//秒计数全局变量

uchar code segment[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};

uchar code time[]={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f};

void delay(uint);//程序毫秒延时

void beeper(uchar);//开蜂鸣器毫秒

void init();//初始化函数

void display();//从数码管上显示

void counter();//计算进行过程中的时、分、秒值

void scan();//扫描键盘

void main()

{

init();

while(1)

{

scan();//扫描键盘看是否有键按下

for(i=6;i0;i–)//动态扫描6位数码管

{

display();//显示时、分、秒

}

}

}

void init()

{

second=hour1*36000+hour0*3600+min1*600+min0*60+sec1*10+sec0;

TMOD=0x01;

TH0=(65536-46080)/256;

TL0=(65536-46080)%256;

EA=1;

ET0=1;

TR0=1;

}

void delay(uint z)//程序毫秒延时

{

uint x=0,y=0;

for(x=z;x0;x–)

for(y=110;y0;y–);

}

void timer0() interrupt 1

{

TH0=(65536-46080)/256;

TL0=(65536-46080)%256;

count++;

if(count==20)//判断是否到1秒

{

counter();//计算进行过程中的时、分、秒值

if(sharp!=hour0) beeper(1000);//判断小时的值是否改变,变则启动蜂鸣器

}

}

void beeper(uchar tt)

{

uchar t=tt;

count=0;

beep=0;//开蜂鸣器

delay(t);

beep=1;//关蜂鸣器

}

void display()

{

P0=0xff;//位消影(低电平选择位)

//送位选信号

wela=1;

P0=segment[i-1];

wela=0;

P0=0x00;//段消影(高电平选择段)

//送段选信号

dula=1;

switch(i)

{

case 6 : P0=time[sec0]; break;

case 5 : P0=time[sec1]; break;

case 4 : P0=time[min0]; break;

case 3 : P0=time[min1]; break;

case 2 : P0=time[hour0]; break;

case 1 : P0=time[hour1]; break;

}

delay(1);

P0=0x00; //配合上面用于消隐

dula=0;

}

void counter()

{

second++;

if(second==86400) second=0;

count=0;

sharp=hour0;//设置报时检测KEY

sec0=second%10;

sec1=(second%60-sec0)/10;

min0=((second%3600-sec1*10-sec0)/60)%10;

min1=((second%3600-sec1*10-sec0)/60-min0)/10;

hour0=(second%36000-min1*600-min0*60-sec1*10-sec0)/3600;

hour1=second/36000;

}

void scan()

{

}

单片机c程序设计中 ~CLK代表什么?

CLK应该是为变量,当T0中断时取反一次。

再看看别人怎么说的。

单片机做的日历 c语言程序

这是一个DS1302时钟程序,根据自己的硬件电路适当改改就可以做成日历了 /********************************************************************

*DS1302控制程序 2011.12.01 wqz

********************************************************************/

#includereg52.h

#includeintrins.h

typedef unsigned uchar;sbit sda=P2^1; //DS1302

sbit clk=P2^0;

sbit ce=P2^2;

//sbit sda=P3^4;

//sbit clk=P3^6;

//sbit ce=P3^5;

//

//sbit _138_A=P2^2; //138A,B,C口

//sbit _138_B=P2^3;

//sbit _138_C=P2^4;sbit IO =P1^7; //595控制信号

sbit RLK =P1^6;

sbit CLK =P1^5;#define my_delay5us() _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();\

_nop_();_nop_();_nop_();_nop_();_nop_();_nop_()

//#define T0_init() TMOD=0x01;TH0=0xb8;TL0=0x00;TR0=1;ET0=1;EA=1uchar cc[8]; //将要显示的时间由BCD码转换成要显示的数值存放在CC[]中

uchar bb[8]; //存放从DS1302中读取出来的数据

uchar aa[7]={0,30,18,20,12,6,11}; //初始时间

uchar code write_rtc[]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c}; //时间寄存器写地址

uchar code tember[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; //共阴数码管显示表void my_delay1ms(int t); //延时1ms函数

void write_1byte(uchar temp); //写一字节数据

uchar read_1byte(); //读一字李数据

void write_addr_data(uchar Addr, uchar Data); //先写地址再写数据

uchar writeadd_readdat(uchar ucAddr); //先写地址再读数据

void write1_readM(); //连续读多个字节数据

void ds1302_init(); //DS1302初始化/********************************************************************

*

* 主函数

********************************************************************/void main()

{

uchar i,j,dat; my_delay1ms(10);

ds1302_init(); //给DS1302付初值 11年12月20日 周六 18-30-00

// T0_init(); while(1)

{

write1_readM(); //读DS1302中的数据 cc[0]=bb[0]%16;

cc[1]=bb[0]/16;

cc[2]=10;

cc[3]=bb[1]%16;

cc[4]=bb[1]/16;

cc[5]=10;

cc[6]=bb[2]%16;

cc[7]=bb[2]/16; for(j=0;j8;j++)

{

dat=tember[cc[j]];

RLK=0;

my_delay5us();

for(i=0;i8;i++)

{

if(dat0x80)IO=1;

else IO=0;

my_delay5us();

CLK=1;

my_delay5us();

CLK=0;

dat=1;

}

my_delay5us();

RLK=1;

}

my_delay1ms(500);

}

}/**********************************************************************/void my_delay1ms(int t) //延时

{

uchar i,j;

while(t–)

{

for(i=4;i0;i–)

for(j=50;j0;j–);

}

}/**********************************************************************/void write_1byte(uchar temp) //写一字节数据

{

uchar i; clk=0;

my_delay5us();

for (i=0;i8;i++)

{

if(temp0x01)sda=1;

else sda=0;

my_delay5us();

clk=1;

my_delay5us();

clk=0;

temp=1;

}

}/**********************************************************************/uchar read_1byte() //读一字节数据

{

uchar i,num;

for (i=0;i8;i++)

{

num=1;

if(sda)

num|=0x80;

my_delay5us();

clk=1;

my_delay5us();

clk=0;

}

return num;

}/**********************************************************************/void write_addr_data(uchar Addr, uchar Data) //先写地址再写数据

{

ce = 0;

my_delay5us();

clk = 0;

my_delay5us();

ce = 1;

my_delay5us();

write_1byte(Addr); // 地址,命令

write_1byte(Data); // 写1Byte数据

my_delay5us();

clk=1;

my_delay5us();

ce =0;

} /**********************************************************************/uchar writeadd_readdat(uchar ucAddr) //先写地址再读数据

{

uchar num1=0; ce = 0 ;

my_delay5us();

clk = 0;

my_delay5us();

ce = 1;

my_delay5us();

write_1byte(ucAddr); // 地址,命令

num1 = read_1byte(); // 读1Byte数据

my_delay5us();

clk = 1;

my_delay5us();

ce =0; return(num1);

}/**********************************************************************/void write1_readM() //连续读多个字节数据

{

uchar i,Addr; Addr=0x81;

for (i=0;i7;i++)

{

bb[i] = writeadd_readdat( Addr);//*格式为: 秒 分 时 日 月 星期 年

Addr += 2;

}

}/**********************************************************************/void ds1302_init() //初始时间 11年12月20日 周六 18-30-00

{

uchar i,*p,tmp; for(i=0;i7;i++)

{ /*如想设置DS1302的“秒”,设置时间为37秒,所以输入的是十*/

tmp=aa[i]/10; /*进制数37,对应的16进制是0x25,但是DS1302寄存器使用的是压*/

aa[i]=aa[i]%10; /*缩BCD码,所以应该写入BCD数值37才行,即0x37。所以需要将*/

aa[i]=aa[i]+tmp*16; /*10进制的37转换为16进制表示的0x37*/

}

write_addr_data(0x8E,0X00);

p=write_rtc; //传地址

for(i=0;i7;i++) //7次写入 秒分时日月周年

{

write_addr_data(*p,aa[i]);

p++;

} write_addr_data(0x8E,0x80);

}/**********************************************************************///void ET0_ser() interrupt 1

//{

//// uchar i;

//

// TH0=0x55;

// TL0=0x00;

//

//// P0=tember[cc[i]];

//// switch(i)

//// {

//// case 0 : _138_A=1;_138_B=1;_138_C=1; break;

//// case 1 : _138_A=0;_138_B=1;_138_C=1; break;

//// case 2 : _138_A=1;_138_B=0;_138_C=1; break;

//// case 3 : _138_A=0;_138_B=0;_138_C=1; break;

//// case 4 : _138_A=1;_138_B=1;_138_C=0; break;

//// case 5 : _138_A=0;_138_B=1;_138_C=0; break;

//// case 6 : _138_A=1;_138_B=0;_138_C=0; break;

//// case 7 : _138_A=0;_138_B=0;_138_C=0; break;

//// }

//// i++;

//// if(i==8)i=0;

//}

本文来自投稿,不代表【】观点,发布者:【

本文地址: ,如若转载,请注明出处!

举报投诉邮箱:253000106@qq.com

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年3月25日 05:29:24
下一篇 2024年3月25日 05:35:44

相关推荐

  • c语言改写模式,c语言实现修改功能

    c语言程序修改? 1、这个程序有4个错误,我都加粗了,第一个是m没有赋初值,第二个是while表达式中的ch=getchar()需要括号括起来,第三个是m=m*10+ch-0中的0也需要用单引号括起来,第四个是第2个while中为m!=0。 2、define容易造成误会,因为不符合一般的编程习惯,false 0, true 1;scanf放在你的那个地方是达…

    2024年5月23日
    3900
  • c语言控制代码的换码序列,c语言交换代码

    求C语言编程大神解答一下下面这个编程代码? k==5,用5去除125余0,所以r=125%5中r为0。由于!0为1,所以执行while循环体:先打印出5(k的值),再n=n/k==125/5=25;由于251则再打印出*号。这一循环结果输出是5*。 下面是我的代码,三个函数分别对应三个问题。 在实现基本要求的前提下,拓展了可以从键盘输入的功能,以下为各题代码…

    2024年5月23日
    5600
  • c语言扫描io脚状态,c语言端口扫描

    求51单片机的上升沿和下降沿C语言检测程序列子,端口就是普通IO口。 上升沿触发是当信号有上升沿时的开关动作,当电位由低变高而触发输出变化的就叫上升沿触发。也就是当测到的信号电位是从低到高也就是上升时就触发,叫做上升沿触发。 单片机怎么计算1s内下降沿的个数的C语言程序或者计算两个下降沿的时间(检测脉冲频率)计算1s内下降沿的个数方法是,一个定时器设置定时1…

    2024年5月23日
    4300
  • c语言mallloc使用的简单介绍

    C语言中使用malloc必须加#includemallo.h? 1、在C语言中使用malloc函数进行动态内存分配。malloc的全称是memory allocation,中文叫动态内存分配。原型:extern void malloc(unsigned int num_bytes);功能:分配长度为num_bytes字节的内存块。 2、你可以看一下C语言那本…

    2024年5月23日
    4300
  • c语言三位小数,C语言三位小数

    怎样用C++语言输出精确到小数点后三位的数? 1、用C++语言输出精确到小数点后三位的数,可以参考下面给出的代码:coutsetiosflags(ios:fixed)setprecision(3)。其中 setiosflags中set是设置的意思。ios是iostream的缩写,即输入输出流。flags是标志的意思。 2、要精确到小数点后若干位,则数据类型为…

    2024年5月23日
    7200
  • c语言21点游戏,二十一点游戏代码c语言

    如何使用C语言编写简单小游戏? 1、数学知识:长方形的面积S=a*b 长方形周长L=2*(a+b)其中a b分别为长方形的宽和高。算法分析:长方形面积及周长均依赖于宽和高,所以先要输入宽高值,然后根据公式计算,输出结果即可。 2、/*也不知道你是什么级别的,我是一个新手,刚接触编程语言,以下是我自己变得一个小程序,在所有c语言的编译器(vc++0、turbo…

    2024年5月23日
    6300
  • c语言当中的null,C语言当中的符号

    C/C++中,NULL和null的区别是什么? nul 和 null要看编译器,不同的编译器有所区别。 所以C或者C++中都使用一个特殊定义NULL表示无效值,其本质就是未定义具体数据类型的0值。 null是是什么都没有的意思。在java中表示空对象。 本意是“空的;元素只有零的”意思。计算机中通常表示空值,无结果,或是空集合。\x0d\x0a在ASCII码…

    2024年5月23日
    4500
  • 包含c语言对txt文件命名的词条

    如何在C语言编程里面修改源文件名字 如果你是在WINDOWS的话,简单了,随便用个编辑器,比如记事本,然后写c源程序,保存到你想要保存的位置。如果你在DOS下,可以用edit,写好以后,按alt键,选择文件菜单,然后保存。 用open打开文件,注意操作模式使用“修改”或者“添加” 用write或者fprintf向文件中写入你的内容。 用close关闭文件。 …

    2024年5月23日
    4800
  • 学c语言编程,学c语言编程用什么软件

    编程开发必须要学C语言吗? 1、要学习。编程开发的学习内容主要包括c语言、python和c+语言。C语言作为一种简单灵活的高级编程语言,它是一个面向过程的语言,一般是作为计算机专业的基础入门语言课程。 2、C语言。对于刚接触编程的人来说,先学习C语言是非常重要的。C语言可以说是是计算机编程语言的鼻祖,其他的编程语言几乎全是由C语言变化衍生出来的。 3、不需要…

    2024年5月23日
    3400
  • c语言用string定义字符串,c语言中用string类型来处理字符串类型

    C++怎样定义定义字符串 1、第一是字符数组来表示字符串。用下面的语句声明:char a[10];C语言中字符数组与字符串的唯一区别是字符串末尾有一个结束符\0,而字符数组不需要。 2、在C中定义字符串有下列几种形式:字符串常量,char数组,char指针 字符串常量 即:位于一对双括号中的任何字符。双引号里的字符加上编译器自动提供的结束标志\0字符,作为 …

    2024年5月23日
    4200

发表回复

登录后才能评论



关注微信