当前位置: 首页 > article >正文

stc8g1k08a+cd4017红绿灯

2,4脚供电,567脚控制三个灯,另外三只脚控制cd4017脉冲输入,复位清零和数码管共阴极
数字只能显示一位0-9
在这里插入图片描述

hex文件
蓝奏云
main.c

sfr p5 = 0xc8;//p5端口寄存器
sfr P5M1 = 0xc9;//p5端口m1配置寄存器
sfr P5M0 = 0xca;//p5端口m0配置寄存器
sbit p54 = p5^4;//p5.4端口
sbit p55 = p5^5;//p5.5端口

sfr P3 = 0xB0;
sfr P3M1 = 0xB1;
sfr P3M0 = 0xB2;
sbit p33 = P3^3;
sbit p32 = P3^2;
sbit p31 = P3^1;
sbit p30 = P3^0;


sfr TCON = 0x88;//定时器控制寄存器
sfr TMOD = 0x89;//定时器模式寄存器
sfr TH0 = 0x8c;//定时器t0高8位寄存器
sfr TL0 = 0x8a;//定时器t0低8位寄存器
sfr AUXR = 0x8e;//辅助寄存器1
sfr TH1 = 0x8d;//定时器t1高8位寄存器
sfr TL1 = 0x8b;//定时器t1低8位寄存器

sbit TF0 = TCON^5;//定时器t0溢出标志位
sbit TR0 = TCON^4;//定时器t0运行控制位
sbit TF1 = TCON^7;//定时器t0运行控制位
sbit TR1 = TCON^6;//定时器t0运行控制位

sfr IE = 0xa8;//中断允许寄存器
sbit EA = IE^7;//总中断允许控制位 0屏蔽中断 1开放中断
sbit ET0 = IE^1;//定时器计数器1溢出允许中断位 0禁止t0中断 1允许t0中断

void delayms(int t);//延时函数声明	
void Timer0_Init(void);//定时器0声明

void zhongduan_init(void){
EA = 1;//启用中断
ET0 = 1;//允许t0中断
}


int s=1;
void led_display(int n)
{	
	s=0;
	while(s<1000){
	p33=0;//cd4017开始计数
	p55=1;//数码管负极,拉高不显示
	
	
	 switch (n) {
		 
						case 0:
								if (s<600) {
                    p55 = 0;
                }
                break; 
			 
            case 1:
                if (s >100 && s < 300) {
                    p55 = 0;
                }
                break; 
          
						case 2:
							if(s<200||(s>300&&s<500)||(s>600&&s<700)){
							p55=0;
							}
							break;
							
						case 3:
							if((s>600&&s<700)||s<400){
							p55=0;
							}
							break;
						
						 case 4:
							if (s >100&&s<300||(s>500&&s<700)) {
								p55 = 0; 
							}
							else{
									p55=1;
									}
							break;
						case 5:
							if (s < 100 || (s > 200 && s < 400) || (s > 500 && s < 700)) 
								p55 = 0; 
								break;
						case 6:
							if (s<100||s >200&&s<700) {
								p55 = 0; 
							}
							else{
									p55=1;
									}
							break;
						case 7:
							if (s<300) {
								p55 = 0; 
							}
							else{
									p55=1;
									}
							break;
						case 8:
							if (s <700) {
								p55 = 0; 
							}
							else{
									p55=1;
									}
							break;
									
							case 9:
							if (s<700&s >500||s<400) {
								p55 = 0; 
							}
							else{
									p55=1;
									}
							break;
							
    
        }
	 
if (s!=0&&s%100==0){
	p54=1; //cd4017计数加一
	p54=!p54;
	}
	s++;
	
}
	
	
	p33=1;//cd4017复位

	
}



	
/*
p55接数码管共阴极
p54接cd4017时钟输入端cp(14)
p33接cd4017复位清零CR(15)
p32红灯负极
p31绿灯负极
p30黄灯负极

*/
int x=0;
int number=1;
int c=0;
int led_c;
void main() {
	P5M1 = 0x00;
	P5M0 = 0xff;
	p55=0;//p5.5端口低电平
	p54 = 1;
	
	P3M0 |= 0x0f; 
	P3M1 &= ~0x0f; 
	p30=1;
	p31=1;
	p32=1;
	p33=1;//cd4017复位
	EA = 1;//总中断控制位,启用中断
	
	//启用定时器0中断
	ET0 = 1;//允许t0中断
	AUXR |= 0x80;			//定时器时钟1T模式 t0不频 t1 12分频
	TMOD &= 0xF0;			//设置定时器模式
	TL0 = 0xCD;				//设置定时初始值 205
	TH0 = 0xD4;				//设置定时初始值 212
	TF0 = 0;				//清除TF0标志
	TR0 = 1;				//定时器0开始计时
	s=0;
 delayms(1000);//延时
	
	while(1){
		led_c=1;//led 1红2绿3黄
		while(led_c<=3){
			switch(led_c){
				case 1:
					p32=0;
					p31=1;
					p30=1;
				break; 
				case 2:
					p32=1;
					p31=0;
					p30=1;
				break; 
				case 3:
					p32=1;
					p31=1;
					p30=0;
				break; 
			}
			number=0;//从0开始显示
		while(number<=9){
		led_display(number);
		delayms(1);
			c++;
			if(c==50){
			c=0;
			number++;
			}
		}
led_c++;		
		
	}
}
}

		

	
void Timer0_Init(void) 		//定时器,1毫秒@11.0592MHz
{
	AUXR |= 0x80;			//定时器时钟1T模式
	TMOD &= 0xF0;			//设置定时器模式
	TL0 = 0xCD;				//设置定时初始值 205
	TH0 = 0xD4;				//设置定时初始值 212
	TF0 = 0;				//清除TF0标志
	TR0 = 1;				//定时器0开始计时
	 // 等待定时器溢出
  while (!TF0); // 等待TF0置位
// 停止定时器并清除溢出标志
  TR0 = 0;      // 停止定时器0
  TF0 = 0;      // 清除TF0标志
}



void delayms(int t){//延时函数

	int i=0;
	while(i<t){
	Timer0_Init();
		i++;

}
	}

http://www.kler.cn/a/599084.html

相关文章:

  • Linux 文件操作-文件IO函数2- write向文件写入数据、read从文件读取数据、lseek重定位文件描述符的偏移量的验证
  • (UI自动化测试web端)第二篇:元素定位的方法_xpath路径定位
  • 记录 macOS 上使用 Homebrew 安装的软件
  • 批量删除或替换多个 PPT 文档中的首页、尾页或其它任意范围的页
  • 【实战指南】用MongoDB存储文档和图片等大文件(Java实现)
  • EasyRTC嵌入式音视频通话SDK:微信生态支持、轻量化架构与跨平台兼容性(Linix/Windows/ARM/Android/iOS/LiteOS)
  • Windows安装Jenkins配置Allure踩坑,必须单独配置当前windows系统为新的node节点,才可在工具位置中指定节点服务器allure的位置
  • and滚动下拉加载
  • 【无标题】vue项目,浏览器打印时,永远只显示一页的问题
  • JSX入门
  • 第31章:Istio安全:mTLS与服务间身份认证
  • Python爬虫获取Shopee店铺的所有商品?
  • git使用经验(一)
  • 算法方法快速回顾
  • leetcode 的T5 最长回文字符串
  • 【Linux之Shell脚本实战】Linux服务器输出美观漂亮的html巡检报告
  • 4.4 前缀和专题:LeetCode 238. 除自身以外数组的乘积
  • 企业级前端架构设计与实战
  • 3.23 代码随想录第二十四天打卡
  • armsom产品qt交叉编译