单片机教程网

电脑版
提示:原网页已由神马搜索转码, 内容由www.51hei.com提供.
查看:1713|回复:0
打印上一主题下一主题

基于mega16单片机1602LCD显示程序,定时亮灯装置

[复制链接]
跳转到指定楼层
楼主
ID:1048739发表于 2022-10-24 19:48|只看该作者|只看大图回帖奖励

自制定时亮灯装置。单片机程序如下。
  1. // Target : M16
  2. // Crystal: 12.000Mhz

  3. #include< iom16v.h>
  4. #include< macros.h>

  5. #define uchar unsigned char  
  6. #define uint unsigned int  
  7. #define mclk 1000000
  8. //12000000
  9. //8000000
  10. #pragma interrupt_handler uart_rx:12

  11. #define key_port PORTD    
  12. #define key_port_ddr DDRD
  13. #define key_port_pin PIND
  14. uchar WENZI1[]="JIESHOUDAOD: ...."; //WENZI1
  15. uchar WENZI2[]="receiving ... ..."; //WENZI2
  16.   uint FASONGSHUZU[10];             //SHUJU1
  17. uint x=9;
  18. uchar temn,count;
  19. uchar temtab;
  20. long int i,w,e;
  21. long int jd,k,sz;
  22. int g,s;

  23. uchar rdata,flag=0;//baocun jieshoudao d shuju



  24. void delay (uint ms)
  25. {
  26.        uint i,j;
  27.        for(i=0;i<ms;i++)
  28.        {
  29.                for (j=0;j<1141;j++);
  30.        }
  31. }

  32. void DelaymS (uint i)
  33. {
  34.        uint j;
  35.        for(;i!=0;i--)
  36.        {
  37.                for (j=20;j!=0;j--);
  38.        }
  39. }


  40. void uart_init(uint baud)
  41. {
  42. PORTA = 0x00;

  43. DDRA  = 0x01;

  44. UCSRB=0X00;
  45. UCSRA=0X00;//
  46. UCSRC=(1<<URSEL)|(0<<UPM0)|(3<<UCSZ0);//选择UCSRC,异步模式,禁止校验,1位停止位,8为数据位。
  47. baud=mclk/16/baud-1;
  48. UBRRL=baud;
  49. UBRRH=baud>>8;
  50. UCSRB=(1<<TXEN)|(1<<RXEN)|(1<<RXCIE);//接收、发送使能,接收中断使能。
  51. SREG=BIT(7);
  52. DDRD  = 0x3F;//portd6输入,其他输出,显示程序//pd7shuru
  53. DDRB = 0XFF; //输出,显示程序
  54. //DDRD|=0X02;//配置pd1,TXD为输出,通信
  55. DDRC  = 0xFF;//配置C为输出,通信
  56. }
  57. void uart_rx()
  58. {
  59. UCSRB&=~BIT(RXCIE);//jieshou zhongduan guanbi ,
  60. rdata=UDR;
  61. flag=1;
  62. UCSRB|=BIT(RXCIE);//DAKAI JIESHOU ZHOGNDUAN HANSHU
  63. }


  64. void uart_sendB(uchar data)
  65. {
  66. while(!(UCSRA&(BIT(UDRE))));//di5wei=1;DENGDAI JICUNQI WEIKONG
  67. UDR=data;
  68. while(!UCSRA&(BIT(TXC)));//fasong jieshu
  69. UCSRA|=BIT(TXC);
  70. }

  71. void write_com(uchar com)
  72. {
  73.   PORTD& = ~BIT(4);
  74. PORTD& = ~BIT(5); //KONGZHIKOU,PD4,5,3 为RS,R/W,EA。数据位为PB口
  75. PORTB = com; //SHUJUKOU
  76. PORTD |= BIT(3); //
  77. delay(1);
  78. PORTD& = ~BIT(3); //
  79. }
  80. void write_data(uchar data)
  81. {
  82.   PORTD |= BIT(4);
  83. PORTD& = ~BIT(5);
  84. PORTB = data;
  85. PORTD |= BIT(3); //
  86. delay(1);
  87. PORTD& = ~BIT(3);//
  88. }


  89. void shujuchuli(long int  count)
  90. {
  91. uint i,j1,j2,j3,j4,j5,j6;
  92. count=count%100000;
  93.    j1=count/100000;
  94.        j2=count/10000;count=count%10000;   //小数点后第一位 + '0'
  95.        j3=count/1000;count=count%1000;   //小数点后第一位 + '0'
  96.        j4=count/100;count=count%100;
  97.        j5=count/10;count=count%10;
  98.        j6=count;

  99. FASONGSHUZU[0]=j1+0x30;
  100. FASONGSHUZU[1]=j2+0x30;
  101. FASONGSHUZU[2]=j3+0x30;
  102. FASONGSHUZU[3]=j4+0x30;
  103. FASONGSHUZU[4]=j5+0x30;
  104. FASONGSHUZU[5]=j6+0x30;
  105. }



  106. void xianshi1(uchar tab)
  107. {
  108. uint i;
  109.   write_com(0X38);
  110. delay(5);
  111.   write_com(0X01);
  112. delay(5);
  113. write_com(0X0C);
  114. delay(5);
  115. write_com(0X06);
  116. delay(5);
  117. write_com(0X80+0);
  118. delay(5);
  119.   for(i=0;i<16;i++)
  120. {
  121.    write_data(WENZI1[i]);
  122.   delay(5);
  123. }
  124. }



  125. void DISSHUJU(uint num)

  126. {
  127.    uint i;
  128.    write_com(0X80+0X40);
  129.    delay(5);
  130.    for(i=0;i<6;i++)
  131.      {
  132.          write_data(FASONGSHUZU[i]);
  133.          delay(5);
  134.          }
  135. }




  136. void xianshi2(uchar tab)
  137. {
  138. uint i;
  139.   write_com(0X38);
  140. delay(5);  
  141. write_com(0X01);
  142. delay(5);
  143. write_com(0X0C);
  144. delay(5);
  145. write_com(0X06);
  146. delay(5);
  147. write_com(0X80+0);
  148. delay(5);
  149. for(i=0;i<16;i++)
  150. {
  151.    write_data(WENZI2[i]);
  152.   delay(5);
  153. }
  154. }




  155. void YANSHIMIN(uint i)
  156. {
  157.        uint j;
  158.        for(;i!=0;i--)
  159.        {
  160.                for (j=60;j!=0;j--)
  161.              {
  162.              DelaymS (5000);
  163.              DelaymS (5000);
  164.              }
  165.        }
  166. }

  167. //************************main***********************
  168. void main (void)             //程序主函数
  169. {
  170.        uint k,i=8;
  171. uint j=20;
  172. unsigned char tem;
  173.        uart_init(1200);//初始化端口。同时打开串口。可接收串口数据。
  174.        //uart_sendB(i);
  175.        //delay(10);
  176.        //uart_sendB(j);
  177.        //delay(10);

  178.        DelaymS (5000);      
  179.        PORTA=0X00;//DENGMIE
  180.        DelaymS (5000);      
  181.        PORTA=0XFF;//DENGMIE
  182.        //以下,接收按键调整延时时间
  183.        PORTD=PORTD|0X80;//ZHI 1,pd7  
  184.        for(j;j!=0;j--)
  185.        {
  186.       
  187.        tem=key_port_pin&0x80;
  188.        if( tem==0x00)
  189.        i=i++;
  190.        DelaymS (5000);      
  191.            }                      
  192.       
  193.        //以下,显示,延时
  194.        xianshi1(WENZI1[i]);
  195.        for(i;i!=0;i--)
  196.        {          
  197.        PORTA=0XFF;//DENGMIE
  198.        xianshi2(WENZI2[i]);
  199.                  shujuchuli(i);
  200.                    xianshi1(WENZI1[i]);
  201.                  DISSHUJU(FASONGSHUZU[i]);
  202.                  DelaymS (5000);      
  203.                 
  204.                    YANSHIMIN(60);
  205.                 
  206.                 
  207.                 
  208.        }
  209.        PORTA=0X00;//
  210.        DelaymS (5000);      
  211.       
  212. }

复制代码

评分

黑币 +50
收起理由
+ 50
共享资料的黑币奖励!

查看全部评分

手机版|小黑屋|51黑电子论坛|51黑电子论坛6群QQ管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网