当前位置:首页 > 单片机 > 单片机
[导读]可预置的8位计数器程序的主要部分分析#include //器件配置文件#define uchar unsigned char //变量类型的宏定义#define uint unsigned intuchar code SEG7[10]={0x03,0x9f,0x25,0x0d,0x99, //0~9的数码管段码0x49,0x

可预置的8位计数器程序的主要部分分析

#include //器件配置文件

#define uchar unsigned char //变量类型的宏定义

#define uint unsigned int

uchar code SEG7[10]={0x03,0x9f,0x25,0x0d,0x99, //0~9的数码管段码

0x49,0x41,0x1f,0x01,0x09};

uchar data cnt[8]; //在data区定义8位长度的数组,用来存放计数值

uchar data pre_cnt[8]; //在data区定义8位长度的数组,用来存放预置值

sbit drv=P3^4; //定义输出驱动端

bit set_flag; //定义工作标志

bit out_flag; //定义输出标志

bit keydown_flag; //键按下标志

/****************************************************************/

void scan_key(void) //扫描S1~S8键子程序开始

{uchar i,m=0x01; //定义两个字符型局部变量,并赋值0x01给m

P3_6=0;P3_7=1; //禁止发送给显示器,消隐有效

for(i=0;i<8;i++) //循环8次

{

SBUF=255-m;while(!TI);TI=0; //依次发送数据使IC2的输出从右至左的列线为0

if(!P3_5)pre_cnt++; //若检测到P3.5为0,说明某列线送出0时与连接

//该列线的按键被按下,数组中对应的存放单元加1

m<<=1; //m的取值使从右向左的下一条列线为0

} //扫描S1~S8键子程序结束

//----------------------------------------------------------------------------------------

for(i=0;i<8;i++) //循环8次

{if(pre_cnt>9)pre_cnt=0;} //对数组中的8个单元进行调整,其范围为0~9

}

/*************************************************************/

void dis_cnter(void) //显示计数器值子程序开始

{uchar i; //定义字符型局部变量i

P3_7=1;P3_6=1; //消隐有效,允许显示

for(i=0;i<8;i++) //循环8次

{SBUF=SEG7[cnt];while(!TI);TI=0;} //根据8个单元的计数值查表发送显示

P3_7=0; //关闭消隐,正常显示

} //显示计数器值子程序结束

/****************************************************************/

void cnter(void) //计数转换子程序开始

{uchar i; //定义字符型局部变量i

for(i=0;i<7;i++) //循环8次

{if(cnt>9){cnt=0;cnt[i+1]++;}}//若计数器某位值大于9,则该位回0,

//而高位被进位加1

//------------------------------------

if(cnt[7]>9){for(i=0;i<8;i++)cnt=0;}// 若计数器最高位值大于9,则计数器全清0

} //计数转换子程序结束

/******************************************************************/

void pt_cnt(void) //输出控制子程序开始

{

if((cnt[0]==pre_cnt[0])&&(cnt[1]==pre_cnt[1])&&

(cnt[2]==pre_cnt[2])&&(cnt[3]==pre_cnt[3])&&

(cnt[4]==pre_cnt[4])&&(cnt[5]==pre_cnt[5])&&

(cnt[6]==pre_cnt[6])&&(cnt[7]==pre_cnt[7])) //若计数值等于预置值

out_flag=1; //输出标志置1

else out_flag=0; //否则输出标志置0

//=================================================

if(out_flag)drv=0; //若输出标志为1,输出端(P3.4)置0,驱动光耦U2

else drv=1; //否则输出端(P3.4)置1

} //输出控制子程序结束

/**********************************************************/

void main(void) //主程序开始

{ IE=0x84; //开放CPU中断,开放外中断1的中断

IT1=1; //置外中断1为边沿触发

while(1) //无限循环

{P3_6=0;P3_7=1; //禁止发送给显示器,消隐有效

SBUF=0x00;while(!TI);TI=0; //向IC2发送0x00,使IC2输出为全0

if((P3&0x24)!=0x24)keydown_flag=1; //检测P3.2、P3.5是否为高电平。

//若不为高电平,说明有键按下,键被按下标志置1

else keydown_flag=0; //否则,键被按下标志置0

//-------------------------------------------------------------------------------

SBUF=0xfe;while(!TI);TI=0; //向IC2发送0xfe

if(!P3_2)set_flag=!set_flag; //若P3.2为0,说明S9键按下,标志set_flag取反

//==================================================

if(!set_flag){cnter();dis_cnter();pt_cnt();delay(100);}

//若标志set_flag为0,调用计数、显示计数、输出控制的子程序

else {scan_key();dis_pre_cnter();delay(10);}

否则标志set_flag为1,调用扫描S1~S8键、显示预置值的子程序

//=====================================================

if(keydown_flag)delay(300); //因有键按下,调用延时300mS子程序,

//以免调整键值的速度过快

}

} //主程序结束

/***************************************************************/

void extern_int1(void) interrupt 2 using 1 //外中断1服务子程序

{

cnt[0]++; //计数器的最低位加1

}

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

上海2025年7月27日 /美通社/ -- 在2025世界人工智能大会(WAIC)期间,全球领先消费品企业联合利华首次以企业展商身份亮相,并深度参与多个AI主题论坛和行业对话,展示了其在人工智能领域的战略思考与实践布局。...

关键字: AI FOR SCIENCE 人工智能

完全无人化 —— 定义未来金标标准的100%自动化诊断系统 CURECA™ 将于7月28日至31日在芝加哥首次亮相。 实现全球诊断数据的统 —— 设立大数据平台 S...

关键字: GEN 自动化 无人值守 SE

-创新邂逅包容,2025年EdHeroes全球论坛探索以人为本的教育技术未来 列支敦士登特里森2025年7月22日 /美通社/ -- 随着创新加速、科技重新定义现代生活的方方面面, 2025年EdHeroes全球论坛(...

关键字: 人工智能 FOR GLOBAL 数字化

厦门 2025年7月3日 /美通社/ -- 厦门市华师希平双语学校在三年办学历程中取得积极进展,教育教学工作呈现良好态势。 教育教学稳步推进 中考表现:2024年首届中考总均分在全市表现良好;2025届地...

关键字: BSP 人工智能 AI SE

Holtek推出新一代无刷直流电机 (BLDC) 控制专用单片机 HT32F65233。采用 Arm® Cortex®-M0+ 低功耗内核, 具备 2.5 V~5.5 V 宽电压操作。系统电压为 5 V 时,可获得更高的...

关键字: BLDC单片机 电机驱动 计数器

上海 2025年6月20日 /美通社/ -- 6月18日至20日,2025世界移动通信大会•上海(MWCS 2025)在上海盛大开幕,全球目光再次聚焦这场通信领域的年度盛会...

关键字: AI 5G WORLD FOR

会议议题将涵盖  AI 驱动的工程设计、智能制造以及基于  HPC 和 AI 相结合的智能扩展 上海 2025年6月19日 /美通社/ -- 全球计算智能领域科技公司Altair将于 2025 年 6 月...

关键字: ENGINEERS FOR TC AIR

与英伟达的技术合作致力加速生产制造的数字化转型 舍弗勒全球工厂将通过AI解决方案的应用加速制造工艺的革新,并提升产品质量 舍弗勒凭借数十年在制造领域的技术积累,推动工业元宇宙持续发展 巴黎和赫...

关键字: 数字化 英伟达 SE NI

巴黎和首尔 2025年6月12日 /美通社/ -- 全球AI内容创作先锋SKAI Intelligence今日宣布,将于2025年巴黎VivaTech科技盛会正式发布全球首个完全基于NVIDIA Omniverse构建...

关键字: AI NVIDIA SE RS

上海 2025年5月28日 /美通社/ -- 2024年12月15日,DEKRA德凯温州低压实验室正式通过沙特电力公司(SEC)的全面评估,成功入选其认可的独立测试实验室名...

关键字: 电力 SE 低压电器 电力系统
关闭