单片机实训报告心得(4)

2019-02-21 00:31

源程序清单:

#include

#define uchar unsigned char #define led_data P0 //P0显示数码管当前位的数字 #define led_bit P2 //P2控制当前数码管显示的位数

int b;

uchar conls=0x00; //记录秒分时的个位数 uchar cons=0x00; //记录秒分时的十位数 uchar con=0x00; //记录调时程序当前位数 uchar x=0x00; //记录闹钟

sbit key0=P3^0; //key0控制调时位左移以一位 sbit key1=P3^1; //key1控制挑时当前位数字+1 sbit key2=P3^2; //key1控制挑时当前位数字-1 sbit key3=P3^3; //确定当前挑时中断程序 sbit stop=P3^4; //用来暂时计时和启动计时 sbit baojing=P3^5; //用以响应整点报时和闹钟 sbit naozhong=P3^6; //用来开启闹钟调时程序 sbit beep=P3^7; //用来终止当前整点报时或闹钟响应

uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00}; //数码管当前位0~9的显示码

uchar data scan_con[6]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF}; //数码管左到右6个位的显示

uchar data dis[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x0a,0x00}; //数码管的显示码

uchar data timedata[6]={0x00,0x00,0x00,0x00,0x00,0x00}; //电子钟的初始时间:00:00:00

uchar data secclock[6]={0x00,0x00,0x00,0x00,0x00,0x00}; //闹钟调时的初始时间:00:00:00 uchar i;

display(); //显示数码管函数申明 keyscan(); //调时按钮函数声明 //alarmcolk();

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

/* 1ms延时显示程序

16

*/

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

void delay(int z) { int x,y;

for(x=0;x

initializa();

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

/* 主函数 */

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

void main() {

initializa(); while(1) { display(); keyscan(); //alarmcolk(); } }

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

/* 显示子程序 */

/************************************************************************/ display() {

uchar k;

for(k=0;k<6;k++) { led_data=table[dis[k]];led_bit=scan_con[k];delay(1);P2=0x00; } }

17

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

/* 初始化子程序 */

/************************************************************************/ initializa() {

for(i=0;i<6;i++) { dis[i]=timedata[i]; }

TH0=0X3C;TL0=0XB0; TH1=0x3c;TL1=0XB0; TMOD=0X11; ET0=1; ET1=1; TR0=1; TR1=0; EA=1; }

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

/* 调时按钮处理子程序 */

/************************************************************************/ keyscan() {

int a=0,j;

for(i=0,j=0;i<6;i++) //分别比较电子钟与闹钟时分秒 { if(timedata[i]==secclock[5-i]&&timedata[0]!=0) j++; }

if(j==6) { if(beep==0) //若都相等,且没关闭响应 { for(i=1;i<10;i++)

18

{ baojing=0; P1=0x00; delay(500); baojing=1; P1=0xff; delay(500); } } }

if(key3==0){con=0;x=0;TR1=0;ET1=0;TR0=1;ET0=1;} //关闭调时按钮中断,继续显示电子钟的时间 else if(naozhong==0) //开启调时按钮中断 { EA=0; if(key0==0) { delay(10); while(key0==0); if(dis[con]==10) { dis[7]=dis[con];dis[con]=dis[6];dis[6]=dis[7]; } con++;TR0=0;ET0=0;TR1=1;ET1=1; if(con>=6) //若左移位数超过6,则关闭调时按钮中断,继续显示电子钟的时间 { con=0;TR1=0;ET1=0;TR0=1;ET0=1; } } if(con!=0) { if(key1==0) { delay(10); while(key1==0); timedata[con]++; //当前位数据+1 switch(con) { case 1: case 3: if(timedata[con]>=6) //1、3位满6进一 { timedata[con]=0;

19

}break; case 2: case 4: if(timedata[con]>=10) 进一 { timedata[con]=0; } break; case 5: if(timedata[con]>=3) { timedata[con]=0; } break; default: ; } dis[con]=timedata[con]; dis[6]=0x0a; } } if(con!=0) { if(key2==0) { delay(10); while(key2==0); switch(con) { case 1: case 3: if(timedata[con]==0) { timedata[con]=0x05; 的减1处理 } else { timedata[con]--; }break; case 2: case 4: if(timedata[con]==0)

20

//2、4位满10

//5位满2清零

//1、3位为0时

//当前位数据-1


单片机实训报告心得(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2010最新驾照考试模拟试题5

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: