人人范文网 范文大全

LCD电子钟程序(广工单片机课程设计)

发布时间:2020-03-02 13:36:17 来源:范文大全 收藏本文 下载本文 手机版

#include

#define uchar unsigned char

#define uint unsigned int

#define KEY_IO P3

#define LCD_IO P0

sbit LCD_RS = P2^0;

sbit LCD_RW = P2^1;

sbit LCD_EN = P2^2;

sbit SPK = P1^2;

sbit LED = P2^4;

sbit KEY_0 = P3^7;

sbit KEY_1 = P3^6;

sbit KEY_2 = P3^5;

sbit KEY_3 = P3^4;

bit new_s, modify = 0;

char t0, sec = 0, min = 0, hour = 0;

char code LCD_line1[] = \"I LOVE U\";

char code LCD_line2[] = \"Timer: 00:00:00 \"; char Timer_buf[] = \"00:00:00\";

char a,b,c,k = 0;

//-------------------- void delay(uint z)

{

uintx, y;

for(x = z; x > 0; x--)

for(y = 100; y > 0; y--);

}//-------------------- void W_LCD_Com(uchar com)//写指令 {

LCD_RS = 0;

LCD_IO = com; // LCD_RS和R/W都为低电平时,写入指令

LCD_EN = 1;delay(5); LCD_EN = 0; //用EN输入一个高脉冲 }

//-------------------- void W_LCD_Dat(uchar dat)//写数据

{LCD_RS = 1;LCD_IO = dat; // LCD_RS为高、R/W为低时,写入数据LCD_EN = 1;delay(5); LCD_EN = 0; //用EN输入一个高脉冲 }

//-------------------- void W_LCD_STR(uchar *s)//写字符串 {while(*s)W_LCD_Dat(*s++); }

//--------------------

void W_BUFF(void)//填写显示缓冲区

{Timer_buf[7] = sec % 10 + 48; Timer_buf[6] = sec / 10 + 48;Timer_buf[4] = min % 10 + 48; Timer_buf[3] = min / 10 + 48;Timer_buf[1] = hour % 10 + 48;Timer_buf[0] = hour / 10 + 48;W_LCD_STR(Timer_buf);}

//--------------------

uchar read_key(void){ucharx1, x2;KEY_IO = 255;x1 = KEY_IO;if (x1 != 255) {delay(100);x2 = KEY_IO;if (x1 != x2)return 255;while(x2 != 255) x2 = KEY_IO;if else if (x1 == 0xbf)return 1;else if (x1 == 0xdf)return 2;else if (x1 == 0xef)return 3;else if (x1 == 0xf7)return 4;}return 255;} //--------------------

void Init(){LCD_RW = 0;W_LCD_Com(0x38); delay(50);W_LCD_Com(0x0c);W_LCD_Com(0x06);W_LCD_Com(0x01);W_LCD_Com(0x80); W_LCD_STR(LCD_line1); W_LCD_STR(LCD_line2);

TMOD = 0x01;//T0定时方式1TH0 = 0x4c;TR0 = 1;//启动T0

PT0 = 1;//高优先级, 以保证定时精度

ET0 = 1;EA = 1;}

//--------------------

void main(){uint i, j;uchar Key;Init();while(1){//

if (new_s) { //如果出现了新的一秒, 修改时间

new_s = 0;sec++;sec %= 60;if(!sec){min++;min %= 60;if(!min){ hour++; hour %= 24;}}W_BUFF();//写显示

W_LCD_Com(0xc0 + 7);(x1 == 0x7f)return 0;W_LCD_Com(0xC0);

//

if (!sec && !min) { //整点报时

for (i = 0; i

switch(Key) {//分别处理四个按键

case0: if(KEY_0) {min++;min %= 60;W_BUFF(); break;}case1: if(KEY_1) {hour++; hour %= 24; W_BUFF(); break;}case2: if(KEY_2){ a=sec;b=min;c=hour;sec = 0, min = 0, hour = 0;}case3: if(KEY_3){sec=a+sec;if(sec>60){sec=sec-60;min++;}min=b+min ;if(min>60){min=min-60;hour++;}hour=c+hour;if(hour>24){hour=hour-24;} }} }} //--------------------

void timer0(void) interrupt 1//T0中断函数, 50ms执行一次{TH0 = 0x4c;t0++; t0 %= 20;//20, 一秒钟if(t0 == 0){new_s = 1; LED = ~LED;}if(modify)LED = 0;} K0分加一 K1时加一 K2秒表开始

K3秒表结束,恢复正常时间!

单片机课程设计电子钟

单片机课程设计电子钟设计

单片机课程设计电子钟源程序

单片机课程设计电子钟完整

单片机课程设计报告LCD显示温度

单片机课程论文设计电子钟课程设计

电子钟课程设计

单片机电子钟设计任务书.

长沙理工大学《单片机课程设计》电子钟单片机实习报告

电子钟课程设计心得

LCD电子钟程序(广工单片机课程设计)
《LCD电子钟程序(广工单片机课程设计).doc》
将本文的Word文档下载到电脑,方便编辑。
推荐度:
点击下载文档
点击下载本文文档