找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3576|回复: 2
打印 上一主题 下一主题
收起左侧

单片机频率计设计(lcd1602显示) 仿真+汇编程序

[复制链接]
跳转到指定楼层
楼主
T0用来定时,T1用来对1s内外来高电平计数

目前量程为0~65535Hz

可以通过对程序的些许修改使量程达到0~4,294,967,295Hz

本人现在大三,初学单片机
这是一次课程设计
欢迎各位牛人批评指正,传授经验

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
  1. /**************************************************************************************
  2. *                              简易频率仪设计                                                                                                  *                                                                                                                                             
  3. ***************************************************************************************/
  4.         ORG        00H
  5.         LJMP        MAIN
  6.         ORG                0BH
  7.         LJMP        T0_INT
  8.         ORG                2000H
  9.         T0COUNT        EQU                36H
  10.         LCDW        EQU                45H
  11.         LCDQ        EQU                46H
  12.         LCDB        EQU                40H
  13.         LCDS        EQU                41H
  14.         LCDG        EQU                42H
  15.         TEMP_L        EQU                43H
  16.         TEMP_H        EQU                44H        
  17.         RS          EQU          P2.6
  18.         RW          EQU          P2.5
  19.         E                  EQU          P2.7
  20.         ORG                        2000H
  21. MAIN:
  22.         MOV                 SP,#60H
  23.         LCALL                SET_T
  24.         LCALL                INIT_LCD
  25.         LCALL                LCDDISP1
  26.         SJMP                [        DISCUZ_CODE_1        ]nbsp;      
  27. /*****************************T0,T1设置***********************************************/
  28. SET_T:
  29.         MOV                        TMOD,#51H
  30.         MOV                        TH0,#3CH
  31.         MOV                        TL0,#0B0H
  32.         MOV                        TH1,#00H
  33.         MOV                        TL1,#00H
  34.         SETB                EA
  35.         SETB                TR0
  36.         SETB                TR1
  37.         SETB                ET0
  38.         RET
  39. /*****************************LCD初始化***********************************************/
  40. INIT_LCD:        
  41.         MOV                 P0,#01H                        ;清屏  
  42.         LCALL                LcdWriteCom   
  43.         MOV                 P0,#38H                         ;功能设置,DB4=1为8位数据接口,DB3=1为双行显示 DB2=0为5*7点阵   
  44.         LCALL                 LcdWriteCom   
  45.         MOV                 P0,#0CH                         ;显示开关控制,DB2=1为开显示,DB1=1为光标开,DB0=0为字符不闪烁   
  46.         LCALL                 LcdWriteCom   
  47.         MOV                 P0,#06H                         ;输入方式设置,设置光标的移动方向,并指定整体显示是否移动,DB1=1为增量方式,DB0=0为不以为
  48.         LCALL                 LcdWriteCom

  49.         RET
  50. /*****************************LCD第一行显示程序***********************************************/
  51. LCDDISP1:
  52.         MOV                 P0,#80H                        ;第一行的开始位置   
  53.         LCALL                 LcdWriteCom
  54.         MOV                        DPTR,#TABLE1
  55.         MOV                 R1,#00H                   ;显示table中的值  
  56. LOOP1: MOV                 A,R1                        ;到table取码   
  57.         MOVC                 A,@A+DPTR   
  58.         LCALL                   LcdWriteData                  ;显示到LCD
  59.         INC                 R1   
  60.         CJNE                 A,#00H,LOOP1                 ;是否到00H  
  61.         RET
  62. /*****************************LCD第二行显示程序***********************************************/
  63. LCDDISP2:
  64.         MOV                 R3,LCDW        
  65.         CJNE                R3,#30H,GO_W
  66.         MOV                        LCDW,#20H
  67.         MOV                 R3,LCDQ        
  68.         CJNE                R3,#30H,GO_Q
  69.         MOV                        LCDQ,#20H
  70.         MOV                        R3,LCDB
  71.         CJNE                R3,#30H,GO_B
  72.         MOV                        LCDB,#20H
  73.         MOV                        R3,LCDS
  74.         CJNE                R3,#30H,GO_S
  75.         MOV                        LCDS,#20H
  76. GO_W:
  77.         MOV                 P0,#0C3H                        ;第二行的开始位置   
  78.         LCALL                 LcdWriteCom  
  79.         MOV                 A,LCDW
  80.         LCALL                LcdWriteData
  81. GO_Q:
  82.         MOV                 P0,#0C4H                        ;第二行的开始位置   
  83.         LCALL                 LcdWriteCom  
  84.         MOV                 A,LCDQ
  85.         LCALL                LcdWriteData        
  86. GO_B:        
  87.         MOV                 P0,#0C5H                        ;第二行的开始位置   
  88.         LCALL                 LcdWriteCom  
  89.         MOV                 A,LCDB
  90.         LCALL                LcdWriteData
  91. GO_S:
  92.         MOV                 P0,#0C6H                          
  93.         LCALL                 LcdWriteCom
  94.         MOV                 A,LCDS
  95.         LCALL                LcdWriteData
  96. GO_G:
  97.         MOV                 P0,#0C7H                          
  98.         LCALL                 LcdWriteCom
  99.         MOV                 A,LCDG
  100.         LCALL                LcdWriteData
  101.         MOV                 P0,#0C8H         
  102.         LCALL                 LcdWriteCom
  103.         MOV                        DPTR,#TABLE2
  104.         MOV                 R1,#00H                   ;显示table中的值  
  105. LOOP2: MOV                 A,R1                        ;到table取码   
  106.         MOVC                 A,@A+DPTR   
  107.         LCALL           LcdWriteData                  ;显示到LCD
  108.         INC                 R1   
  109.         CJNE                 A,#00H,LOOP2                 ;是否到00H
  110.         RET
  111.          
  112. /*****************************LCD写入命令***********************************************/
  113. LcdWriteCom:
  114.         CLR                 RS      
  115.         CLR                 RW   
  116.         CLR                 E   
  117.         LCALL                 DELAY   
  118.         SETB                E   
  119.         RET
  120. /*****************************LCD写入数据***********************************************/
  121. LcdWriteData:  
  122.         
  123.         MOV                 P0,A
  124.         SETB                 RS   
  125.         CLR                 RW   
  126.         CLR                        E   
  127.         LCALL                 DELAY
  128.         SETB                 E
  129.         RET
  130. /*****************************频率计算***********************************************/  
  131. HZ_CAL:
  132.         MOV                        R5,#00H
  133.         MOV                        R2,#00H
  134.         MOV                        R3,TH1
  135.         MOV                        R4,TL1
  136.         MOV                        R6,#27H
  137.         MOV                        R7,#10H
  138.         LCALL                DIV_CAL
  139.         MOV                        A,R4
  140.         ADD                        A,#30H
  141.         MOV                        LCDW,A
  142.         
  143.         MOV                        TEMP_H,R6
  144.         MOV                        TEMP_L,R7
  145.         MOV                        R5,#00H
  146.         MOV                        R2,#00H
  147.         MOV                        R3,TEMP_H
  148.         MOV                        R4,TEMP_L
  149.         MOV                        R6,#03H
  150.         MOV                        R7,#0E8H
  151.         LCALL                DIV_CAL
  152.         MOV                        A,R4
  153.         ADD                        A,#30H
  154.         MOV                        LCDQ,A

  155.         MOV                        TEMP_H,R6
  156.         MOV                        TEMP_L,R7
  157.         MOV                        R5,#00H
  158.         MOV                        R2,#00H
  159.         MOV                        R3,TEMP_H
  160.         MOV                        R4,TEMP_L
  161.         MOV                        R6,#00H
  162.         MOV                        R7,#64H
  163.         LCALL                DIV_CAL
  164.         MOV                        A,R4
  165.         ADD                        A,#30H
  166.         MOV                        LCDB,A

  167.         MOV                        TEMP_H,R6
  168.         MOV                        TEMP_L,R7
  169.         MOV                        R5,#00H
  170.         MOV                        R2,#00H
  171.         MOV                        R3,TEMP_H
  172.         MOV                        R4,TEMP_L
  173.         MOV                        R6,#00H
  174.         MOV                        R7,#0AH
  175.         LCALL                DIV_CAL
  176.         MOV                        A,R4
  177.         ADD                        A,#30H
  178.         MOV                        LCDS,A

  179.         MOV                        A,R7
  180.         ADD                        A,#30H
  181.         MOV                        LCDG,A
  182.         MOV                        T0COUNT,#00H
  183.         RET
  184. DIV_CAL:
  185. /**************************************************************************************
  186. *                              双字节无符号除法                                                                                                  *
  187.                         R5R2R3R4/R6R7)=(R2)R3R4        余数R6R7                                                                                                                                                                  
  188. ***************************************************************************************/
  189.         
  190. NDIV42:        
  191.         MOV                A,R1
  192.         PUSH        ACC
  193.         MOV                B,#00H
  194. NDV421:
  195.         MOV                A,R2
  196.         CLR                C
  197.         SUBB        A,R7
  198.         MOV                R1,A
  199.         MOV                A,R5
  200.         SUBB        A,R7
  201.         MOV                R1,A
  202.         MOV                A,R5
  203.         SUBB        A,R6
  204.         JC                NDV422
  205.         MOV                R5,A
  206.         MOV                A,R1
  207.         MOV                R2,A
  208.         INC                B
  209.         SJMP        NDV421
  210. NDV422:
  211.         PUSH        B
  212.         MOV                B,#10H
  213. NDV423:
  214.         CLR                C
  215.         MOV                A,R4
  216.         RLC                A
  217.         MOV                R4,A
  218.         MOV                A,R3
  219.         RLC                A
  220.         MOV                R3,A
  221.         MOV                A,R2
  222.         RLC                A
  223.         MOV                R2,A
  224.         XCH                A,R5
  225.         RLC                A
  226.         XCH                A,R5
  227.         MOV                F0,C
  228.         CLR                C
  229.         SUBB        A,R7
  230.         MOV                R1,A
  231.         MOV                A,R5
  232.         SUBB        A,R6
  233.         JB                F0,NCV424
  234.         JC                NDV425
  235. NCV424:
  236.         MOV                R5,A
  237.         MOV                A,R1
  238.         MOV                R2,A
  239.         INC                R4
  240. NDV425:
  241.         DJNZ        B,NDV423
  242.         POP                ACC
  243.         CLR                OV
  244.         JNZ                NDV426
  245.         SETB        OV
  246. NDV426:
  247.         XCH                A,R2
  248.         MOV                R7,A
  249.         MOV                A,R5
  250.         MOV                R6,A
  251.         POP                ACC
  252.         MOV                R1,A
  253.         RET
  254. /*****************************延时程序***********************************************/
  255. DELAY:        MOV R7,#10
  256. D1:                MOV R6,#0F8H   
  257. D2:                DJNZ R6,D2   
  258.                 DJNZ R7,D1   
  259.                 RET
  260. /*****************************T0中断服务程序***********************************************/        
  261. T0_INT:
  262.         MOV                        TH0,#3CH
  263.         MOV                        TL0,#0B0H
  264.         INC                        T0COUNT
  265.         MOV                        R2,T0COUNT
  266.         CJNE                R2,#20,OVER
  267.         CLR                        TR0
  268.         CLR                        TR1
  269.         LCALL                HZ_CAL        
  270.         LCALL                LCDDISP2
  271.         MOV                        T0COUNT,#00H
  272.         MOV                        TH0,#3CH
  273.         MOV                        TL0,#0B0H
  274.         MOV                        TH1,#00H
  275.         MOV                        TL1,#00H
  276.         SETB                TR0
  277.         SETB                TR1               
  278. OVER:
  279.         RETI         
  280. TABLE1:
  281.         DB                "Frequency:" , 00H
  282. TABLE2:
  283.         DB                "Hz" , 00H      
  284. END
复制代码

所有资料51hei提供下载:
单片机课程设计_4.0.rar (71.49 KB, 下载次数: 94)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:405479 发表于 2019-7-1 08:34 | 只看该作者
MARK  学习了
回复

使用道具 举报

板凳
ID:258520 发表于 2019-12-11 21:24 | 只看该作者
没有仿真工程文件啊  打不开
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

Powered by 单片机教程网

快速回复 返回顶部 返回列表