完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
#include
#define MotorTabNum 5 unsigned char T0_NUM; ***it MotorEn = P2^1; // 使能 ***it FX = P2^0; // 方向 ***it CLK = P2^2; // 脉冲 //----数码管--------------- ***it SMG1 = P1^4; //数码管第一位定义 ***it SMG2 = P1^5; //数码管第二位定义 ***it SMG3 = P1^6; //数码管第三位定义 ***it SMG4 = P1^7; //数码管第四位定义 int table[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x40}; //共阴极数码管段值 unsigned char g_MotorSt = 0; // 启停 unsigned char g_MotorDir = 0; // 正反 //unsigned char MotorTab[6] = {200, 160, 120, 80, 40, 20}; unsigned char MotorTab[6] = {12, 10, 8, 6, 4, 2}; signed char g_MotorNum = 0; //-------------- void delayms(xms); void mDelay(unsigned int Delaytime); //延时函数 void T0_Init(); unsigned char Recive(); void KeyScan(void); void Display(void); // 串口接收主程序 void main(void) { // unsigned char i; unsigned char lsData = 0; T0_Init(); // 定时器0 1 初始化 MotorEn = 0; // 使能关闭 FX = 0; // 方向 while(1) { lsData = Recive(); if(lsData == 'A') // 启停 { g_MotorSt = g_MotorSt ^ 0x01; MotorEn ^= 1; TR0 = 1; } else if(lsData == 'B') // 方向 { g_MotorDir = g_MotorDir ^ 0x01; FX ^= 1; } else if(lsData == 'C') { g_MotorNum++; if(g_MotorNum > MotorTabNum) g_MotorNum = MotorTabNum; } else if(lsData == 'D') { g_MotorNum--; if(g_MotorNum < 0) g_MotorNum = 0; } } } /********定时器初始化***********************************************************/ void T0_Init() { TMOD = 0x21; //定时器0 1 SCON |= 0x50; PCON |= 0x00; TH0 = (65535-100)/256; // 1ms TL0 = (65535-100)%256; TH1 = 0xf3; // 12MHZ 2400波特率 TL1 = 0xf3; EA = 1; ET0 = 1; TR1 = 1; REN = 1; } void Timer0_Init() //////// { TMOD = 0x20; SCON = 0x50; PCON = 0x00; TH1 = 0xf3; // 12MHZ 2400波特率 TL0 = 0xf3; TR1 = 1; REN = 1; } unsigned char Recive() // 串口接收程序 { unsigned char date; while(RI == 0); RI = 0; date = SBUF; return date; } /********定时器中断*****************/ void T0_time() interrupt 1 { // TR0 = 0; TH0 = (65535-100)/256; TL0 = (65535-100)%256; T0_NUM++; if(T0_NUM >= MotorTab[g_MotorNum]) // 增加按键g_MotorNum++ 减小按键g_MotorNum-- { T0_NUM = 0; CLK=CLK^0x01; // 输出脉冲 } // TR0 = 1; } /****************************************************************************** * 名称: Set_Display() * 功能: 数码管显示函数 * 输入: 无 * 输出: 无 * 说明: ******************************************************************************/ void Display(void) { unsigned char b1, b2; b1=g_MotorNum/10; b2=g_MotorNum%10; if(FX == 0) P0=0x71;//显示F else P0=0x79; SMG1=0; delayms(3); SMG1=1; P0=0x40; SMG2=0; //显示-- delayms(3); SMG2=1; P0=table[b1]; SMG3=0; //显示十位 delayms(3); SMG3=1; P0=table[b2]; SMG4=0; delayms(3); //显示个位 SMG4=1; } /********延时函数***********************************************************/ void delayms(xms) { unsigned int x,y; for(x=xms;x>0;x--) for(y=110;y>0;y--) ; } |
|
相关推荐 |
|
基于 DSP5509 进行数字图像处理中 Sobel 算子边缘检测的硬件连接电路图
2504 浏览 0 评论
700 浏览 0 评论
普中科技F28335开发板中,如何使用aic23播放由代码生成的正弦波
2935 浏览 0 评论
3703 浏览 1 评论
1214 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-27 23:36 , Processed in 0.570156 second(s), Total 39, Slave 31 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号