完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
单片机初学者,要用89c52单片机1602显示屏制作频率计,已从网上购买单片机开发板。自己结合网上知识及书本,大概写出来这么多。
思路:定时器0定时1ms,然后总定时500ms,利用外部中断(方波信号)接INT0口,控制是否进行定时。因为一个周期有一半的周期为0,即不能定时,所以测量500ms内,外部中断(低电平)次数,即表达频率。 #include // #include typedef unsigned char uchar; typedef unsigned int uint; //开头定义 ***it RS=P3^5; //RS端 ***it RW=P3^6; //RW端 ***it EN=P3^4; //EN端 ***it DB=P0; //***it DU = P2^6; //***it WE = P2^7;//数码管端口 uint n=0; uint m=0; uint i=0; uchar str[10] ; void delay(uchar b) //延时程序 { uint x,y; for(x=b;x>0;x--) for(y=114;y>0;y--); } void Write_cmd(uchar b) //1602写指令 { EN=0; RS=0 ; DB=b; delay(5) ; RW=0; delay(5) ; EN=1; EN=0; } void Write_date(uchar c) //1602写数据 { EN=0; DB=c; RS=1 ; delay(5) ; RW=0; delay(5) ; EN=1; EN=0; } void Init_lcd1602() //1602初始化 { Write_cmd(0x38); //16X2显示,5X7矩阵,8位数据接口 Write_cmd(0x0c); //开显示,无光标,无闪烁 Write_cmd(0x04); //读后地址字节减1 Write_cmd(0x01); //清屏 } void Init_dingshi() //定时器初始化,1ms { TMOD=0x09; //定时器0工作,gate为1。 TH0=0xfc; TL0=0x67; //1ms定时 TR0=1; // gate为1,tro为1时,int0高电平计数 ET0=1; //内部溢出中断允许 } void neibu() interrupt 1 //内部中断服务程序 { TH0=0xfc; TL0=0x67; //重新装入1ms TF0=0; m++; } void waibu() interrupt 0 //外部中断服务程度 { n++ ; } void main() { //DU=0; //WE=0;//数码管关闭 EA=1;//开总中断 EX0=1;//允许外部中断 IT0=1;//设置中断为下降沿 Init_lcd1602() ; //1602初始化 Init_dingshi() ; //定时器初始化 while(1) { if(m>500) { m=0; //设置一个500ms的循环 Write_cmd(0x89); //段首地址 Write_date('z'); Write_date('h'); while(i<8) { str=n%10; n=n/10; Write_date(str); i++; } n=0; } } } |
|
相关推荐
1个回答
|
|
段首地址后面可能错了
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
2523 浏览 1 评论
8127 浏览 0 评论
1942 浏览 0 评论
VL53L5CX #高达 8x8 多区域测距和 63°对角线宽视场 飞行时间多区域测距传感器
17324 浏览 0 评论
【罗姆传感器评估板试用体验连载】罗姆传感器整合进同一个示例程序
21965 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-28 12:39 , Processed in 0.548216 second(s), Total 74, Slave 56 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号