[单片机控制的跑马灯课程设计汇编版和c]#include <reg52.h> #define int8 unsigned char #define int16 unsigned int #define Ledout P0 int8 Led[]={0xff,0x7e,0x3c,0x18,0x00}; int8 i; /*延时程序微妙*/ void...+阅读
C51单片机数字电子时钟课程设计
#include
单片机课程设计电子时钟程序
#include (1) //主程序循环 { if(!H_KEY) hou_tiao(); //如果时调整键按下(为0),调用时调整函数 if(!M_KEY) min_tiao(); //如果分调整键按下(为0),调用分调整函数 display(); //调用显示函数 } } /*************************************** 函 数 名:init 功 能:初始化函数 说 明:初始化定时器及中断 入口参数:无 返 回 值:无 ***************************************/ void init() { TMOD=1;TH0=0X3C;TL0=0XB0; //定时器0模式1,50毫秒 ET0=1;TR0=1;EA=1; //开定时器0中断、启动定时器0、开总中断 } /*************************************** 函 数 名:display 功 能:显示函数 说 明: 入口参数:无 返 回 值:无 ***************************************/ void display() { LEDBus=LEDTab[minute%10]; //分个位送数码管显示 MIAO=SHAN; //秒点闪烁 MIN_G=ON; //打开分个位位选 delay (1); //显示1毫秒 MIN_G=OFF; //关闭分个位位选 LEDBus=LEDTab[minute/10]; //分十位送数码管显示 MIAO=SHAN; //秒点闪烁 MIN_S=ON; //打开分十位位选 delay (1); //显示1毫秒 MIN_S=OFF; //关闭分十位位选 LEDBus=LEDTab[hour%10]; //时个位送数码管显示 HOU_G=ON; //打开时个位位选 delay (1); //显示1毫秒 HOU_G=OFF; //关闭时个位位选 if(hour/10) //如果时十位为0,不显示十位数字 { LEDBus=LEDTab[hour/10]; //时十位送数码管显示 HOU_S=ON; //打开时十位位选 delay (1); //显示1毫秒 HOU_S=OFF; //关闭时十位位选 } } /*************************************** 函 数 名:min_tiao 功 能:分调整 说 明: 入口参数:无 返 回 值:无 ***************************************/ void min_tiao() { while(!M_KEY) display(); //等待分调整键松开 second=0;minute++; //秒清零、分加1 if(minute==60) minute=0; //如果分等于60,分变0 } /*************************************** 函 数 名:hou_tiao 功 能:时调整 说 明: 入口参数:无 返 回 值:无 ***************************************/ void hou_tiao() { while(!H_KEY) display(); //等待时调整键松开 second=0;hour++; //秒清零,时加1 if(hour==24) hour=0; //如果时等于24,时变0 } /*************************************** 函 数 名:delay 功 能:延时函数 说 明: 入口参数:t:延时时间长短 返 回 值:无 ***************************************/ void delay(uchar t) { uchar i; //定义变量 for(;t>0;t--) //如果t大于0,t减1(外层循环) for(i=124;i>0;i--); //i等于124,如果i大于0,i减1 } /*************************************** 函 数 名:timer0 功 能:定时器0中断函数 说 明: 入口参数:无 返 回 值:无 ***************************************/ void timer0() interrupt 1 //定时器0(中断1) { uchar tim1,tim2; //定义临时变量 TL0=TL0+0XB0;TH0=0X3C; //重装定时器初值 tim1++; //每中断一次tim1加1 if(tim1==10) //中断10(0.5秒) { SHAN=!SHAN; //闪烁标志取反 tim1=0;tim2++; //tim1清零,tim2加1 if(tim2==2) //到了1秒 { tim2=0;second++; //tim2清零,秒加1 if(second==60) //如果秒到60 { second=0;minute++; //秒变0,分加1 if(minute==60) //如果分到60 { minute=0;hour++; //分变0,时加1 if(hour==24) hour=0; //如果时到24,时变0 } } } } } /*************************************** program end 程序结束 || #include#include#define uchar unsigned char #define uint unsigned int #define LCD1602_FLAG #define LCD1602_PORT P0 sbit lcd1602_rs=P2^0; sbit lcd1602_e=P2^2; sbit lcd1602_rw=P2^1; sbit lcd1602_busy=P0^7; sbit key_ch=P3^5; sbit key_add=P3^6; sbit key_minus=P3^7; uchar i,sec,min,h,date,month,flag; uint year; uchar *chgstr[7]={" ","sec","min","hour","date","min","year"}; uchar j,k,m,n,o,p; uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; uchar timestr[10],datestr[10]; void init(); void delay(uint); void time_display(); void date_display(); void control(); void time(); /* ************************************ * 函数名称:lcd1602_CheckBusy() * 函数功能:状态查询 ************************************ */ void lcd1602_CheckBusy() { do { lcd1602_busy=1; lcd1602_rs=0; lcd1602_rw=1; lcd1602_e=0; lcd1602_e=1; } while(lcd1602_busy); } /* *************************************** * 函数名称: lcd1602_WriteCmd() * 函数功能:写命令 * 入口参数:命令字 * 出口参数:无 *************************************** */ void lcd1602_WriteCmd(const uchar cmd) { lcd1602_CheckBusy(); lcd1602_rs=0; lcd1602_rw=0; lcd1602_e=1; LCD1602_PORT=cmd; lcd1602_e=0; } /* ******************************************* * 函数名称:lcd1602_WriteData() * 函数功能:写数据 * 入口参数:c--待写数据 * 出口参数:无 ********************************************* */ void lcd1602_WriteData(const uchar c) { lcd1602_CheckBusy(); lcd1602_rs=1; lcd1602_rw=0; lcd1602_e=1; LCD1602_PORT=c; lcd1602_e=0; } /* *********************************************** * 函数名称:lcd1602_Init() * 函数功能:初始化LCD * 入口参数:无 * 出口参数:无 *********************************************** */ void lcd1602_Init() { lcd1602_WriteCmd(0x38); //显示模式为8位2行5*7点阵 lcd1602_WriteCmd(0x0c); //display enable,flag enable,flash enable, lcd1602_WriteCmd(0x06); //flag move to right,screen don't move lcd1602_WriteCmd(0x01); //clear screen } /* ************************************************ * 函数名称:lcd1602_Display() * 函数功能: 字符显示 * 入口参数:ptr--字符或字符串指针 * 出口参数:无 * 说 明:用户可通过以下方式来调用: * 1)lcd1602_Display("Hello,world!"); * 2) INT8U 存储类型 txt[]="要显示的字符串"; * 或者 INT8U 存储类型 txt[]={'t','x','t',..,'\0'}; * INT8U *ptr; * ptr=&txt; * lcd1602_Display(ptr); * 或 lcd1602_Display(txt); * 或 lcd1602_Display(&txt); ************************************************ */ void lcd1602_Display(const uchar *ptr,uchar line,uchar xaddr) { uchar data i=0; uchar *data q; q=ptr; switch(line) { case 0: lcd1602_WriteCmd(0x80+xaddr); while(q!=NULL & (*q!='\0') & i0;y--); } void time_display() { timestr[7]=0x30+sec%10; timestr[6]=0x30+sec/10; timestr[5]=':'; timestr[4]=0x30+min%10; timestr[3]=0x30+min/10; timestr[2]=':'; timestr[1]=0x30+h%10; timestr[0]=0x30+h/10; timestr[8]=0; lcd1602_Display(timestr,1,3); } void date_display() { datestr[9]=0x30+date%10; datestr[8]=0x30+date/10; datestr[7]=':'; datestr[6]=0x30+month%10; datestr[5]=0x30+month/10; datestr[4]=':'; datestr[3]=0x30+year%10; datestr[2]=0x30+year/10%10; datestr[1]=0x30+year/100%10; datestr[0]=0x30+year/1000; lcd1602_Display(datestr,0,2); } void control() { if(!key_ch) { delay(5); if(!key_ch) { flag++; TR0=0; if(flag==7) {flag=0;TR0=1;lcd1602_Init();} lcd1602_Display(chgstr[flag],1,12); } } while(!key_ch); if(flag==1&key_add==0) { while(!key_add); sec++; if(sec==60) sec=0; } if(flag==1&key_minus==0) { while(!key_minus); sec--; if(sec==-1) sec=59; } if(flag==2&key_add==0) { while(!key_add); min++; if(min==60) min=0; } if(flag==2&key_minus==0) { while(!key_minus); min--; if(min==-1) min=59; } if(flag==3&key_add==0) { while(!key_add); h++; if(h==24) h=0; } if(flag==3&key_minus==0) { while(!key_minus); h--; if(h==-1) h=23; } if(flag==4&key_add==0) { while(!key_add); date++; if(date==29) if((year%4!=0)&(month==2)) date=1; if(date==30) if((year%4==0)&(month==2)) date=1; if(date==31) if((month==4)||32313133353236313431303231363533e78988e69d8331333363393039(month==6)||(month==9)... 延伸阅读: 基于单片机的数字时钟怎么做#include#define uchar unsigned char #define uint unsigned int sbit dula=P2^6; sbit wela=P2^7; sbit rs=P3^5; sbit lcden=P3^4; sbit s1=P3^0; sbit s2=P3^1; sbit s3... 急基于单片机的数字时钟SECOND EQU 30H ;存储妙 MINITE EQU 31H ;存储分 HOUR EQU 32H ;存储时 SPEAKER BIT P3.7 HOURK BIT P3.2 ;时键 MINITEK BIT P3.3 ;分键 SECONDK BIT P3.0 ;妙键 FLAG BIT 00H FL... 基于单片机的时钟计数器设计89C51 LED电子钟 参考链接: *APPLICATION NOTE E6000 ICEXPLORER *************** * Title: FOR colk_time * * Version: 00 * * Last Updated: * * MCU: AT89C91 * * FOR: W... 利用单片机DS1302芯片编制数字时钟程序:能计算2100之前的秒我也是用ds1302芯片来做电子钟的#include#include#define uchar unsigned char#define uint unsigned intsbit sda=P1^0;sbit clk=P1^1;sbit rst=P1^2;sbit rs=P2^0;sbit rw... 求AT89S5152单片机基于DS1302的数码管实时数字时钟c程序可调#include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#include sbit SCK=P3^6;//时钟sbit SDA=P3^4;//数据sbit RST = P3^5;// DS1302复位sbit LS138A=P2^... 单片机中实时时钟系统时钟 CPU时钟什么区别通常的理解, 实时时钟是指给日期及时间计数器累加的时钟,通常是32768Hz, 系统时钟是指单片机内部的主时钟,给各个模块提供工作时钟的基础, CPU时钟是指经过CPU的PLL后将系统时钟... 电子日历时钟系统程序汇编语言data segment db "00/00/00 00:00:00",'$' data ends codesg segment assume cs:codesg,ds:data start: mov ax,data mov ds,ax mov cx,6 mov bx,0 mov ah,0 mov al,9 s: push... C51单片机实验程序C51单片机实验程序,有没有学长讲讲单片机怎么学:用中断模块和定时模块,当然还要加主程序和头文件,输出口定义等,看你的硬件连接方式,下面是延时子程序和一个中断程序,可类别编程。... 单片机实验设计单片机实验设计,初学51单片机有什么好的视频教程大神推荐一下:;------------------------------------- ;下列程序,经过编译、仿真,符合要求: ;---------------------------------...单片机89c51的电子时钟课程设计