標(biāo)題: 單片機(jī)stc89c52 lcd1602 9999秒倒計(jì)時(shí) 可按鍵控制 [打印本頁]

作者: lx20000904    時(shí)間: 2020-2-11 20:05
標(biāo)題: 單片機(jī)stc89c52 lcd1602 9999秒倒計(jì)時(shí) 可按鍵控制
kr51開發(fā)板 stc89c52 lcd1602 廢話不多說 看代
  1. #include "reg52.h"
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit rs=P2^0;//H數(shù)據(jù),L命令
  5. sbit lcden=P2^2;//高脈沖使能,使能脈寬最小150ns
  6. sbit rw=P2^1;
  7. uchar code table[]= "welcome to use";
  8. uchar code table1[]="press the key";
  9. uchar code table3[]="Time remaining";
  10. sbit key1=P3^2;
  11. sbit key2=P3^3;
  12. sbit key3=P3^4;
  13. sbit key4=P3^5;
  14. uchar qian;
  15. uchar bai;
  16. uchar shi;
  17. uchar ge;
  18. int num=9999;//變量控制時(shí)間
  19. int a=0;
  20. int c=0;
  21. int d=0;//這三個(gè)變量請讀者自行體會(huì)作用
  22. void anjian();//按鍵函數(shù)聲明
  23. /********************************************************************
  24. * 名稱 : delay(uchar x)
  25. * 功能 : 延時(shí)函數(shù)
  26. * 輸入 : x
  27. * 輸出 : 無
  28. ***********************************************************************/
  29. void delay(uchar x)
  30. { uint y;
  31. for(;x>0;x--)
  32.   {         
  33.   for(y=110;y>0;y--)
  34.     {};
  35.   }
  36. }
  37. /********************************************************************
  38. * 名稱 : lcdwrcom(uchar cdat)
  39. * 功能 : LCD1602寫數(shù)據(jù)到LCD1602
  40. * 輸入 : cdat
  41. * 輸出 : 無
  42. ***********************************************************************/
  43. void lcdwrdata(uchar dat)
  44. {
  45.    // dat = ((dat&0x01)<<7)|((dat&0x02)<<5)|((dat&0x04)<<3)|((dat&0x08)<<1)|((dat&0x10)>>1)|((dat&0x20)>>3)|((dat&0x40)>>5)|((dat&0x80)>>7);
  46. rs=1;//寫數(shù)據(jù)時(shí)RS拉高
  47. lcden=1;
  48. P0=dat;
  49. delay(6);
  50. lcden=0;
  51. delay(6);
  52. }
  53. /********************************************************************
  54. * 名稱 : lcdwrcom(uchar cdat)
  55. * 功能 : LCD1602寫命令到LCD1602
  56. * 輸入 : cdat
  57. * 輸出 : 無
  58. ***********************************************************************/
  59. void lcdwrcom(uchar cdat)//寫指令數(shù)據(jù)到LCD  
  60. {
  61.    // cdat = ((cdat&0x01)<<7)|((cdat&0x02)<<5)|((cdat&0x04)<<3)|((cdat&0x08)<<1)|((cdat&0x10)>>1)|((cdat&0x20)>>3)|((cdat&0x40)>>5)|((cdat&0x80)>>7);
  62.     rs=0;//寫指令時(shí)RS拉低
  63. lcden=1;
  64.     P0=cdat;//
  65. delay(6);//不加此延時(shí)將導(dǎo)致不能寫入指令,但能寫入顯示數(shù)據(jù)
  66. lcden=0;
  67. delay(6);
  68. }
  69. /********************************************************************
  70. * 名稱 : lcd_init()
  71. * 功能 : LCD1602初始化
  72. * 輸入 : 無
  73. * 輸出 : 無
  74. ***********************************************************************/
  75. void lcd_init()
  76. {
  77. lcdwrcom(0x38);//0x38設(shè)置顯示模式為:16X2 顯示,5X7 點(diǎn)陣,8 位數(shù)據(jù)接口
  78. lcdwrcom(0x0c);//打開顯示光標(biāo)閃爍
  79. lcdwrcom(0x06);
  80. lcdwrcom(0x01);
  81. }
  82. void display(int numdis)//顯示時(shí)間函數(shù)
  83. {
  84. qian=numdis/1000;
  85. bai=(numdis%1000)/100;
  86. shi=(numdis%100)/10;
  87. ge=numdis%10;
  88. }
  89. void init()//定時(shí)器初始化
  90. {
  91. TMOD=0X01;
  92. TH0=(65536-50000)/256;
  93. TL0=(65536-50000)%256;
  94. TR0=1;
  95. ET0=1;
  96. EA=1;
  97. }
復(fù)制代碼







LCD1602 (1).zip

1.44 KB, 下載次數(shù): 26, 下載積分: 黑幣 -5

此為c文件,直接燒錄就好






歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1