1602液晶显示 C语言单片机

更新时间:2024-04-23 20:40:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

学习单片机半个月了,学得也差不多了,今天写一个写程序练习练习哈哈

跟电子表的功能一模一样,可以进行设置,准确度非常高哈哈,用的是1602型号的液晶显示器,大家只需要简单的修改一下端口就能应用到你自己的设计上去了.

下面是源代码:

#include

#define uchar unsigned char

#define uint unsigned int

uchar code year_table[]=\

uchar code time_table[]=\

uchar time_count,key_count;

char hour,minute,second,mouth,day,week;

uint year;

sbit rs=P3^5;

sbit lcden=P3^4;

sbit dula=P2^6;

sbit wela=P2^7;

sbit key_set=P3^0;

sbit key_inc=P3^1;

sbit key_dec=P3^2;

sbit rd=P3^7;

void delay(uint delay_time) {

uint x,y;

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

for(y=110;y>0;y--); }

void write_com(uchar com) {

rs=0;

lcden=0;

P0=com;

delay(5);

lcden=1;

delay(5);

lcden=0; }

void write_date(uchar date) {

rs=1;

lcden=0;

P0=date;

delay(5);

lcden=1;

delay(5);

lcden=0; }

void timer_Init() {

TMOD=0x01;

TH0=(65536-50000)/256;

TL0=(65536-50000)%6;

EA=1;

ET0=1;

TR0=1; }

write_time(uchar addr,uchar time) {

uchar shi,ge;

shi=time/10;

ge=time;

write_com(0x80+0x40+addr);

write_date(0x30+shi);

write_date(0x30+ge); }

write_day(uchar addr,uchar day) {

uchar shi,ge;

shi=day/10;

ge=day;

write_com(0x80+addr);

write_date(0x30+shi);

write_date(0x30+ge); }

write_year(uchar addr,uint year)

{

uchar shi,ge,qian,bei;

qian=year/1000;

bei=year00/100;

shi=year00/10;

ge=year;

write_com(0x80+addr);

write_date(0x30+qian);

write_date(0x30+bei);

write_date(0x30+shi);

write_date(0x30+ge); }

write_week(uchar addr,uchar week)

{

write_com(0x80+addr);

switch(week) {

case 1:

write_date('M');

write_date('O');

write_date('N');

break;

case 2:

write_date('T');

write_date('U');

write_date('E');

break;

case 3:

write_date('W');

write_date('E');

write_date('D');

break;

case 4:

write_date('T');

write_date('H');

write_date('U');

break;

case 5:

write_date('F');

write_date('R');

write_date('I');

break;

case 6:

write_date('S');

write_date('A');

write_date('T');

break;

case 7:

write_date('S');

write_date('U');

write_date('N');

break;

} }

void Init() {

uchar num;

dula=0;

wela=0;

lcden=0;

year=2010;

mouth=4;

day=11;

week=7;

write_com(0x38);

write_com(0x0c);

write_com(0x06);

write_com(0x01);

write_com(0x80);

for(num=0;num<16;num++) {

write_date(year_table[num]);

delay(5); }

write_com(0x80+0x40);

for(num=0;num<12;num++) {

write_date(time_table[num]);

delay(5); }

timer_Init(); }

void keyscan() {

rd=0;

if(key_set==0)

{

delay(5);

if(key_set==0)

{

key_count++;

while(!key_set);//等待键盘释放

if(key_count==1)

{

TR0=0;

write_com(0x80+0x40+10);

write_com(0x0f);

}

if(key_count==2)

{

write_com(0x80+0x40+7);

}

if(key_count==3)

{

write_com(0x80+0x40+4);

}

if(key_count==4)

{

write_com(0x80+13);

}

if(key_count==5)

{

write_com(0x80+10);

}

if(key_count==6)

{

write_com(0x80+7);

}

if(key_count==7)

{

write_com(0x80+2);

}

if(key_count==8)

{

key_count=0;

write_com(0x0c);

TR0=1;

}

}

}

if(key_count!=0)

{

if(key_inc==0)

{

delay(5);

if(key_inc==0)

{

while(!key_inc);

if(key_count==1)

{

second++;

if(second==60)

{

second=0;

}

write_time(10,second);

write_com(0x80+0x40+10);

}

if(key_count==2)

{

minute++;

if(minute==60)

{

minute=0;

}

write_time(7,minute);

write_com(0x80+0x40+7);

}

if(key_count==3)

{

hour++;

if(hour==24)

{

hour=0;

}

write_time(4,hour);

write_com(0x80+0x40+4);

}

if(key_count==4)

{

week++;

if(week==8)

{

week=1;

}

write_week(13,week);

write_com(0x80+13);

}

if(key_count==5)

{

day++;

if(day==32)

{

day=1;

}

write_day(10,day);

write_com(0x80+10);

}

if(key_count==6)

{

mouth++;

if(mouth==13)

{

mouth=1;

}

write_day(7,mouth);

write_com(0x80+7);

}

if(key_count==7)

{

year++;

write_year(2,year);

write_com(0x80+2);

}

}

}

if(key_dec==0)

{

delay(5);

if(key_dec==0)

{

while(!key_dec);

if(key_count==1)

{

second--;

if(second==-1)

{

second=59;

}

write_time(10,second);

write_com(0x80+0x40+10);

}

if(key_count==2)

{

minute--;

if(minute==-1)

minute=59;

write_time(7,minute);

write_com(0x80+0x40+7);

}

if(key_count==3)

{

hour--;

if(hour==-1)

hour=23;

write_time(4,hour);

write_com(0x80+0x40+4);

}

if(key_count==4)

{

week--;

if(week==0)

{

week=7;

}

write_week(13,week);

write_com(0x80+13);

}

if(key_count==5)

{

day--;

if(day==0)

{

day=31;

}

write_day(10,day);

write_com(0x80+10);

}

if(key_count==6)

{

mouth--;

if(mouth==0)

{

mouth=12;

}

write_day(7,mouth);

write_com(0x80+7);

}

if(key_count==7)

{

year--;

if(year==2009)

{

year=2010;

}

write_year(2,year);

write_com(0x80+2);

}

}

}

} }

void main() {

Init();

while(1) {

keyscan(); } }

void clock_timer() interrupt 1 {

TH0=(65536-50000)/256;

TL0=(65536-50000)%6;

time_count++;

if(time_count==18)

{

time_count=0;

second++;

if(second==60)

{

second=0;

minute++;

if(minute==60)

{

minute=0;

hour++;

if(hour==24)

{

hour=0;

}

write_time(4,hour);

}

write_time(7,minute);

}

write_time(10,second);

} }

本文来源:https://www.bwwdw.com/article/ba8p.html

Top