单片机学习笔记(三)——数码管显示

来源:互联网 发布:windows无法打开此文件 编辑:程序博客网 时间:2024/06/04 13:23
    LED显示器的接法:
         (1)共阴极
        (2)共阳极
    
        
                                                                         共阴极                                                                           共阳极

        七段数码管加上一个小数点,共计 8 段。因此为LED显示器提供的编码正好是一个字节。TX 实验板用共阴 LED显示器,根据电路连接图显示 16 进制数的编码已列在下表。
           
0x3f0x060x5b0x4f0x660x6d0123450x7d0x070x7f0x6f0x770x7c6789ab0x390x5e0x790x710x00 cdef无显示 
     LED数码显示方式及电路:     
        (1)静态显示方式
                特点:每个数码管的段选必须接一个 8 位数据线来保持显示的字形码。当送入一次字形码后,显示字形可一直保持,直到送入新字形码为止。
                优点:占用CPU时间少,显示便于监测和控制。
                缺点:硬件电路比较复杂,成本较高。
        (2)动态显示方式
                动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。选亮数码管采用动态扫描显示(即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示)。动态显示的亮度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示电路中的。 

    LED数码显示程序(C 语言):    
  1. #include<reg52.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. sbit dula = P2 ^ 6;//段选
  5. sbit wela = P2 ^ 7;//位选
  6. uchar num;
  7. uchar code table[]={
  8. 0x3f,0x06,0x5b,0x4f,
  9. 0x66,0x6d,0x7d,0x07,
  10. 0x7f,0x6f,0x77,0x7c,
  11. 0x39,0x5e,0x79,0x71};
  12. void delay(uint z);//延时
  13. int main()
  14. {
  15. wela = 1;//11101010 打开锁存器
  16. P0 = 0xea; //选择LED数码管
  17. wela = 0; //锁住LED数码管
  18. while(1)
  19. {
  20. for(num = 0; num < 16; num++)
  21. {
  22. dula = 1; //打开锁存器
  23. P0 = table[num]; //数值编码
  24. dula = 0; //锁住LED显示
  25. Delay(1000); //延时1s
  26. }
  27. }
  28. return 0;
  29. }
  30. void Delay(unsigned int xx) //输入 xx :ms
  31. {
  32. while(xx--)
  33. {
  34. Delay1ms();
  35. }
  36. }
  37. void Delay1ms()//@11.0592MHz 1ms
  38. {
  39. unsigned char i, j;
  40. _nop_();
  41. _nop_();
  42. _nop_();
  43. i = 11;
  44. j = 190;
  45. do
  46. {
  47. while (--j);
  48. } while (--i);
  49. }
1 0