LCD显示的秒表单片机课程设计 联系客服

发布时间 : 星期四 文章LCD显示的秒表单片机课程设计更新完毕开始阅读6c1ca30f8f9951e79b89680203d8ce2f006665b9

芜湖职业技术学院 信息工程系

1602LCD秒表的显示源代码:

//------------------------------------Main.c----------------------------------------- //名称:用1602LCD设计秒表

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

//说明:首次按下K1键时开始计时,再次按下时暂停,第三次按下时继续 // 累计计时,再次按下时停止计时,K2键用于清零秒表 //----------------------------------------------------------------------------------- # include # include

#define uchar unsigned char #define uint unsigned int

#define delayNOP() {_nop_();_nop_();_nop_();_nop_();}

//LCD控制函数

void LCD_Initialize();

void LCD_Set_POS(uchar); void LCD_Write_Data(uchar);

void Display_String(uchar *,uchar);

sbit K1=P1^0; sbit K2=P2^1; sbit BEEP=P3^0; sbit LCD_RS=P2^0; sbit LCD_RW=P2^1; sbit LCD_EN=P2^2; uchar KeyCount=0;

uchar code msg1[]={%uchar code msg2[]={\ %uchar code Prompts[][16]= {

{\ \ {\ \ {\ \ {\}

//计时缓冲与显示缓冲

uchar Time_Buffer[] ={0,0,0,0};

uchar LCD_Display_Buffer[] ={\

//------------------------------------------------------------------------------------- //蜂鸣器

//------------------------------------------------------------------------------------- void BeeP()

37

芜湖职业技术学院 信息工程系

{

uchar i,j=70;

for (i=0;i<180;i++) {

while (--j); BEEP=~BEEP; }

BEEP=0; }

//------------------------------------------------------------------------------------- //延时

//------------------------------------------------------------------------------------- void DelayX(uint ms) {

uchar i;

while(ms--) for (i=0;i<120;i++); }

//------------------------------------------------------------------------------------- //显示计时

//------------------------------------------------------------------------------------- void Show_Second() {

uchar i;

LCD_Set_POS(0X45); //设置LCD显示起点 for (i=3;i!=0xff;i--) {

//将两位整数的1、100s,秒,分,时转换为8位数字字符 LCD_Display_Buffer[2*i+1]=Time_Buffer[i]/10+'0'; LCD_Display_Buffer[2*i]=Time_Buffer[i]+'0'; //在i=3,2,1,0时分别显示时,分,秒,1/100s LCD_Write_Data(LCD_Display_Buffer[2*i+1]); LCD_Write_Data(LCD_Display_Buffer[2*i]); LCD_Write_Data(':'); } }

//------------------------------------------------------------------------------------ //Time0中断

//------------------------------------------------------------------------------------ void Time0() interrupt 1 using 0 {

TH0=-10000/256; TL0=-10000%6;

38

芜湖职业技术学院 信息工程系

Time_Buffer[0]++;

if(Time_Buffer[0]==100) {

Time_Buffer[0]=0; Time_Buffer[1]++; }

if(Time_Buffer[1]==60) //秒 {

Time_Buffer[1]=0; Time_Buffer[2]++; }

if(Time_Buffer[2]==60) //分 {

Time_Buffer[2]=0; Time_Buffer[3]++; }

if(Time_Buffer[3]==24) //时 Time_Buffer[3]=0; }

//------------------------------------------------------------------------------------ //主函数

//------------------------------------------------------------------------------------ void main() {

uchar i; IE=0x82;

TMOD=0X01; TH0=-10000/256; TL0=-10000%6; LCD_Initialize();

Display_String(msg1,0x00); Display_String(msg2,0x40); While (1) {

if (K1==0) {

DelayX(100); i=++KeyCount; switch(i) {

Case 1:

Case 3: TR0=1;

Display_String(Promts[i-1],0); break; Case 2:

Case 4: TR0=0;

Display_String(Promts[i-1],0);

39

芜湖职业技术学院 信息工程系

break; default:TR0=0; break; }

while (K1==0); // Beep(); } else

if (K2==0) {

TR0=0;

KeyCount=0; for(i=0;i<4;i++) Time_Buffer[i]=0;

Display_String(msg1,0); Beep();

DelayX(100); While (K2==0); // }

Show_Second(); } }

//-------------------------------------160LCD.C------------------------------------- //1602LCD显示驱动函数

//---------------------------------------------------------------------------------- # include # include

# define uchar unsigned char # define uint unsigned int

# define DelayNOP() {_nop();_nop();_nop();_nop();} sbit LCD_RS=P2^0; sbit LCD_RW=P2^1; sbit LCD_EN=P2^2; bit LCD_Busy_Check(); void LCD_Busy_Check(); void LCD_Initialize();

void LCD_Write_Command(uchar); void LCD_ Write_Data(uchar);

//------------------------------------------------------------------------------ //延时

//------------------------------------------------------------------------------ void DelayMS(uint ms) {

40