十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
我来发一个C语言51单片机时钟程序,希望能帮到你 /* 程序功能:带定时闹铃时钟 */ /*---------------------------------------------------------------*/ #include AT89X51.H /*包含器件配置文件*/ #define uchar unsigned char #define uint unsigned int char DATA_7SEG[10]={0xC0,0xF9,0xA4,0xB0,0x99, 0x92,0x82,0xF8,0x80,0x90,};/*0~9的数码管段码*/ uchar hour=0,min=0,sec=0; /*时、分、秒单元清零*/ uchar deda=0; /*5mS计数单元清零*/ bit d_05s=0; /*0.5秒标志*/ uchar set=0; /*模式设定标志*/ uchar m=0; uchar flag=0; /*RAM掉电标志*/ void delay(uint k); /*延时?函数*/ void conv(); /*走时单元转换*/ void disp(); /*走时时间显示?函数*/ /*------------------------走时?函数部分 ----------------------*/ /*定时器T0 5mS初始化*/ void init_timer() { TMOD=0x01; TH0=-(4800/256); TL0=-(4800%256); IE=0x82; TR0=1; } /*---------------------------------*/ /*5mS定时中断服务?函数*/ void T0_srv(void) interrupt 1 { TH0=-(4800/256); TL0=-(4800%256); deda++; } /*----------------------------------*/ /*时、分、秒单元及走时单元转换*/ void conv() { if(deda=100)d_05s=0; else d_05s=1; if(deda=200){sec++;deda=0;} if(sec==60){min++;sec=0;} if(min==60){hour++;min=0;} if(hour==24){hour=0;} } /*------------------------ 显示?函数部分 ----------------------*/ /*走时时间显示?函数*/ void disp() { P0=DATA_7SEG[hour/10];P2=0xf7;delay(1); P0=DATA_7SEG[hour%10];P2=0xfb;delay(1); if(d_05s==1){if(P2_2==0)P0_7=0;else P0_7=1;} delay(1); P0=DATA_7SEG[min/10];P2=0xfd;delay(1); P0=DATA_7SEG[min%10];P2=0xfe;delay(1); } /*---------------------- 调整时间?函数部分 -------------------*/ /*调整走时时间*/ void set_time() {uchar m; if(P2_5==0)delay(1); if(P2_5==0)hour++; if(hour==24)hour=0; for(m=0;m30;m++) { disp(); if(P2_2==0)P0_7=0; else P0_7=1; delay(1); } if(P2_6==0)delay(1); if(P2_6==0)min++; if(min==60)min=0; for(m=0;m30;m++) { disp(); if(P2_2==0)P0_7=0; else P0_7=1; delay(1); } } /*------------------ 按键扫描、延时等?函数部分-------------------*/ /*走时时间程序?函数*/ void time() { conv(); /* 走时单元转换?函数 */ disp(); /* 走时时间显示?函数 */ } /*------------------------------------*/ /*扫描按键?函数*/ void scan_key() { delay(1); if(P2_4==0)set++; if(set=2)set=0; if(set==1)flag=0x55; F0:if(P2_4==0)goto F0; /*按键未释放,在此等候*/ } /*------------------------------*/ /*延时?函数*/ void delay(uint k) { uint i,j; for(i=0;ik;i++){ for(j=0;j121;j++) {;}} } /*----------------------- 主函数 ------------------------- */ /*主函数*/ void main() { init_timer(); /*定时器T0初始化*/ while(1) /*无限循环*/ { if(P2_4==0)scan_key(); /*有按键,调用按键扫描?函数*/ switch(set) /*根据set键值散转*/ { case 0:time(); break; /*走时时间程序*/ case 1:set_time();break; /*走时时间调整*/ default:break; /*其它退出*/ } if(flag!=0x55) /*判断掉电标志*/ { P0=0xc0; P2=0xc0; delay(100); P2=0xff; delay(400); } } }
成都创新互联专注为客户提供全方位的互联网综合服务,包含不限于网站设计制作、网站设计、玉溪网络推广、成都小程序开发、玉溪网络营销、玉溪企业策划、玉溪品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;成都创新互联为所有大学生创业者提供玉溪建站搭建服务,24小时服务热线:18982081108,官方网址:www.cdcxhl.com
定义一个延时xms毫秒的延时函数
void delay(unsigned int xms) // xms代表需要延时的毫秒数
{
unsigned int x,y;
for(x=xms;x》0;x--)
for(y=110;y》0;y--);
}
使用:
void Delay10us(uchar Ms)
{
uchar data i;
for(;Ms》0;Ms--)
for(i=26;i》0;i--);
}
i=[(延时值-1.75)*12/Ms-15]/4
扩展资料
1、在C51中进行精确的延时子程序设计时,尽量不要或少在延时子程序中定义局部变量,所有的延时子程序中变量通过有参函数传递。
2、在延时子程序设计时,采用do?while,结构做循环体要比for结构做循环体好。
3、在延时子程序设计时,要进行循环体嵌套时,采用先内循环,再减减比先减减,再内循环要好。
#includereg51.h
#includeINTRINS.h
#define u16 unsigned int
#define u8 unsigned char
/*********************************************************/
u8 ds[3]; //数码管显示缓存
//共阳
code u8 w[]={0x01,0x02,0x04,0x08}; //位码
code u8 d[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,};//断码
void dispaly(){//显示函数
static u8 a;
if(++a=3)a=0;
P0=0xff;
P2=w[a];
P0=d[ds[a]];
}
/****************************************/
void init() //初始化函数
{ TMOD=0x01;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
EA=1;
ET0=1;
}
u16 count=0; //计数
u16 V=0;//速度
u16 js;//计时
u8 mc=P1^1;//脉冲引脚
u8 tt=0xff;
void smmc(){
tt=1;
if(mc)tt|=0x01;
if((tt0x03)==0x02){//下降沿脉冲
if(count65535)count++;
}
}
/***********************************/
void main()//主函数
{
init();//系统初始化
TR0=1; //定时器开始计时
while(1){
ds[0]=V/100%10; //计数送到数码管显示缓存中
ds[1]=V/10%10;
ds[2]=V%10;
smmc();
if(js=10000){//10s
js=0;
V=4*count/10+2;//计算速度
count=0;
}
}
}
/****************************/
void timer0() interrupt 1//1ms定时器
{
TH0=(65536-1000)/256;//重载初值
TL0=(65536-1000)%256;
dispaly();//显示
js++;
}